Configuration
Every default in one place, for jobs, workers, producers, stores, retention, the scheduler, the outbox relay and the fixed limits.
On this page
All configuration goes through AddRunwick(runwick => ...) and the store, outbox and management extensions. Times are as written. Runwick checks every value at startup and refuses a configuration it cannot run safely. It never quietly adjusts a value for you.
Per job
Set per job with an attribute or the fluent builder, or for all jobs with runwick.JobDefaults(...). Later layers win: library default, then JobDefaults, then attribute, then fluent.
With the defaults, the first retry waits between 2.5 and 5 seconds, the second between 5 and 10. See Retries and timeouts.
Worker: WorkerOptions
Set with runwick.AddWorker(w => w.Configure(o => ...)). Most apps never touch these. They are tied together; see Startup validation.
Keep the host's shutdown timeout (HostOptions.ShutdownTimeout, 30 s by default in .NET) above ShutdownBudget. Runwick does not change it for you.
Pools
Producer: ProducerOptions
Set with runwick.Producer(o => ...).
Stores
See PostgreSQL, SQLite and Redis.
Retention
Cleanup runs in worker processes. Its budgets are set with w.Retention(r => ...):
How long records are kept is a stored policy per application, edited through the management API. The defaults:
Cleanup is bounded work, not a promise to keep up with any load. Deleting rows does not erase backups or copies. See Retention.
Scheduler: SchedulerOptions
Set with runwick.AddScheduler(o => ...). The scheduler needs the scheduler capability raised once per application, or startup fails with scheduler_not_active.
Per schedule: misfire policy RunOnce with 60 s grace (up to 24 h); catch-up at most 1,000 jobs per episode and 7 days back. See Schedules.
Outbox relay: OutboxRelayOptions
See Outbox.
Telemetry: RunwickTelemetryOptions
Set with runwick.Telemetry(o => ...).
Management and dashboard
Management needs authentication schemes and a grant mapping, or it does not start. There is no anonymous mode. The dashboard title defaults to Runwick. See Management API and Dashboard.
Fixed limits
These cannot be configured.
Startup validation
When the host starts, Runwick checks the whole configuration and throws RunwickConfigurationException listing every problem at once. Each entry has a code, the setting it is about, and the rule it broke. Timing problems have the code invalid_timing:
The worker timings must satisfy these rules. The defaults pass all of them:
Scale timings together
Setting LeaseDuration to 30 s on its own fails: 31 s of renewal path does not fit in 20 s of usable lease. Raising ControlRequestTimeout to 10 s fails too, because the start margin then needs 23 s. If you change one timing, scale the related ones with it, for example a 120 s lease with a 20 s safety margin and a 30 s renewal interval.
Other startup errors you may see: invalid_pool (for example a pool that subscribes a queue no job or Queue(...) call registers), pool_without_queue, pool_budget_exceeded (pool maximums add up to more than the worker's limit), invalid_policy for store options, and missing_store when no store is configured. Troubleshooting lists the common ones.