Alpha · 0.1.0a27
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, complete operator CLI, standalone scheduler, optional FastAPI facade, follow-ups, workflows, schedules, continuations, trusted effects, and a per-queue flow-control plane. Current release: 0.1.0a27.
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 --dsn-env TASKQ_DSN worker run --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.0a27
SQL contract 0.6.6 includes the queue kernel, orchestration surfaces, workflow continuations, bounded operator projections, trusted host-effect fencing, and the per-queue flow-control plane — breaker, rate limits, caps, priority aging, counters, and health verdicts.
Documentation
Read in order
The public docs match the 0.1.0a27 package surface. Deep design specs live in the GitHub repo.