SQLite extension adding Postgres-style NOTIFY/LISTEN, durable queues, streams, pub/sub, and a cron scheduler – no daemon or broker required.
Key Takeaways
Cross-process push delivery works by stat-polling the WAL sidecar (size, mtime) on every commit, replacing interval queries on SQLite tables entirely.
Three primitives: ephemeral notify(), durable stream() with per-consumer offsets, and at-least-once queue() – all implemented as table INSERTs inside your open transaction.
Atomic transactional guarantee: queue.enqueue() and your business INSERT commit together; rollback drops both, eliminating the dual-write problem common with Redis + Celery.
Requires journal_mode = WAL; wal_autocheckpoint = 10000 batches fsyncs to one per 10k pages rather than per-commit, which is where most throughput gain comes from.
Thin language bindings for Python, Node.js, Rust, Go, Ruby, Bun, and Elixir wrap a single loadable .so extension; schema compatibility between bindings is pinned by interop tests.
Hacker News Comment Review
After community feedback, the author shipped a PR replacing stat-based (size, mtime) detection with PRAGMA data_version polled every 1ms – SQLite’s own monotonic commit counter, which is more reliable across platforms.
The WAL checkpoint truncation edge case was raised as a real risk: when SQLite resets the WAL back to zero bytes, a size-drop event could be misread or missed by a stat poller, potentially dropping wake signals.
The stat(2) vs. inotify/kqueue/FSEvents tradeoff was contested but settled: FSEvents silently drops same-process write notifications on macOS, meaning a publisher and listener in the same Python process would never fire – making portable stat polling the correct if unglamorous choice.
Notable Comments
@JoelJacobson: PostgreSQL 19 is adding selective LISTEN/NOTIFY signaling to scale better when many backends listen on different channels – relevant competitive context for the Postgres side of the comparison.
@nzoschke: Confirms the target persona directly – running a proliferation of small SQLite-backed apps and hand-rolling queue/scheduler logic while “pining for the elegance of the Postgres solutions.”