Typed handlers with priority
Handlers are declared with their payload type, enqueued with a priority and retried on a backoff you configure. The type is checked where the job is written, which is where the mistake gets made.
Background jobs, durable workflows and leader-elected cron as a library you import rather than a service you operate. Workflow steps checkpoint, so a worker that dies mid-run resumes where it stopped instead of starting over. Exhausted retries land in a dead-letter queue you can inspect and replay.
A workflow is a multi-step Go function that checkpoints its progress and resumes after a failure. There is no separate DSL to learn or to debug.
Configurable backoff on every job, and anything that exhausts its retries lands in a queue you can inspect and replay.
Scheduling and work stealing survive a node going away, with heartbeats and registration handled by the library.
Background work that survives the process that started it.
Handlers are declared with their payload type, enqueued with a priority and retried on a backoff you configure. The type is checked where the job is written, which is where the mistake gets made.
A multi-step function that records progress and resumes where it stopped. Because it is ordinary Go, the debugger and the tests you already have still apply.
Jobs that exhaust their retries are captured with their last error, and can be inspected, corrected and replayed on demand.
Per-tenant schedules that can be enabled and disabled at runtime, with one elected leader so a schedule does not fire once per node.
Workers register, heartbeat and steal work from each other, so adding a node adds throughput without a rebalance step.
Development runs in memory and production on Postgres, behind an interface small enough to implement against something else.
Durable units with retries and dead lettering.
Multi-step execution that survives a restart.
Scheduled work coordinated across the cluster.
Leader election so a schedule fires once, not once per node.
Dispatch is durable execution as a library. Background jobs, multi-step workflows, distributed cron and worker coordination, imported into your process rather than run as a separate service.
Storage is pluggable: memory, PostgreSQL via pgx, Grove, SQLite or Redis.
Workers scale with the process they live in, which is the honest cost of the library model. Running the same binary in a worker-only mode gets most of the way there, and it is a workaround rather than a solution. If you need workers to scale entirely independently of your API tier, a separate service is the right answer and Dispatch is a reasonable way to build one.
Shipping something on Dispatch? Nobody is listed here yet. Tell me what you built and you will be the first.
Get listed →