deplaneDocs Dashboard

Databases

Managed Postgres 17 next to your apps, backed up continuously, with point-in-time restore.

Create and attach

In the dashboard, open Databases, name the database and pick a size, or run deplane db create main. It is ready in about a minute. Then attach it to an app (deplane db attach main --app shop): the app gets a DATABASE_URL variable and rolls out a new release with it, without downtime.

postgres://app:…@pg--main:5432/app

For a cache or a job queue, see Redis.

Use it like any Postgres URL, for example new Pool({ connectionString: process.env.DATABASE_URL }) in Node or psycopg.connect(os.environ["DATABASE_URL"]) in Python. The Notes + Postgres template does all of this in one click.

How it runs

Limits

Up to 5 databases per team. A database counts against your plan as one instance of its size (small: ½ CPU and 512 MB; medium: 1 CPU and 1 GB; large: 2 CPU and 2 GB). An app uses one database at a time as DATABASE_URL. Backups are kept for your plan's backup window: 7 days on the Beta plan.

Backups and restore

Every database is backed up continuously: Deplane keeps its change log as it happens and takes a full copy every night, encrypted with a key of that database alone. You can restore it to any second in the last 7 days (your plan's backup window), up to about a minute ago.

Where the backups are: on Deplane's control server, a different server from the database's, and a second copy on a separate backup server, pulled every 15 minutes. The backup server takes the copies itself: no other Deplane server holds a key that can change or delete them. Both are in the same region as your database (fra, Germany), still encrypted per database. If you need an export you hold yourself, run pg_dump from a worker or cron job.

The backup status shows on the database:

Times in the dashboard and in error messages are in UTC.

Restore

A restore never changes the original: it creates a new database at the moment you pick, which you check and then switch your apps to.

Restoring, switching and deleting a database each need their own fresh confirmation with your passkey (from the last 5 minutes, used up by the action): the dashboard asks for a tap, and the CLI shows a link and a code to approve in your browser. A stolen CLI login alone cannot do them, and CI tokens and AI tools cannot do them at all.

The restored database counts toward your plan like any other database, and needs a free place in the 5-database limit. When many restores run on the platform at once, a new one waits a few minutes for its turn to download the full copy. If every database disk on the platform is in use, creating or restoring a database is refused at once with database_capacity; try again later.

Deleted databases

A deleted database keeps its backups for your plan's backup window. Restore it from Recently deleted on the Databases page, or with deplane db restore main --deleted --at latest. It comes back as a new database (--to NAME, or main-restored-HHMM). After the window, the backups and their key are deleted for good.

Preview databases

Pull request previews can get their own empty databases: turn on "Give each preview its own empty database" in the app's GitHub settings (see GitHub). They are not on the Databases page, do not count toward your plan or the 5 databases a team can have, are capped at 3 per team, are never backed up, and are deleted for good with their preview.

This page is also available as Markdown. AI agents can start at /llms.txt.