Everything z4j ships, in one place.
Every capability below lands on day one. No hidden tiers. No enterprise-only gating. Security, observability, actions, and team collaboration, all in the open-source release.
Observability
Tasks, workers, queues, schedules. Real-time + historical. Optional Sentry export.
Actions
Retry, cancel, bulk-retry, purge, requeue DLQ. Dynamic scheduler.
Automation
Rule engine with governed actions and guardrails, failure fingerprinting, scheduler reliability.
Security
RBAC, audit log, redaction, HMAC wire protocol.
Collaboration
Multi-user projects, invitations, password reset.
Alerts
Seven providers, per-trigger subscriptions, per-subscription cooldown and mute.
Run anywhere
Pip + SQLite. Docker AMD64. Docker ARM64. Native, not emulated.
Architecture
One shared core, one adapter per layer, one wire protocol.
All capabilities
Feature catalog
Click any card for the full list of what ships with it.
Observability
Tasks, workers, queues, schedules. Real-time + historical. Optional Sentry export.
Historical trends
Success rate, failure rate, throughput over time.
Learn moreVisual task DAG
See your canvas: chains, groups, chords.
Learn moreReal-time dashboard
Live task, command and agent updates.
Learn moreLive Activity Feed
Cross-project timeline of the audit log. Polls every 5 seconds.
Learn moreGrafana templates
Five drop-in Grafana dashboards keyed to z4j's metric names.
Learn moreOptional Sentry integration
Ship brain crashes to Sentry with credentials redacted in-process.
Learn moreOptional OpenTelemetry export
OTLP traces to Honeycomb, Tempo, Jaeger, or any OTel collector.
Learn moreActions
Retry, cancel, bulk-retry, purge, requeue DLQ. Dynamic scheduler.
Capability-aware action surface
One protocol. Honest engine-specific controls.
Learn moreDurable bulk retry
Retry a thousand failures once, and only once.
Learn moreStuck-task reconciliation
Tasks started forever. Fixed, automatically.
Learn moreSafe worker restart
Capability-aware restart, zero shell execution.
Learn moreDynamic scheduler
Edit schedules from the dashboard. Drives every engine.
Learn moreAutomation
Rule engine with governed actions and guardrails, failure fingerprinting, scheduler reliability.
Security
RBAC, audit log, redaction, HMAC wire protocol.
MFA with TOTP, recovery codes, and trusted devices
RFC 6238 TOTP, single-use recovery codes, per-device 30-day trust cookie. WebAuthn deferred; no SMS or email second factors.
Learn moreRBAC built-in
Four roles. Project routes gated. UI mirrors server.
Learn moreSecure-by-default redaction
Built-in and configurable patterns scrub recognized secrets from task arguments before transport.
Learn moreHMAC-chained audit log
Privileged actions, signed and chained.
Learn moreAudit webhook forwarding
Mirror new audit rows to your SIEM pipeline. HMAC-signed.
Learn moreDefense-in-depth rate limits
Local defense in depth for public endpoints.
Learn moreCollaboration
Multi-user projects, invitations, password reset.
Alerts
Seven providers, per-trigger subscriptions, per-subscription cooldown and mute.
Run anywhere
Pip + SQLite. Docker AMD64. Docker ARM64. Native, not emulated.
Pip + SQLite
pip install z4j, then z4j serve. Zero containers, zero infra.
Learn moreDocker on x86 / AMD64
Standard cloud VMs. Native, not emulated.
Learn moreDocker on ARM64
Apple Silicon. Raspberry Pi. AWS Graviton. Native, not emulated.
Learn moreRolling upgrades
Upgrade the brain first. Upgrade the agents when you are ready.
Learn moreAgent durability
The agent buffers locally and never guesses about someone else's data.
Learn moreArchitecture
One shared core, one adapter per layer, one wire protocol.
How it works
The control-plane architecture
z4j separates z4j (central server + dashboard) from agents (thin pip packages that run in your app). Agents push events over an outbound WebSocket. z4j dispatches commands back over the same channel.
Package map
What ships, where it lives, under which license
Each piece is published and versioned as an independent pip package, with its own repository under the z4j org. Agents are Apache-2.0, z4j is AGPL-3.0-or-later, everything else is documented below.
| Package | Role | Runs in | License |
|---|---|---|---|
| z4j-core | Framework-free, engine-free domain core Protocol definitions, domain models, redaction engine, HMAC envelope, serialization. Knows nothing about Django, Celery, or Redis. | Inside every agent and the brain | Apache 2.0 |
| z4j-bare | Framework-free agent bootstrapper Connects to z4j, buffers events to local SQLite, manages lifecycle. Use directly when you have no web framework. | Inside your app process | Apache 2.0 |
| z4j-<framework> | Framework adapter (django, flask, fastapi) Reads your framework's settings, auto-registers adapters on app startup, hooks into the framework's lifecycle. | Inside your app process | Apache 2.0 |
| z4j-<engine> | Engine adapter (celery, rq, dramatiq, huey, arq, taskiq) Captures task events from the engine's signals, middleware, or hooks. Executes the commands it advertises, such as retry, cancel or purge, against the engine. | Inside your app process | Apache 2.0 |
| z4j-<scheduler> | Scheduler adapter (celery-beat, apscheduler, ...) Surfaces periodic tasks on the Schedules page. Handles schedule CRUD where the adapter supports managed writes. | Inside your app process | Apache 2.0 |
| z4j | FastAPI backend + React dashboard Stores events in Postgres or SQLite, serves the dashboard, authenticates users, dispatches commands back to agents. One image, many agents. | Standalone container or pip install | AGPL-3.0-or-later |
z4j-core Apache 2.0 Protocol definitions, domain models, redaction engine, HMAC envelope, serialization. Knows nothing about Django, Celery, or Redis.
z4j-bare Apache 2.0 Connects to z4j, buffers events to local SQLite, manages lifecycle. Use directly when you have no web framework.
z4j-<framework> Apache 2.0 Reads your framework's settings, auto-registers adapters on app startup, hooks into the framework's lifecycle.
z4j-<engine> Apache 2.0 Captures task events from the engine's signals, middleware, or hooks. Executes the commands it advertises, such as retry, cancel or purge, against the engine.
z4j-<scheduler> Apache 2.0 Surfaces periodic tasks on the Schedules page. Handles schedule CRUD where the adapter supports managed writes.
z4j AGPL-3.0-or-later Stores events in Postgres or SQLite, serves the dashboard, authenticates users, dispatches commands back to agents. One image, many agents.
Data flow
How an event travels from your app to the dashboard
- 1
Your task runs
Celery or RQ or any engine dispatches a task. The engine adapter (z4j-celery, z4j-rq, ...) hooks into the engine's signal, middleware, or job lifecycle.
- 2
Redaction at capture
Before the event leaves your process, the z4j-core redaction engine applies built-in and operator-supplied key and value patterns to the task data the adapter captured. Add application-specific patterns for secrets or PII the built-ins do not recognize, and per-task overrides on Celery.
- 3
Buffered to local SQLite
The agent (z4j-bare) appends the event to a local SQLite buffer. If z4j is unreachable, events queue here within the configured limits and flush on reconnect. Your app keeps running regardless.
- 4
HMAC-signed over WebSocket
The agent batches events and sends them through a bearer-authenticated, HMAC-signed WebSocket. The HMAC detects tampering, and a replay guard (nonce + monotonic seq + timestamp window) rejects replayed or stale frames.
- 5
Brain persists + broadcasts
z4j applies a second-layer redaction pass, writes the event to Postgres or SQLite, appends to the audit chain if it was a command, then tells the dashboards watching that project that something changed, via internal pub/sub.
- 6
Dashboard updates in real time
Browsers get the change notice over their own WebSocket and refetch the fresh state over REST. End-to-end latency depends on agent buffering, network distance, database load, and the deployment's proxy path.
Ready to try it?
Follow the quickstart for a local install. Every deployment tier runs the same software; replicas, partitioned history and full-text search need PostgreSQL.