Useful packages for web devel

The Rack­et ecosys­tem has all sorts of util­i­ties that will help you with web de­vel­op­ment. Here are some of my fa­vorites. This may not be a com­plete list, but it is an hon­est at­tempt to list pack­ages that are good to know about for web de­vel­op­ment in Rack­et, even if you don’t need them.

Ac­knowl­edg­ments Thanks to Greg Hen­der­shott, An­na­ia Dan­vers, and Sage Ger­ard for help­ing! Cred­it also goes to Awe­some Rack­et for main­tain­ing a very ex­ten­sive cu­rat­ed list of Rack­et pack­ages cov­er­ing all sorts of ar­eas (not just web pro­gram­ming).

Con­tents

  1. Web frame­works
  2. Gen­er­at­ing, query­ing, and pars­ing XML and HTML
  3. CSS
  4. Data­bas­es and kin
  5. HTTP
  6. JSON
  7. JavaScript/EC­MAScript
  8. Sys­tems, in­fra­struc­ture, en­vi­ron­ment
  9. Cryp­to, au­then­ti­ca­tion, and ran­dom num­bers
  10. Test­ing
  11. Every­thing else

Web frame­works

Here are some bun­dles of web good­ness that help round out the over­all Rack­et web ex­pe­ri­ence.

HoLy
Sim­ple HTTP li­brary for cre­at­ing your web ap­pli­ca­tions and REST APIs eas­i­er.
koyo
Full-fea­tured web frame­work
routy
Light­weight high-per­for­mance HTTP re­quest router
spin
Write REST­ful web apps (→ un­of­fi­cial demo)
vela
Sim­ple web frame­work to build REST­ful apps
web-galaxy
A min­i­mal­ist web frame­work

Gen­er­at­ing, query­ing, and pars­ing XML and HTML

X-ex­pres­sions (xex­prs) are a wide­ly used rep­re­sen­ta­tion of HTML found in var­i­ous li­braries and in the core of the Rack­et web serv­er. It stemps from a time be­fore HTML5, but it works just fine.

gillette
XPath for Rack­et
html-pars­ing
Parse HTML
html-writ­ing
Se­ri­al­ize HTML
laramie
HTML5 pars­er
tx­ex­pr
Con­ve­nience func­tions for X-ex­pres­sions
xe
Xex­pr XML util­i­ties, plus tra­ver­sal and fil­ter­ing
xex­pr-path
XML Ex­pres­sion Path Lookup

CSS

css-expr
CSS, the Lisp way (S-ex­pres­sions)
css-tools
Tools for gen­er­at­ing & ma­nip­u­lat­ing CSS

Data­bas­es and kin

db
Con­nect­ing to pop­u­lar re­la­tion­al data­bas­es (Post­gres, MySQL, SQLite, etc.)
deta
Func­tion­al data­base map­per
mem­cached
Us­ing mem­cached in your Rack­et pro­grams
mon­godb
Mon­goDB client
north
#lang for data­base mi­gra­tions
rac­quel
Rack­et-style Ob­ject-re­la­tion­al map­ping
re­dis-rkt
Re­dis client
sql
SQL as S-ex­pres­sions

HTTP

Rack­et comes with an HTTP client that may work just fine for your pur­pos­es. If you’re look­ing for some­thing with a bit more flex­i­bil­i­ty and pow­er, try these op­tions.

http-easy
Sim­ple HTTP client
http123
HTTP client (sup­ports HTTP2)
rack­et­mq
W3C Web­Sub
rfc6455
Han­dling Web Sock­ets
scgi
(Sim­ple) Com­mon Gate­way In­ter­face (SCGI/CGI)

JSON

Rack­et comes with a rep­re­sen­ta­tion for JSON called js­ex­prs But you may need a bit more than those such ba­sic func­tion­al­i­ty.

argo
JSON Schema val­i­da­tion
json-point­er
Parse, ren­der, and eval­u­ate JSON Point­er

JavaScript/EC­MAScript

We all know that JavaScript is king of the web. (Whether you like that or not, well, that’s a dif­fer­ent sto­ry.) Rack­et can help with with that.

ec­mascript
Pars­er, run­time and #lang for EC­MAScript
javascript
im­ple­men­ta­tion of JavaScript
rack­etscript
light­weight Rack­et to JavaScript com­pil­er
urlang
Write JavaScript with Rack­et syn­tax

Sys­tems, In­fra­struc­ture, En­vi­ron­ment

It’s (prob­a­bly) not enough to just fire up a dis­patch­er/servlet. You need to man­age all sorts of oth­er stuff around your ap­pli­ca­tion.

aws
Con­nect to Ama­zon Web Ser­vices (AWS)
dotenv
Ex­tend the en­vi­ron­ment by load­ing files
envy
En­vi­ron­ment vari­able man­ag­er
re­load­able
Sup­port for code-re­load­ing for long-run­ning rack­et pro­grams (such as web servers)

Cryp­to and ran­dom num­bers

Pass­words. Ran­dom data. Keys. Ugh?

base64
Base64 en­cod­ing & de­cod­ing
bcrypt
In­ter­face to bcrypt
cryp­to
Cryp­tog­ra­phy li­brary
libar­gon2
Li­brary for in­ter­fac­ing with the Ar­gon2 key de­riva­tion func­tion
net-jwt
JSON Web To­ken and JSON Web Sig­na­ture (RFC 7519 and RFC 7515)
uuid
Gen­er­ate UUIDs in Rack­et

Test­ing

mar­i­onette
Con­trol Fire­fox via the Mar­i­onette Pro­to­col
re­quest
Con­struct­ing HTTP and REST-ful re­questers and in­te­gra­tion tests
ri­poste
Script­ing lan­guage for black-box test­ing JSON-based HTTP APIs

Mis­cel­la­neous and web-ad­ja­cent

Stuff that doesn’t be­long in any of the oth­er buck­ets above.

forms
Han­dling web form(let)s
rapi­der
Web scrap­ing frame­work