finds.dev← search

// the find

marijnh/Postmodern

★ 431 · Common Lisp · NOASSERTION · updated Jul 2025

A Common Lisp PostgreSQL programming interface

Postmodern is a Common Lisp PostgreSQL driver that implements the wire protocol directly in Lisp — no foreign libraries, no FFI. It ships a Lisp-to-SQL compiler (S-SQL) that does most of its work at compile time, a thin DAO metaclass, and connection pooling. If you write Common Lisp and touch Postgres, this is the library, not a library.

The wire protocol is implemented entirely in Lisp, which means no libpq, no OS-level dependency management, no version mismatch headaches across platforms. S-SQL compiles s-expressions to SQL at macro-expansion time, so you catch syntax errors before runtime and avoid building strings manually. Marijn Haverbeke is a credible author — this is the same person behind CodeMirror and ProseMirror, and the July 2025 commit history shows it's not stagnant. SCRAM-SHA-256 auth and prepared statements are supported out of the box, which puts it ahead of a lot of niche-language drivers that still only do MD5.

The built-in connection pooler is a toy — `*max-pool-size*` with no minimum, no health checks, no reconnect on stale connections. Anything resembling production load should use PgBouncer in front of it. The simple-date library has no timezone awareness at all; you need to pull in local-time separately and wire up the readers yourself, which the README mentions almost apologetically. The DAO layer is intentionally minimal — no lazy loading, no relationships, no query chaining — so you'll be writing raw S-SQL for anything beyond single-table CRUD, which is fine but worth knowing upfront. ABCL has a known broken dao-class inheritance bug that's been open since 2021, so if that's your implementation, DAOs are off the table.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →