Kathikon (καθήκον — duty, obligation) is a BEAM-native durable job queue for Elixir. Jobs are persisted in Mnesia, executed by OTP supervisors and dispatchers, and tracked through an explicit state machine.
Current release: v0.1.0 — Phase 1 (durable job queue)
Guides
Start here if you are new to the library:
| Guide | What you will learn |
|---|---|
| Quick start | Install, configure, define a worker, enqueue your first job |
| Workers | The Kathikon.Worker behaviour, return values, errors |
| Queues & concurrency | Multiple queues, dispatcher concurrency, isolation |
| Scheduling | schedule_in, schedule_at, scheduler promotion |
| Retries & errors | Backoff, max_attempts, discard, error recording |
| Cancellation | When jobs can be cancelled, API usage |
| Telemetry | Events, measurements, metadata, custom handlers |
| Configuration | All config :kathikon keys and environments |
| Storage & embedding | Mnesia setup, Livebook, tests, backends |
Reference
| Document | Contents |
|---|---|
| Module reference | Every module and public function with examples |
| Interactive demo | Livebook walkthrough of Phase 1 features |
Architecture at a glance
Kathikon.Supervisor
├── Registry
├── Kathikon.Queue (DynamicSupervisor → one Dispatcher per queue)
├── Kathikon.Scheduler (promotes :scheduled → :available)
└── Kathikon.Pruner (deletes terminal jobs after retention)Public API: Kathikon.insert/3, Kathikon.cancel/1, Kathikon.fetch/1, Kathikon.all/0, Kathikon.start_queue/1.