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 the full list of what ships with it.

Pillar 08 of 08

Architecture

One shared core, one adapter per layer, one wire protocol.

01 capability

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 · use it directly without a framework
z4j-core
Protocols + domain models + redaction · the map
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 audit log

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 the commands it advertises, such as retry, cancel or 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 adapter supports managed writes.

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 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. 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. 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. 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. 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.