One Schedules page. Every Python scheduler.
z4j surfaces every Python task scheduler in one dashboard: celery-beat, rq-scheduler, APScheduler, Huey periodic, arq cron, and taskiq. Plus z4j-scheduler, an engine-agnostic dynamic scheduler that drives any of the six engines from one service with live editing and a tamper-evident audit log of edits.
z4j-scheduler
One service that drives Celery, RQ, Dramatiq, Huey, arq, and taskiq. Schedules live in z4j's database; edit live from the dashboard or REST without restarting any daemon. To our knowledge it is the only Python scheduler that combines engine-agnostic dispatch, live editing, HA leader election, and a tamper-evident HMAC-chained audit log of edits in one service.
Engine-agnostic dispatch
One scheduler service, six engines. Run Celery + RQ + Huey side by side and edit them all from the same dashboard.
Live editing, no restart
Create, pause, rename, or delete a schedule from the dashboard or REST API; the next tick (one second later) picks it up. No pod restart, no static config redeploy.
HA leader election
Run multiple instances; only one ticks. Postgres advisory-lock leader, safe across rolling restarts. Takeover waits for the database to notice the old leader is gone, so fires can slip during a handover; the brain detects the misfire and each schedule's catch-up policy decides what happens to the missed slot.
Importer + exporter, no lock-in
Import existing schedules from celery-beat, django-celery-beat, rq-scheduler, APScheduler, or system crontab. Export a reviewable Celery, RQ, APScheduler, or crontab file at any time; the round trip is pinned by tests.
Or keep your existing scheduler. We ship an adapter for each.
If z4j-scheduler is more than you need, the supported Celery beat, RQ Scheduler, APScheduler, Huey, arq, and taskiq integrations surface schedules in the same dashboard. Keep the upstream scheduler running and use only the controls its adapter explicitly supports.
z4j-scheduler
Our own scheduler. Engine-agnostic, highly available, and safe to migrate onto.
pip install z4j-schedulerDetails
Celery Beat
Full CRUD for Celery's canonical scheduler.
pip install z4j-celerybeatDetails
rq-scheduler
RQ's optional scheduler, wired to the dashboard.
pip install z4j-rqschedulerDetails
APScheduler
Engine-agnostic scheduler. Pair with anything.
pip install z4j-apschedulerDetails
Huey @periodic_task
Read-only surface for Huey's decorator schedules.
pip install z4j-hueyperiodicDetails
arq cron_jobs
Read-only surface for arq's WorkerSettings.cron_jobs.
pip install z4j-arqcronDetails
taskiq scheduler
Wraps LabelScheduleSource + custom sources.
pip install z4j-taskiqschedulerDetails
Which scheduler for which engine?
Every engine has a default pairing. You can also pair any engine with APScheduler if you prefer a single scheduling runtime.
| Engine | Default scheduler | Capabilities |
|---|---|---|
| Celery | z4j-scheduler z4j-scheduler | List schedules, Create schedule, Update schedule, Delete schedule, Enable / disable, Trigger-now, Cron, interval, one-shot and solar triggers, Selectable leadership: single instance by default, or global / per-project PostgreSQL election for HA, Explicit catch-up policy after an outage, Static import diff (--verify) showing inserts, updates and deletes before a cutover |
| Celery | Celery Beat z4j-celerybeat | List schedules, Create schedule, Update schedule, Delete schedule, Enable / disable, Trigger-now |
| RQ | rq-scheduler z4j-rqscheduler | List schedules, Disable, Delete, Trigger-now |
| Dramatiq | APScheduler z4j-apscheduler | List, Read, Enable / disable, Delete, Trigger-now |
| Huey | Huey @periodic_task z4j-hueyperiodic | List, Read |
| arq | arq cron_jobs z4j-arqcron | List, Read |
| taskiq | taskiq scheduler z4j-taskiqscheduler | List, Read |
Add a scheduler to your app
Install the scheduler package alongside your engine adapter. The agent auto-discovers periodic tasks on boot and keeps the dashboard in sync.
# Celery + celery-beat
pip install z4j-celery z4j-celerybeat
# RQ + rq-scheduler
pip install z4j-rq z4j-rqscheduler
# Dramatiq + APScheduler (engine-agnostic scheduler)
pip install z4j-dramatiq z4j-apscheduler
# Huey with @periodic_task decorators
pip install z4j-huey z4j-hueyperiodic
# arq with WorkerSettings.cron_jobs
pip install z4j-arq z4j-arqcron
# taskiq schedule sources
pip install z4j-taskiq z4j-taskiqscheduler Need a scheduler for a custom stack?
APScheduler works with any engine. Or implement the SchedulerAdapter Protocol: six methods, and roughly 200 lines for a read-only surface.