Open source · Go 1.26+ · Redis 6.2+

Run every scheduled job exactly once, across all your instances

chronos-go is a Redis-backed distributed task queue and scheduler for Go — type-safe tasks, a scheduler that elects a single leader, crash recovery, and Chains & Groups.

Kubernetespod 1standbychronos-gopod 3standbychronos-gopod 2 · leaderchronos-goRedisqueue + lockenqueue ×1worker runs it

chronos-go runs in every pod — only the leader (★) enqueues each trigger once; standby pods take over on failure.

Features

Everything you need for background jobs in Go

A modern alternative to asynq — type-safe, distributed, and reliable.

Type-safe generic API

Define a task type, register a Handler[T] — no interface{} payloads, no manual unmarshal.

Distributed scheduler

Interval & cron jobs. A Redis leader election ensures only one instance enqueues each trigger.

Reliable by default

Exponential backoff + jitter, crash recovery via XAUTOCLAIM, dead-letter with a hook.

Chains & Groups

Sequential chains and parallel groups, with results relayed between steps.

Redis Cluster-safe

Hash-tagged keys keep each queue on one slot, so multi-key Lua stays atomic.

Observability

Metrics, an Inspector API, and a chronos CLI for queues and tasks.

Why chronos-go

chronos-go vs asynq

asynq is in maintenance mode. chronos-go keeps the simple model and fixes the gaps.

asynqchronos-go
Distributed scheduler (run-once)
Generic type-safe tasks
Bounded stream / dead-letter growth
Unique lock renewed during long processing
Actively maintainedmaintenance

How it works

Streams for now, ZSETs for later

Immediate work rides a Redis Stream; delayed, retry and archived tasks live in sorted sets. A forwarder promotes due entries; a recoverer reclaims tasks from crashed workers.

flowchart LR E["Enqueue"] --> S[("Redis Stream")] T["Delayed · retry · scheduled"] --> Z[("ZSETs")] Z -- "forwarder promotes due" --> S S --> W["Workers"] W -. "recoverer reclaims" .-> S

Ready to try chronos-go?

Read the docs and add reliable background jobs to your Go service.

Read the docsGitHubpkg.go.dev