All options are set under config :kathikon, ....

Requires config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase when using :timezone or cron scheduling.

Full example

# config/config.exs
config :elixir, :time_zone_database, Tzdata.TimeZoneDatabase

config :kathikon,
  queues: [
    default: [concurrency: 10],
    emails: [concurrency: 5],
    reports: [concurrency: 2]
  ],
  poll_interval: 200,
  scheduler_interval: 1_000,
  prune_interval: 60_000,
  retention_period: :timer.hours(24 * 7),
  max_attempts: 20,
  timezone: "Etc/UTC",
  mnesia_copies: :auto,
  storage_backend: Kathikon.Storage.Mnesia,
  scheduler: Kathikon.Scheduler.BuiltIn,
  cron_tick: true,
  result: :store

Options reference

KeyDefaultDescription
:queues[default: [concurrency: 10]]Queue names and per-queue options
:poll_interval200Dispatcher poll period (ms)
:scheduler_interval1000Scheduler tick period (ms)
:prune_interval60000Pruner tick period (ms)
:retention_period604800000 (7 days)How long to keep terminal jobs (ms)
:max_attempts20Default retry limit for new jobs
:timezone"Etc/UTC"IANA zone for cron and naive schedule_at
:mnesia_copies:autoMnesia table storage — :ram, :disc, or :auto
:storage_backendKathikon.Storage.MnesiaStorage behaviour implementation
:schedulerKathikon.Scheduler.BuiltInScheduler adapter module
:cron_ticktrueStart Kathikon.Scheduler.BuiltIn.Tick (set false in tests)
:result:storePersist worker return values (:store or :discard)
:quantum_schedulerQuantum scheduler module when using Scheduler.Quantum

Queue options

Each queue entry is a keyword list:

[concurrency: 10]   # max simultaneous Task workers

Access at runtime:

Kathikon.Config.queue_names()      # [:default, :emails, ...]
Kathikon.Config.concurrency(:emails) # 5
Kathikon.Config.queue_config(:emails)

mnesia_copies

ValueBehaviour
:autoram on nonode@nohost and Livebook nodes; disc on other named nodes
:ramIn-memory tables — dev, test, Livebook
:discDurable on disk — production named nodes
# Livebook / local scripts
config :kathikon, mnesia_copies: :ram

Environment-specific overrides

# config/test.exs
import Config

config :kathikon,
  poll_interval: 50,
  scheduler_interval: 50,
  retention_period: 1,
  max_attempts: 3,
  queues: [default: [concurrency: 10], priority: [concurrency: 1]]

Reading config in code

Kathikon.Config.poll_interval()
Kathikon.Config.retention_period()
Kathikon.Config.mnesia_copies()