Roost is a background job queue that uses your existing PostgreSQL database as its backend — no Redis, no RabbitMQ, no extra infrastructure to run or monitor.
Why Roost
Most projects already have Postgres. Adding a job queue shouldn’t mean adding and operating a whole new service. Roost turns your Postgres into a reliable, high-throughput queue using primitives the database already provides.
How it works
- Transactional enqueue — jobs commit within your database transaction, so a rollback never produces orphaned tasks
SELECT FOR UPDATE SKIP LOCKED— concurrent workers each claim a distinct job without stepping on each otherLISTEN / NOTIFY— real-time job notifications eliminate polling overhead entirely- Heartbeats + orphan reaper — automatic recovery if a worker crashes mid-job
Performance
| Mode | Throughput |
|---|---|
| Bulk enqueue (single async conn) | 15,289 jobs/sec |
| Sustained drain (16 workers) | 822 jobs/sec |
Stack & compatibility
- Drivers:
asyncpg(async),psycopg(sync) - Frameworks: FastAPI, Starlette, Django, Flask
- Python: 3.10 – 3.13 · Postgres: 13 – 16
- Dashboard:
roost-web— live job monitor with SSE real-time updates - License: MIT