ZenZip logozenzip

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 rich ctx — 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 → durable waitForEvent pause 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 LOCKED claims; LISTEN/NOTIFY cross-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