Roadmap
What's available in ZenZip today, what's actively in progress, and what's coming next.
Available today#
The core engine and all primitives are feature-complete and covered by 230+ tests, including SIGKILL crash-injection and multi-node Postgres chaos suites. What remains is launch packaging and a few in-progress features listed below.
Durable queues & scheduler
shipped- At-least-once delivery with leases, exponential backoff + jitter, and a dead-letter queue
- Per-key concurrency limits, round-robin fairness, debounce, throttle, and token-bucket rate limits
- Batch consumers, priorities, delayed jobs, backpressure admission control
- Persisted cron + intervals: IANA timezones, overlap policies (skip / queue / allow), missed-tick catchup
- Graceful drain on shutdown; SIGINT/SIGTERM handlers built in
- Pause / resume, bulk purge, dead-letter requeue — full queue control plane
Durable workflow engine
shipped- Step memoization model — no Temporal-style determinism rules, no replay constraints
- All step primitives:
step.run,step.sleep,step.waitForEvent,step.invoke,step.all - Per-step timeouts, independent retry budgets, exhaustion with a precise error
- Idempotency keys (race-safe), run cancellation with descendant propagation
- Content-hash version pinning — in-flight runs finish on old logic while new runs use new code
- Realtime run subscription: async-iterable stream of status + step events, pipe to SSE or WebSocket
- Large-payload offloading: step results over a threshold go to a blob store; replay rehydrates transparently
Events & state machines
shipped- Atomic event outbox: one transaction persists the event, wakes matching waiters, and creates triggered runs
- Wildcard topic patterns (
user.*,billing.**), ephemeral subscribers with unsubscribe - Durable workflow triggers (
on: "event.name") with match predicates - Persisted state machines: transitions, history, and triggered runs commit atomically
HTTP & Express DX
shipped- Express-compatible:
app.use()middleware (global / path-scoped / 4-arg error),Router()mounting - Dual handler signature: Express
(req, res, next)or richctx— chosen by arity - Built-in middleware:
json(),cors(),logger(),static(),auth(),validate(),secureHeaders(),rateLimit() - Adapters:
toNodeHandler()for Express / Connect / Fastify,toFetchHandler()for Next.js / Hono / Bun / Deno / edge - Radix-tree router with webhook → workflow sugar
- Dedicated Fastify plugin, Hono middleware, and Nest.js module wrappers (in progress)
Live dashboard
shipped- SSE live updates with polling fallback — run timelines, step graphs, queue health
- Dead-letter queue inspection and one-click requeue
- Schedule browser, event feed, engine metrics
- Operator vs read-only RBAC tokens; optional Bearer auth
- Full React SPA refactor with dedicated agent session browser (in progress)
AI agents & networks
shipped- Agents compile to durable workflows — every LLM call and tool execution is a journaled step
- Tool failures retry without re-calling the LLM; session memory persisted across runs
- Human-in-the-loop:
requiresApproval→ durablewaitForEventpause with approve / deny API - Providers: Anthropic, OpenAI-compatible, Google Gemini, AWS Bedrock (SigV4), and a scripted mock
- Multi-agent handoff (
handoffTool) and networks (app.network()) with durable routing - Tiered memory: semantic recall (embeddings + vector store) and working-memory compression
- Built-in evals: rule-based, statistical, and model-graded (
llmJudge) — gate deploys on prompt quality - MCP consume: connect to any MCP server as durable agent tools
- MCP author: expose your workflows and agents as an MCP server for other agents to call
- Per-model cost accounting; circuit breakers + bulkheads on model calls
Postgres & multi-node
shipped- Same API as embedded — one config line switches from SQLite to Postgres
FOR UPDATE SKIP LOCKEDclaims;LISTEN/NOTIFYcross-node wakeups; advisory-lock scheduler election- Lease-based dead-worker recovery — validated with a 3-node kill-a-node chaos test
- Priority-ordered dequeue index and event outbox range partitioning for large-scale deployments
- Clock-skew-safe leases: expiry uses the database server clock, not per-node wall clocks
Production hardening
shipped- Payload encryption at rest: opt-in AES-256-GCM on all payload columns — transparent to enable
- Retention GC: bounded store growth; Postgres event outbox GC drops whole partitions
- Health probes:
/healthz(liveness, zero I/O) and/readyz(store-checked readiness) - Fencing tokens against zombie workers; SSRF allowlists on user-controlled fetches
- Graceful HTTP drain, backpressure admission control, idempotency helpers
- Secrets resolution (
env:/file:), deep secret redaction, boot-time config validation - Audit log hook for privileged actions; DLQ growth + stuck-run alerting
- Multi-tenancy namespacing; GDPR subject-tagged runs and
purgeSubject()erasure - Pino / Winston transports and Sentry error reporter
- OTLP span and metric export (in progress)
- SLSA-signed npm releases with build provenance (needs a tagged release to validate)
- Musl / Alpine prebuilds for Docker via zig cross-compile (needs a release run to validate)
In progress#
- OTLP telemetry export — span and metric wire export; schedule-to-start latency, trace-context propagation, GenAI semantic conventions
- Dashboard React SPA refactor — dedicated agent session browser, dollar cost display, richer run graph
- Framework-specific plugins — dedicated Fastify plugin, Hono middleware, and Nest.js module wrappers
- Signed releases — SLSA build provenance via OIDC, CycloneDX SBOM, Sigstore signing
- Alpine / musl prebuilds — zig cross-compile for Docker Alpine images without a build step
Coming soon#
- npm prebuilds for all platforms — today ZenZip requires building from source (Rust + Node). Prebuilt binaries for macOS, Linux x64/arm64, Windows, and musl ship with the public alpha.
- Modular package split — import only the primitives you need; tree-shakeable bundles.
- Realtime / WebSocket layer — first-class WebSocket support built on the existing run subscription API.
- SQLite → Postgres migration tool — lift an existing embedded deployment onto the multi-node backend without draining first.
- Postgres time/status partitioning — further scale improvements for high-volume deployments.
- eslint-plugin-zenzip — static analysis for side effects outside
step.run, per-step retry overrides.
Post-1.0 backlog#
- Visual workflow authoring — the step-graph dashboard view ships first; a drag-and-drop editor comes later
- Python SDK on the same Rust core
- Redis / NATS event backends; managed vector memory for agents
- Hosted cloud — the eventual business model; OSS-first until then