{"id":49223415,"url":"https://github.com/z4jdev/z4j","last_synced_at":"2026-05-16T01:02:36.642Z","repository":{"id":357686602,"uuid":"1228454287","full_name":"z4jdev/z4j","owner":"z4jdev","description":"z4j - open-source control plane for Python task infrastructure","archived":false,"fork":false,"pushed_at":"2026-05-13T20:43:47.000Z","size":6337,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-05-13T22:34:21.119Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://pypi.org/project/z4j/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/z4jdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-04T03:12:20.000Z","updated_at":"2026-05-13T20:43:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/z4jdev/z4j","commit_stats":null,"previous_names":["z4jdev/z4j"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/z4jdev/z4j","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/z4jdev%2Fz4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/z4jdev%2Fz4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/z4jdev%2Fz4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/z4jdev%2Fz4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/z4jdev","download_url":"https://codeload.github.com/z4jdev/z4j/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/z4jdev%2Fz4j/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33086750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:25:35.270Z","status":"ssl_error","status_checked_at":"2026-05-15T20:25:34.732Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["celery","control-plane","django","meta-package","python","task-queue","z4j"],"created_at":"2026-04-24T05:04:15.223Z","updated_at":"2026-05-16T01:02:36.612Z","avatar_url":"https://github.com/z4jdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# z4j\n\n[![PyPI version](https://img.shields.io/pypi/v/z4j.svg?v=1.4.0)](https://pypi.org/project/z4j/)\n[![Python](https://img.shields.io/pypi/pyversions/z4j.svg?v=1.4.0)](https://pypi.org/project/z4j/)\n[![License](https://img.shields.io/pypi/l/z4j.svg?v=1.4.0)](https://github.com/z4jdev/z4j/blob/main/LICENSE)\n\nThe all-in-one z4j umbrella package. Open-source control plane for\nPython task queues.\n\nOne `pip install z4j` brings z4j (dashboard + API)\ninto your environment. Use extras to pull the agent packages your\nworkers need: framework adapters (Django, Flask, FastAPI), engine\nadapters (Celery, RQ, Dramatiq, Huey, arq, TaskIQ), and their\nschedule companions. Every adapter cross-versions to the same z4j\nrelease line, so the floors stay in sync without manual pinning.\n\n## What is z4j\n\nz4j is one product split into 20 PyPI packages so each piece can be\ninstalled only where it's needed. The umbrella `z4j` is the\noperator-friendly entry point that wires the right combination\ntogether for you.\n\nThe architecture is straightforward:\n\n- **One brain process per environment.** Dashboard, API, audit\n  log. Persistent storage in SQLite or Postgres.\n- **One agent per worker / app process.** A thin pip package that\n  imports inside your Django / Flask / FastAPI app or your Celery /\n  RQ / Dramatiq worker, opens an authenticated WebSocket to the\n  brain, and streams every task / worker / queue / schedule event.\n- **Operator actions flow back the same channel.** Retry, cancel,\n  bulk retry, purge, restart, schedule CRUD, manual trigger.\n\nz4j is AGPL v3 and isolated in its own process. The agent\npackages your application imports are Apache-2.0 each, so your\napplication code is never AGPL-tainted.\n\n## What's in the box\n\n- **Brain** ([`z4j`](https://github.com/z4jdev/z4j)).\n  Server, dashboard, API, RBAC, HMAC-chained audit log,\n  notifications, reconciliation worker.\n- **Engine-agnostic dynamic scheduler**\n  ([`z4j-scheduler`](https://github.com/z4jdev/z4j-scheduler)).\n  Optional companion process for projects that want one canonical\n  scheduler across mixed engines, with live editing from the\n  dashboard, HA leader election, and audited schedule mutations.\n- **Framework adapters.** [`z4j-django`](https://github.com/z4jdev/z4j-django),\n  [`z4j-flask`](https://github.com/z4jdev/z4j-flask),\n  [`z4j-fastapi`](https://github.com/z4jdev/z4j-fastapi), plus the\n  framework-free [`z4j-bare`](https://github.com/z4jdev/z4j-bare)\n  for plain Celery / RQ / Dramatiq workers.\n- **Engine adapters.** [`z4j-celery`](https://github.com/z4jdev/z4j-celery),\n  [`z4j-rq`](https://github.com/z4jdev/z4j-rq),\n  [`z4j-dramatiq`](https://github.com/z4jdev/z4j-dramatiq),\n  [`z4j-huey`](https://github.com/z4jdev/z4j-huey),\n  [`z4j-arq`](https://github.com/z4jdev/z4j-arq),\n  [`z4j-taskiq`](https://github.com/z4jdev/z4j-taskiq).\n- **Scheduler adapters.** [`z4j-celerybeat`](https://github.com/z4jdev/z4j-celerybeat),\n  [`z4j-rqscheduler`](https://github.com/z4jdev/z4j-rqscheduler),\n  [`z4j-apscheduler`](https://github.com/z4jdev/z4j-apscheduler),\n  [`z4j-arqcron`](https://github.com/z4jdev/z4j-arqcron),\n  [`z4j-hueyperiodic`](https://github.com/z4jdev/z4j-hueyperiodic),\n  [`z4j-taskiqscheduler`](https://github.com/z4jdev/z4j-taskiqscheduler).\n\n## Try the live demo (no install)\n\n[**demo.z4j.dev**](https://demo.z4j.dev) is the dashboard SPA\nrunning in your browser against pre-baked fake data. One click on\nthe pre-filled login lands you in a populated control plane with\nfour sample projects: Celery + celery-beat (small healthy starter),\nFastAPI + arq + arq-cron, Django + Celery + django-celery-beat\nwith a current incident scenario (failing schedule, alert firing,\nworker offline), and a mixed-engine z4j-scheduler showcase\ndriving Celery + RQ + Dramatiq workers from one place.\n\nIt is a navigable preview, not a sandbox: every Create / Update /\nDelete button toast-blocks (`This is a demo. Refresh to reset;\ninstall z4j to make changes for real.`), no real backend is\nconnected, refresh resets to a clean state. Useful before you\ncommit to `pip install`.\n\n## Install\n\nThe minimum useful install is z4j plus the framework + engine\nyour stack actually uses. Use the extras instead of pinning each\npackage by hand:\n\n```bash\npip install z4j                          # brain only\npip install 'z4j[django,celery]'         # Django + Celery + celery-beat\npip install 'z4j[fastapi,arq]'           # FastAPI + arq + arq-cron\npip install 'z4j[flask,rq]'              # Flask + RQ + rq-scheduler\npip install 'z4j[django,celery,scheduler]'   # add z4j-scheduler too\n```\n\nEach extra pulls the matching engine adapter and its schedule\ncompanion (e.g. `[celery]` pulls `z4j-celery` + `z4j-celerybeat`).\nThe `[scheduler]` extra adds `z4j-scheduler` for operators who want\nthe engine-agnostic dynamic scheduler.\n\nThen start z4j:\n\n```bash\nz4j serve\n```\n\nFirst boot mints HMAC secrets, runs Alembic migrations, creates a\nSQLite database at `~/.z4j/z4j.db`, and prints a one-time setup URL\nto stderr that creates the first admin user. Set\n`Z4J_DATABASE_URL=postgresql+asyncpg://...` to use Postgres.\n\n## Why use z4j\n\nz4j exists because every Python task queue ships its own\nviewer-grade tool (Flower for Celery, rq-dashboard for RQ, Dramatiq\nhas none) and they all stop at viewer-grade. None of them give you:\n\n- One dashboard across mixed engines (Celery + RQ + arq side by\n  side, common operator workflow).\n- An action surface (retry, cancel, bulk retry, purge, restart)\n  that's safe to put in front of operations and compliance teams.\n- A real audit log that an auditor can walk linearly.\n- Live schedule editing across engines without per-daemon\n  restarts.\n- Self-hosted with no telemetry. z4j phones home only when\n  an admin clicks *Check for updates* in Settings, and that URL is\n  configurable.\n\nz4j is the boring, self-hosted, audit-friendly choice. Built for\nhomelab operators who want one place to look, and for\ncompliance-sensitive teams who need to answer \"who did what when\"\nat quarter-end.\n\n## Documentation\n\nFull docs at [z4j.dev](https://z4j.dev). The install guide at\n[z4j.dev/getting-started/install/](https://z4j.dev/getting-started/install/)\ncovers all three paths (pip-SQLite, Docker-SQLite, Docker-Postgres).\n\n## License\n\nAGPL-3.0-or-later, see [LICENSE](LICENSE). Note: only z4j is\nAGPL. Every agent package your application imports is Apache-2.0,\nso your application code is never AGPL-tainted. Commercial licenses\navailable; contact licensing@z4j.com.\n\n## Links\n\n- Homepage: https://z4j.com\n- Documentation: https://z4j.dev\n- PyPI: https://pypi.org/project/z4j/\n- Issues: https://github.com/z4jdev/z4j/issues\n- Changelog: [CHANGELOG.md](CHANGELOG.md)\n- Security: security@z4j.com (see [SECURITY.md](SECURITY.md))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fz4jdev%2Fz4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fz4jdev%2Fz4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fz4jdev%2Fz4j/lists"}