Skip to main content
A standalone engine has no control-plane identity or management stream. Kubernetes owns process lifecycle, while a ConfigMap owns non-secret engine configuration and a Secret supplies connector credentials.
Standalone engines cannot be administered with ventstreamctl. The same public image runs managed when given a deployment agent key — to gain CLI lifecycle and managed-configuration operations, install a managed engine with a key instead of a local ConfigMap.

Standalone CDC

The following Postgres example is a current baseline StatefulSet. Adapt the source section using the relevant connector guide for Neo4j, MongoDB, MySQL, or Kafka. Create the workload namespace once:

Create connector secrets

Use External Secrets, Secrets Store CSI, SOPS, or another approved secret workflow in production. The resulting Secret must expose the environment variables referenced by ventstream.yaml:
Do not commit the populated Secret.

Create canonical configuration

The specs.joins section is optional. Without it the engine runs flat CDC: every source stamps deterministic document ids ({table}:["pk"]), so updates, deletes, and primary-key changes are exact in the sink with no joins spec. Add a joins spec only when you want composed parent+children documents, as this example does. The example uses Postgres SQL denormalization mode; add related tables and the required source indexes before production use, or use memory when you intentionally want the persisted in-process join engine instead.

Run the engine

The published engine image runs as numeric UID/GID 10001; the pod-level fsGroup makes a newly provisioned PVC writable without a root init container. If you replace the runtime stage or user in a custom image, change all three IDs to that image’s fixed non-root UID/GID. Apply the namespace, Secret, ConfigMap, Service, and StatefulSet through your normal deployment repository, then verify:
After a ConfigMap change, trigger a controlled restart. The process resumes from the source cursor and PVC state:

Standalone realtime gateways

The published ventstream-gateway chart runs the horizontally scalable ws, graphql, or combined roles without VentStream Cloud:
The same chart also ships in the engine repository at infra/helm/ventstream-gateway for local installs. This chart currently configures NATS. JetStream (--set ws.jetstream.enabled=true, the chart default) is required for GraphQL subscriptions and resumable native WebSocket delivery; the stream name is ws.jetstream.stream (default ventstream). The engine also supports Redis Streams through canonical configuration when you deploy it without this chart. Use a Service or ingress appropriate for long-lived WebSocket connections, and validate client authorization before exposing either listener outside a trusted network.