Overview
River is a job processing system for Go created in late 2023 by Brandur Leach and Blake Gentry. Jobs are defined as typed Go structs with a worker, stored in PostgreSQL (or SQLite), and enqueued transactionally: a job exists only if its transaction commits, which removes a class of consistency bugs common with external queues.
The open-source library includes multiple queues with per-queue worker limits, retries, periodic jobs, unique jobs and River UI, a web interface for inspecting and managing jobs. It is licensed under the Mozilla Public License 2.0.
River Pro, a private Go module on subscription from $125, adds workflows with per-task dependencies and retries, batching, strictly ordered sequences, global concurrency limits with partitioning, dead-letter queues, durable periodic jobs, encrypted and ephemeral jobs, plus email support for up to 20 developers. Enterprise adds unlimited seats, Slack support and access to a SOC 2 report.
Pricing and plans
| Plan | Price | What you get |
|---|---|---|
| Open Source | Free | Reliable jobs, web UI, multiple queues, periodic and unique jobs; no support |
| Pro | $125 | Workflows, batching, sequences, concurrency limits, DLQ, encrypted jobs; email support; up to 20 developer seats |
| Enterprise | Custom | Unlimited seats, Slack support, SOC 2 report access, invoice/PO |
What it does
- Transactional enqueueing
- Jobs are inserted in your transaction and only become visible after commit.
- Typed jobs
- Job arguments and workers are Go structs with a stable kind string.
- Periodic and unique jobs
- Scheduled recurring jobs and uniqueness constraints in the free version.
- River UI
- Web interface to inspect, retry and manage jobs and workflows.
- Pro workflows
- Break tasks into dependent, individually retryable steps with unlimited executions.
- Pro concurrency limits
- Global concurrency limits with granular partitioning, plus sequences for strict ordering.
Strengths and limitations
Strengths
- Idiomatic, typed Go API
- Uses the database you already run, including SQLite
- Transactional consistency between data and jobs
- Web UI included free
Limitations
- Go only
- Workflows, concurrency limits and dead-letter queues are Pro-only
- Open-source edition comes with no support
- Job load shares your application database
Who it suits
Good for
- Go services on PostgreSQL
- Jobs that must be consistent with database writes
- Teams wanting to avoid Redis
Look elsewhere if
- Non-Go codebases
- Workloads that need free global concurrency limits or DLQs
Alternatives to River
| Tool | From | Free option | Stages |
|---|---|---|---|
| Oban SQL-backed job processing library for Elixir (and Python) | $135/mo | ||
| BullMQ Redis-based job queue library | $139/mo | ||
| DBOS Postgres-backed durable workflow library | $99/mo | ||
| Sidekiq Redis-based background job library for Ruby | $99/mo | ||
| Inngest Durable execution and event-driven workflow platform | $99/mo | Free tier | |
| Faktory Language-agnostic background job server | $299/mo |
Questions
Is River free?
Yes, River is open source under MPL 2.0; River Pro is a paid module.
What database does River need?
PostgreSQL, with SQLite also supported.
Does River have a dashboard?
Yes, River UI is a free web interface for jobs.
What does River Pro add?
Workflows, batching, sequences, concurrency limits, dead-letter queues, durable periodic jobs, encrypted jobs and email support.
Sources read for this page