Skip to main content

Why z4j exists.

Flower is a task viewer. There was no z4j for Python task queues, so we built one.

Every Python shop with non-trivial async work hits the same wall. Flower shows your Celery tasks but can't retry them. It can't do bulk actions. It can't manage schedules. It has no audit log, no RBAC, no persistent history, and it only covers Celery.

Meanwhile the ecosystem diversified. RQ, Dramatiq, Huey, arq, taskiq: every one of them has a real user base and zero monitoring/control story beyond the package's own minimal CLI.

z4j is a control plane, not a dashboard. Observation is the easy part. The hard part is a consistent action surface (retry, cancel, bulk-action, purge, restart), RBAC, a signed and chained record of who did what, and a secrets story that doesn't leak task args into screenshots. That's what z4j does.

what z4j is not

Honest non-goals

license model

Split licensing, explained

The brain (server + dashboard), shipped as the z4j umbrella distribution, is AGPL-3.0-or-later. That's the same license Grafana, MinIO, Mastodon, and Bitwarden use. It's OSI-approved open source, and its network-copyleft clause closes the "SaaS loophole" that plain GPL has.

Every agent package (z4j-core, z4j-bare, z4j-celery, z4j-rq, z4j-dramatiq, z4j-huey, z4j-arq, z4j-taskiq, z4j-django, z4j-flask, z4j-fastapi, and every scheduler adapter) is Apache-2.0. You can import these into any proprietary application, no license questions.

This split follows the same logic Grafana uses: the value-bearing service stays under strong copyleft; the SDK and agent layer stays permissive so it can be adopted without friction.

Organizations whose policies disallow AGPL can request a commercial license for z4j. See Pricing.

contributing

How to contribute

z4j is open source on github.com/z4jdev. We accept contributions via pull request. DCO sign-off (git commit -s) is required. No CLA.

The highest-leverage contribution is a new engine adapter. Each adapter is roughly 800 to 3,000 lines depending on how much of the engine's control surface it can safely expose, and it touches no existing code. See the wire protocol reference on z4j.dev for the Protocol surface, and CONTRIBUTING.md in the repository for the contribution process.