Voltro + Render

Run Voltro on Render with managed Postgres — internal vs external connection strings, sslmode, full LISTEN/NOTIFY reactivity, and connection limits per plan.

Render offers managed Postgres, mapping to Voltro's postgres dialect with the full reactive surface — LISTEN/NOTIFY CDC, advisory-lock cluster workflows, read replicas, JSONB. Render runs a plain Postgres instance with no transaction pooler in front, so there's no LISTEN/NOTIFY caveat.

Connect

Render gives you two connection strings: an internal one (only reachable from other Render services in the same region) and an external one (reachable from anywhere). Prefer internal for service-to-database traffic — it skips public egress and is lower latency.

# Internal connection (recommended for Render-hosted services)
DB_DIALECT=postgres
DB_URL=postgresql://[USER]:[PASSWORD]@[HOST]-a/[DB]
# External connection (from outside Render, e.g. local dev / CI)
DB_DIALECT=postgres
DB_URL=postgresql://[USER]:[PASSWORD]@[HOST]-a.[REGION]-postgres.render.com/[DB]?sslmode=require

Enabling CDC

Voltro's change-data-capture is LISTEN/NOTIFY, on by default (CDC=1) — no extension, no flag. Render runs a plain Postgres instance with no transaction pooler in front, so whichever connection string you map to DB_URL (internal or external) is session-mode and reactivity works immediately. If you later add a pgbouncer to scale connections, keep it in session mode or pin the single CDC listener to a direct connection so LISTEN/NOTIFY survives.

Pooling / SSL

  • No pooler by default — Postgres reactivity works directly, no config needed for LISTEN/NOTIFY.
  • SSL: the external URL requires sslmode=require. The internal URL runs over Render's private network and doesn't.
  • Connection limits: each plan caps max_connections (low on the starter tiers). Add a pgbouncer (in session mode) if you outgrow the cap — keep the single CDC listener on a direct connection if you do. (The framework opens one pool per process; cap its size per process with DB_MAX_CONNECTIONS — maps to the postgres max, mysql connectionLimit, and mssql pool.max.)

Verify

[voltro:dev] sql dialect resolved: postgres — CDC: LISTEN/NOTIFY, RETURNING: native
[voltro:dev] read replicas: 0 configured (DB_REPLICA_URLS empty) — all queries → primary
[voltro:dev] workflow engine: cluster-sql, dialect=postgres

Confirm with voltro logs --tail 50.

See also

  • Postgres dialect — LISTEN/NOTIFY internals, workflows, read replicas, JSONB.