Fall in love with programming all over again with Racket.

Tips, tricks, articles, tutorials, and other useful resources for getting the most out of Racket. By Jesse Alama.


Server-side cookie processing in Racket

Cookies are a bread-and-butter technique for preserving state across HTTP requests. If you don't want to use continuations in your Racket web apps but still have a halfway workable concept of state, cookies are how you can achieve this. Here's how you can read and generate cookies using the Racket web server.

[put your hand in the cookie jar]

27.5 Racket packages for web devel

Is Racket ready for web development? Here are some useful packages to keep in your web programming toolbox.

[hack the web with Racket]

Object-relational mapping in Racket with Racquel

Object-relational mapping is a technique for making a correspondence between entries in a relational database (such as MySQL or Postgres) and objects in a system runtime. The relationship is maps tables to classes. This is often a useful (if at times less-than-ideal) approach to working with relational databases in code. Here's how you can do that in Racket with Racquel.

[map my objects]

Validate JSON input with JSON Schema

Receiving JSON inputs over an HTTP API is a common way of designing a web site. Many common checks for making sure that your data has the intended structure (this is an integer, that is a string, there are no superfluous inputs, etc.) can be carried out using JSON Schema. Here's how you can do that in Racket.

[check your JSON]

Functionally rewriting HTTP requests and responses with struct-copy

Manipulating HTTP requests and responses is a common need in web sites and HTTP APIs. Here's a straightforward way to do that, in a functional way, in Racket.

[rewrite HTTP with gusto]

Argo: JSON Adventures in JSON Schema

You know the feeling: you're working with JSON data and need to make sure that it adheres to some sensible constraints. JSON Schema is a sensible way to ensure that. Argo is a Racket library for validating JSON data using JSON Schema.

[validate JSON]

Get the original request, no matter where you are

When dealing with complicated requests, it sometimes help to know the URL of the request that got you where you landed. If the request is an argument to your function, it's clear what needs to be done. But what if it's not? Here's a Racket-y way to get the information you need.

[get original requests]

How do you get the ID of the row created by an INSERT using Postgres?

How do you get the ID of the row you just inserted into your Postgres table? There's an elegant technique that will give you exactly this information. And if you don't know about query placeholders yet, now is a good time to get up to speed.

[make Postgres RETURNING what you want]

New ebook coming on web development in Racket

You'd love to make a web site with Racket, but it's not clear how to get started. The available tutorials are a good start, but there's something missing. Coming soon: an ebook on making real-world websites with Racket that aims to fill the gap.

[serve up some Racket]

Logging web server events in Racket to syslog

Logging is crucial for keeping tabs on a web site. Here's a simple guide to getting started with Racket's nice logging system, which addresses one gotcha that might explain why you aren't seeing anything from Racket in the system log.

[learn to love logging]

Production vs. development environments for the Racket HTTP server

When developing a site, it's useful to be able to distinguish between production (server is live) vs. development (server is not live). In development, the server should behave slightly differently: it might generate more verbose debugging output, use different configurations for connecting with external services, and so on. Here's a simple way to do that in Racket using environment variables and parameters.

[go live…or not]

Installing a fallback error handler for your Racket web app

True story: that sweet Racket servlet you wrote probably has errors. Here's how you can install a fallback error handler for your Racket web app to make sure that you log those unexpected problems that are bound to arise, and then bow out gracefully to your users with a clean HTTP response.

[fall back to safety]

Convenient, thread-safe database connections for your Racket web site

When building a web site with Racket, you may find yourself needing to communicate with a relational database (MySQL, Postgres, etc.). If each request gets handled in a separate thread, how do you make sure that your database connections are isolated from each other? Here's how you work with databases robustly using Racket.

[get thread-safe]

How to deploy a Racket web site to Ubuntu Linux with Apache

Now that you've made a Racket-based web app, how do you deploy it? Using Ubuntu and Apache is a straightforward approach. Here's a step-by-step guide to pushing your Lisp live.

[learn more]

CRUD web APIs using the Racket web server

Writing CRUD (create, read, update, delete) web applications with Racket is great fun. Getting started, though, can be difficult. The documentation is overwhelming. Here's some starter code for a simple database-style web service that maintains a hash table, which offers resources in JSON.

[get your CRUD on]

How to use raco in Docker: Needed Ubuntu packages

When running raco in an Ubuntu-based Docker container, there are a couple of packages you'll need if you want to use raco inside the container.

[apt-get read more]

How do I fetch a URL in Racket?

Simple HTTP operations, such as simply doing an HTTP GET on a URL, are a bit fussy in Racket. Here's a code snippet that can simplify things.

[GET going]

Does the memory usage of the Racket web server balloon if you don’t use continuations?

When building a web application using the Racket web server modules, it's clear that, if you use continuations, your web server's memory footprint will grow over time. But what if you're not using continuations?

[save memory]

How do I get the URL of the current request?

Whether you're using stateful or stateless servlets, you sometimes want to know what the URL of the current request is. Here's how you can get it.

[give it to me]

URL dispatching in Racket without continuations

Confounded by continuations? It can seem that building even a simple web application in Racket requires you to use a fairly advanced programming concept. Here's how you can make a web application in Racket using traditional URL-based dispatching based on routes. Starter code included.

[route me in]

Make Emacs use Racket mode for files with non-standard extensions

You'd like to use Emacs to hack Racket code, but your file does not have a standard .rkt extension. Here's how to get Emacs to switch to Racket mode based on the contents of the file rather than its extension.

[detect Racket]

How to balance parentheses in DrRacket

DrRacket is pretty great. But it seems to be missing an obvious feature: balanced parentheses. The feature is actually there, if you know where to look.

[get balanced]

Where should I keep my Racket snippets?

“This function is pretty sweet, I bet others would find this useful.” What’s the Racket-y way to store and share your Racket code snippets?

[paste away]

Where does DrRacket look for files?

DrRacket and racket on the command line might behave differently when it comes to process, system, and friends. What's going on? A good place to start is the environment. Three tips for making sure these differences don't bite you.

[take the PATH less traveled]

Do hash-key and hash-values give their results in the same order?

When working with hash tables, is it safe to assume that the list that hash-keys returns has the same order as the list returned by hash-values? Answer: No.

[learn more]