One Schedules page. Every scheduler.
z4j ships a dedicated scheduler adapter for every Python task engine. Periodic tasks from celery-beat, rq-scheduler, APScheduler, Huey, arq cron, and taskiq all surface in one consistent UI. Plus z4j-scheduler, an engine-agnostic dynamic scheduler for operators who want a single service across multiple engines.
Surface your existing scheduler in the z4j dashboard
Each engine has one or more native schedulers. z4j ships an adapter for each so you can manage existing schedules from the same UI as everything else - no migration required.
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
z4j-scheduler
A separate companion process that fires schedules against any of the six engines. Schedules live in z4j-brain's database; edit from the dashboard, declarative config, or REST without restarting any daemon. Useful when you have multiple engines in one shop, or want a single audit-logged surface for schedule edits across the org.
z4j-scheduler
pip install z4j-schedulerEngine-agnostic dispatch (Celery, RQ, Dramatiq, Huey, arq, taskiq). Live edit from dashboard / declarative / REST. Importer + exporter for every native scheduler so you can migrate in or out without lock-in. HA via Postgres advisory-lock leader. Tamper-evident HMAC-chained audit log.
See full comparisonWhich 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 | Celery Beat z4j-celerybeat | List schedules, Create schedule, Update schedule, Delete schedule, Enable / disable, Trigger-now |
| RQ | rq-scheduler z4j-rqscheduler | List schedules, Enable / 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, Delete (when source supports it) |
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, ~200 LOC.