Skip to main content

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.

All capabilities

Feature catalog

Click any card for a deeper look with screenshots and config notes.

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.

Your application Apache 2.0
Django / Flask / FastAPI
z4j-django · z4j-flask · z4j-fastapi
Engine
z4j-celery, ...
Scheduler
z4j-celerybeat, ...
z4j-bare (agent runtime)
WebSocket + local SQLite buffer
z4j-core
Protocols + domain models + redaction
Celery / RQ / Dramatiq / Huey / arq / taskiq run alongside, unchanged
broker: Redis / RabbitMQ / SQS (their own)
events
commands
HMAC-signed WebSocket
z4j (control plane) AGPL-3.0-or-later
FastAPI backend
REST API + WebSocket gateway
React dashboard
React with TanStack Router, bundled in the image
Background workers
Reconciliation, retention, health
PostgreSQL 17+ (or SQLite in default mode)
Events, tasks, schedules, audit log, users
HMAC-chained, tamper-evident
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.

z4j-core Apache 2.0
Framework-free, engine-free domain core

Protocol definitions, domain models, redaction engine, HMAC envelope, serialization. Knows nothing about Django, Celery, or Redis.

Runs in: Inside every agent and the brain
z4j-bare Apache 2.0
Framework-free agent bootstrapper

Connects to z4j, buffers events to local SQLite, manages lifecycle. Use directly when you have no web framework.

Runs in: Inside your app process
z4j-<framework> Apache 2.0
Framework adapter (django, flask, fastapi)

Reads your framework's settings, auto-registers adapters on app startup, hooks into the framework's lifecycle.

Runs in: Inside your app process
z4j-<engine> Apache 2.0
Engine adapter (celery, rq, dramatiq, huey, arq, taskiq)

Captures task events from the engine's signals, middleware, or hooks. Executes commands (retry, cancel, purge) against the engine.

Runs in: Inside your app process
z4j-<scheduler> Apache 2.0
Scheduler adapter (celery-beat, apscheduler, ...)

Surfaces periodic tasks on the Schedules page. Handles schedule CRUD where the scheduler supports runtime mutation.

Runs in: Inside your app process
z4j AGPL-3.0-or-later
FastAPI backend + React dashboard

Stores events in Postgres or SQLite, serves the dashboard, authenticates users, dispatches commands back to agents. One image, many agents.

Runs in: Standalone container or pip install
Data flow

How an event travels from your app to the dashboard

  1. 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. 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 args, kwargs, return values, and exceptions. Add application-specific patterns and per-task overrides for secrets or PII the built-ins do not recognize.

  3. 3

    Buffered to local SQLite

    The agent (z4j-bare) appends the event to a local SQLite buffer. If z4j is unreachable, events queue here safely and flush on reconnect. Your app keeps running regardless.

  4. 4

    HMAC-signed over WebSocket

    The agent batches events and sends them through a bearer-authenticated, HMAC-signed WebSocket. Replay guard (nonce + monotonic seq + timestamp window) prevents tampering.

  5. 5

    Brain persists + broadcasts

    z4j writes the event to Postgres or SQLite, applies a second-layer redaction pass, appends to the audit chain if it was a command, then broadcasts the state change to every connected dashboard via internal pub/sub.

  6. 6

    Dashboard updates in real time

    Browsers pick up the update over their own WebSocket. 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. The same features ship in every deployment tier.