Encrypted before it leaves our worker

Every backup is compressed and encrypted with age as it streams, to backupd’s key for your workspace and to every key you add. Storage only ever holds ciphertext.

Encryption

Every backup is compressed and encrypted with age before it’s stored. Add your own key to decrypt backups yourself.

Add key

Your keys

New backups are encrypted to every key here. Revoking a key only affects future backups.

  • Laptopage1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg3f9a1c0be47d2a85Added 2 Oct, 14:20Revoke
  • Ops team vaultage1zvkyg2lqzraa2lnjvqej32nkuu0ues2s82hzrye869xeexvn73equnujwjb81e07d95c42f3a0Added 2 Oct, 14:31Revoke

backupd’s key

backupd keeps its own key for this workspace so it can run restores and restore tests. Its secret half is encrypted at rest.

Service public keyage1qyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqs3290gq
age
age v1, X25519 keys, opens with stock age.
AES-256-GCM
Credentials and bucket keys at rest.
TLS only
Connections to your database.
EU-hosted
App, workers and sandboxes run in Frankfurt.

Who can open a backup

Each file is encrypted to every key on your workspace at the time it is made: backupd’s own key, so we can run restore tests and restores for you, and each key you add.

Add your own key in Settings → Encryption, made in your browser or pasted as an age1… public key. Revoking a key only affects future backups; files already made stay readable by it.

There is no mode where only you can open a backup. If you need that, say so: it is on our list.

Keys we hold

backupd’s key is unique to your workspace. Its secret half is wrapped with AES-256-GCM under a workspace key, and is only used by our workers to restore and test your backups.

Database credentials and bucket keys are stored encrypted with AES-256-GCM, and handed to the dump tools through environment variables or private option files, never on a command line.

Reaching your database

  • Every connection uses TLS. Strings that turn TLS off are refused.
  • We resolve your host once and pin the address, and refuse private, loopback and link-local ranges, so a connection string can’t be pointed at our own network.
  • Read-only users are enough to back up. Uptime checks only open a connection; they never log in.

app-prod

Checked every 5 minutes from outside your network.

Operational
Uptime
99.97%
Last 90 days
Response
38 ms
Connect time
Last check
2 min ago
Next in 3 min

Uptime

One bar per day, last 90 days

Up every day but one in the last 90 days

90 days ago1 outage, 14 minutesToday

Response time

Connect time per hour, last 24 hours

Between 30 and 60 ms all day

Where files live

Backups are kept in backupd Storage, a private bucket only our workers can reach. Download encrypted gives you a link that works for five minutes.

On Pro, copies to your own Amazon S3, Cloudflare R2, Google Cloud Storage, Backblaze B2 or MinIO bucket are made byte for byte. We never decrypt a backup to copy it.

Destinations

Every backup is stored in backupd Storage. Add your own buckets for an extra copy.

Add destination
  • backupd StorageIncluded with every planPrimary
  • Cloudflare R2acme-backups · last copy 12 min agoIn sync
  • Amazon S3acme-dr-us-east-1 · last copy 2 h agoIn sync
  • MinIObackups.office.acme.dev · paused by JordanPaused

Copies stay encrypted with your keys. Amazon S3, Cloudflare R2, Google Cloud Storage, Backblaze B2 and MinIO.

Restore tests in a sandbox

A restore test loads your backup into a throwaway database on a network with no internet access and no route to our app, its database or its keys. PostgreSQL and MySQL backups restore as a throwaway user that owns only that database, so code in a dump can’t act as an administrator. The copy is deleted straight after.

Your team

Sign in with a passkey or a password and two-factor codes. New passwords are checked against known breaches. Members have roles, and every action in the workspace, including denied attempts, goes into an audit log nobody can edit, kept for a year.

When backupd support signs in as a member to help, it lasts at most an hour and the audit log shows “backupd support” for everything done.

Members

3 members in Acme.

Invite

Audit log

Who did what in this workspace, including denied attempts. Entries can’t be edited or removed.

  • Re-ran a restore testMaya Santos · app-prod09:14
  • Downloaded a backupAlex Kim · billingYesterday
  • Connected a databaseJordan Reyes · events2 Oct

The app and the API

  • HTTPS everywhere, with HSTS. Pages can’t be framed by other sites.
  • Session cookies are HTTP-only, secure and same-site, and the API refuses writes that come from other sites.
  • Every workspace action checks that you are a member, and what your role allows.
  • Webhooks, uptime checks and bucket endpoints are refused when they point at private addresses.

Where it runs

The app, its database, the backup workers and the sandboxes run on Oracle Cloud in Frankfurt, Germany. Backups are stored on Backblaze B2 in the region your workspace picks, including EU Central. See GDPR at backupd for sub-processors, retention and your rights.

Report a vulnerability

Found a security problem? Write to [email protected] with the details. We’ll confirm we got it, fix it, and credit you once it’s fixed if you’d like.

Keep a key of your own

Add your key on day one, and every backup after that is yours to open, with or without us.