Write queries, skip the runbooks

Conjoin Database operates Postgres and SQLite servers for you, including their backups, connection pooling, and read replicas, so that your team can spend its time on the queries. With Conjoin Live, your app can react to every insert, update, and delete as it happens.

What Conjoin operates for your databases

Managed Postgres

Conjoin operates each PostgreSQL database with a standby for automatic failover and a built-in connection pooler. You pick a compute tier for the database and can move it to a larger tier as your workload grows.

Managed SQLite

Conjoin offers SQLite for read-heavy workloads, because SQLite executes each query in-process with no connection setup or handshake. Once you add replicas in other regions, Conjoin routes each read to the nearest replica.

Read replicas

Add a read replica in any supported region on a paid plan, which includes unlimited replicas. A read from a replica in the same region completes in < 1ms, while Conjoin replicates a write to a replica in another region in ~30-150ms.

Conjoin Live

Conjoin Live turns each change in your database into an event that your frontend receives as the change happens. A Live Collection streams one table with no configuration, while a Live View re-executes a server-side query whenever its data changes. With a Change Stream, you choose which changes Conjoin captures and where it delivers them, such as a broadcast channel, a queue, or a search index.

Automated backups and PITR

Conjoin takes a snapshot of every database each day and keeps 7 days of point-in-time recovery by default. You can restore a database to any second inside that window.

Credential management

Rotate the credentials of a database, manage its connection strings, and set which environments can connect to it. Conjoin encrypts every connection with TLS by default.

Connection pooling

Conjoin places a connection pooler in front of each Postgres database so that the pooler can reuse the server connections of that database across concurrent requests. Conjoin raises the pool limit on each higher plan tier, so you need no external pooler.

Auto-failover

When a Postgres primary node fails, Conjoin promotes a standby to primary with zero data loss. Your application reconnects through the same connection string, so you change no code for the failover.

Performance insights

Conjoin lists your slowest queries with their execution times and the number of calls that your application makes to each one. It also recommends indexes with an estimated improvement for each, so that you can choose one and apply it from the Console.

Zero-downtime scaling

Upgrade the compute, memory, or storage of a database with your application connected to it. Conjoin lets active queries finish on the current tier before it moves the database to the new one.

Multi-region deployment

Conjoin replicates each write to your replicas in every region that you choose, over two paths at once. Over the fast path, Conjoin updates a replica in the primary's region in under a millisecond, while over a durable path through storage, it brings every replica up to date within 1-10 seconds whenever the fast path is unavailable.

Auto-pause

With auto-pause on, Conjoin stops the compute of an idle database and starts that compute again when your application sends the next query. You can turn auto-pause on or off for each database.

< 1ms
Same-region reads

In-process query execution

< 1 min
Provisioning time

Ready to query

7 days
Default PITR retention

Configurable per instance

Build faster with solutions designed for real-world needs

Get a connection string and start building features

Conjoin provisions each new database with production settings, TLS on every connection, a connection pooler, and a daily backup schedule. Conjoin then returns a connection string through the Console and the API, so that your application can query the database with it straight away.

Impact

Conjoin provisions the database in under a minute and schedules its daily backups in the same step, so you can skip writing a backup job for it.

Serve reads from a replica near each of your users

Add read replicas in the regions where your users are. Conjoin sends each read to whichever replica is closest, so your application can answer a user on another continent without a round trip to the primary.

Impact

Conjoin picks the replica for every read, so your code contains no region-selection logic. A read from a replica in your application's own region completes in < 1ms, while a round trip to another continent can take 100ms or more.

Absorb traffic spikes with the built-in connection pooler

During a traffic spike, the Conjoin pooler shares the server connections of your Postgres database among many client connections, up to the pool limit of your plan tier.

Impact

Conjoin operates the pooler as part of the database, which means that you have no separate pooler service to deploy or scale.

Restore to any second in the past week

Conjoin takes a daily snapshot of each database and verifies that it can restore from each one. With point-in-time recovery, you can also restore the database to any second between two snapshots through one API call, as far back as the 7-day default retention.

Impact

Conjoin schedules, verifies, and stores every backup, so your team writes no cron job or backup script.

Stream database changes straight to your app

Conjoin Live captures each change from the write-ahead log of the database and delivers it through Relay, the Conjoin service for jobs, queues, and events. Turn on a Live Collection for a table with one API call, or configure a Change Stream to choose what Conjoin captures and how it delivers each change. On the client, the React hooks and the callbacks in the JavaScript SDK manage the subscription for you.

Impact

Conjoin delivers each change to whichever dashboard, collaborative editor, or search index you subscribe to the table, so you write no polling loop, ETL script, or WebSocket server of your own.

Common questions about Conjoin Database

Build your next app on Conjoin

Conjoin will open with a free Build tier, while the pricing page already lists the launch prices for Pro and Business. If you tell us what you're building, we'll talk you through early access.