How it compares โ
Conveyor is a durable task queue. Its closest peers are asynq (Redis-backed) and River (Postgres-backed), both Go libraries. Conveyor is Postgres-first like River, but ships as a clustered server with a language-neutral wire protocol and push-based dispatch, serves Go, TypeScript, and Python SDKs, and also runs embedded inside a Go process.
| Capability | Conveyor | asynq | River |
|---|---|---|---|
| Primary store | Postgres or in-memory | Redis | Postgres |
| Runs as | Server and embedded library | Library | Library |
| Dispatch | Push (streaming) | Poll | Poll plus LISTEN/NOTIFY |
| HA / failover | Built-in clustering; a lost node's work re-activates elsewhere. Kubernetes and static discovery out of the box, or a pluggable provider interface | Via Redis (Sentinel/Cluster) | Postgres advisory-lock leader election |
| Transactional enqueue | โ | โ | โ ยน |
| Atomic multi-task enqueue | โ (EnqueueTx) | โ | โ (InsertMany) |
| SDK languages | Go, TypeScript, Python | Go | Go |
| Weighted queues | โ | โ | โ |
| Per-task priority | โ (1 to 9) | โ (queue weights) | โ |
| Delayed / scheduled | โ | โ | โ |
| Reschedule a task's run time | โ | โ | โ |
| Cron / periodic | โ (server-persisted, survives failover) | โ (in code) | โ (in code) |
| Unique tasks | โ | โ | โ |
| Retries with backoff | โ (exponential/linear/fixed, server-wide or per task) | โ | โ |
| Dead-letter / archive | โ | โ | โ |
| Pause / resume queues | โ | โ | โ |
| Rate limiting | โ (per-queue, live) | DIY ยฒ | โ |
| Per-key concurrency | โ | โ | โ |
| Circuit breaker | โ (per task type) | โ | โ |
| Task dependencies (workflows) | โ (chains, fan-out/in) | โ | Pro ยณ |
| Group aggregation / batching | โ (per-group, live) | โ | โ |
| End-to-end payload encryption | โ | โ | โ |
| Lifecycle events / webhooks | โ | โ | โ |
| Task progress reporting | โ | โ | โ |
| Web operations UI | Embedded, read and write | asynqmon | riverui |
ยน River commits the job inside your database transaction (InsertTx), so the job and your data commit atomically. Conveyor's broker is owned by the server, so an enqueue is durable but not part of your application transaction. If you need that atomicity, use the outbox pattern or stay on River. It is the main reason to pick River; see migrating from River.
ยฒ asynq rate limiting is the RateLimitError pattern (you supply the limiter), not a built-in server-side limiter.
ยณ Workflow DAGs are a commercial River Pro feature, not part of the OSS core.
The table reflects each project's open-source core at the time of writing; all three are actively developed, so check upstream for changes (corrections welcome via a PR). For durable, long-running business workflows (sagas, multi-day orchestrations), a workflow engine such as Temporal or Cadence is a different and complementary category: Conveyor is a task queue, not a workflow engine.
For the API-level mapping when moving an existing codebase, see migrating from asynq and migrating from River.