Pre-alpha · 0.1.0a2
A task queue that lives in your Postgres.
OutlabsTaskq is a SQL-first job queue for Python fleets: claim, fence, retry, and settle through PL/pgSQL — with a typed Python client, worker CLI, and optional FastAPI facade. Stages 1–3 ship in 0.1.0a2.
worker.pyPostgres
from taskq import Task, TaskQ, TaskRegistry
DOUBLE = Task(name="demo.double", queue="demo", …)
registry = TaskRegistry((DOUBLE,))
tq = TaskQ.from_dsn(DATABASE_URL, registry=registry)
result = await tq.enqueue(DOUBLE, {"value": 3})
# result.status in {"created", "existed"}
# then: taskq worker --dsn … --registry tasks:registry --queue demoSQL contract
taskq.* functions
Fenced
attempt_id CAS
Optional HTTP
Facade + auth inject
Built for the Python stack you already operate
Own the queue
Your jobs should feel like part of your database
OutlabsTaskq keeps the hot path inside Postgres. No second broker to back up, no client-clock lease math, and no silent unique-skip footguns.
- SQL is the contractClaim, fencing, uniqueness, and retry budget live in PL/pgSQL — Python is a typed client.
- Safe settlesAttempt fencing and typed settle races mean a lost HTTP response never discards finished work.
- Optional HTTP facadeWorkers can stay credential-free. Auth is injected — outlabs-auth is optional, never required.
Capabilities
What ships in 0.1
Stages 1–3 are independently accepted. Start with getting started, then concepts, API, and operations.
Documentation
Read in order
The public docs match the 0.1.0a2 package surface. Deep design specs live in the GitHub repo.