Skip to main content
Run the engine as a standalone process on your Mac — no Docker, no control plane — against Homebrew-installed services. This is the fastest native path to see CDC or the real-time gateways work.
This guide is specifically for macOS and Homebrew. On Linux or Windows, use the Docker Quickstart, or adapt the same environment variables to your local services.

Install or build the engine

Install the release binary without a Rust toolchain:
See Install the engine binary for specific versions, manual downloads, checksums, and build-provenance verification. To build from source instead, install Rust via rustup (the repo pins the toolchain via rust-toolchain.toml), then build the single binary:
The commands below use ventstream. When building from source, replace it with ./target/release/ventstream. A standalone engine needs no control plane. Lifecycle is restart-based: stop the process to pause it, then start it again to resume from retained state. Pick a mode:

Mode A — Postgres CDC → OpenSearch

Stream a Postgres database into denormalized OpenSearch documents. Uses the demo shop schema (orders + customers + line items) and the orders projection spec. 1. Postgres (logical replication needs wal_level=logical + a restart):
2. OpenSearch (disable the security plugin for plaintext local http):
3. Run the engine (recommended defaults — snapshot bootstrap, per-relation index, local state dir; the engine creates the replication slot):
(Local Postgres uses trust auth, so no VS_PG_PASSWORD is needed.) 4. Watch it work — the snapshot lands, then live changes flow in ~a second:
See the Postgres source guide for the full projection model and the testing guide for more recipes.

Mode B — Real-time subscriptions (WebSocket + Apollo)

Run the real-time gateways (no source DB, no sink) and watch typed GraphQL subscriptions update live. This path needs only NATS. 1. NATS with JetStream (in its own terminal — -js is required for the resumable per-connection mode the graphql role consumes):
2. Run the gateways (recommended defaults — listeners on 4040/4041, the ventstream stream, GraphiQL on):
3. Subscribe + publish. Open http://localhost:4041/graphiql and run:
Then publish an event with the NATS CLI (the subject ends with the orderId; id must be a valid ULID):
GraphiQL updates live. The typed subscription exposes seq (the resume cursor) and the playground tracks it, so reloading and reconnecting replays what you missed. For the Apollo Client wiring (graphql-transport-ws link + resume_from_seq), see Real-time subscriptions and the real-time demo.

Clean up

Stop the engine (and nats-server) with Ctrl-C first, then remove whatever you created. Mode A — Postgres + OpenSearch:
Mode B — NATS:
Optional — reclaim disk / remove tools: