Dumpling

Scheduled Postgres and MySQL backups, into a bucket you own

Backups checked with the restore tool, every run.

Dumpling runs pg_dump or mysqldump on your schedule and streams the result straight into your own S3-compatible bucket: S3, Cloudflare R2, Backblaze B2, Wasabi, Spaces, Hetzner or MinIO. Every dump is checked with the restore tool before it counts, old copies are pruned, and you hear about the first failure by email, Slack or Discord.

Setup is one sitting: a read-only database user, a key scoped to one bucket, and one IP to allow-list. Works with Supabase, Neon, Railway, Render, Fly.io, Heroku, RDS, PlanetScale and any other public host.

backups/prod ยท 2026-09-13 02:17 UTCsuccessverified
[02:17:01.204Z] Connected: PostgreSQL 16.4, size 671088640 bytes
[02:17:01.310Z] Running pg_dump --format=custom --dbname app
[02:18:44.891Z] Uploaded 144703488 bytes to backups/prod/2026-09-13T02-17-01Z.dump.enc in 103581ms
[02:18:45.017Z] Verified: 142 tables with data, 96 indexes, 611 entries
[02:18:45.402Z] Retention: deleted 1 old backup(s) (keep last 14)

The Verified line is pg_restore --list run on the dump as it streams to your bucket, on every backup. A dump it cannot read is a failed run with an alert, not a success.

Native formats
pg_dump custom archives and gzipped mysqldump SQL, restorable with the standard tools.
Nothing stored here
The dump streams from your database into your bucket. No temp files, no copy on our side.
Free for one database
Daily, encrypted backups of one database up to 1 GB, no card required.
Or run it yourself
The same backup engine is an MIT-licensed container, dumpling-backup, for when you would rather not hand over a password.

Three steps. Nothing to install.

No agent on your server, no container to babysit. The worker connects from one fixed IP that you allow-list, and every step is tested when you save it.

  1. 1

    Connect a database

    Paste the connection URL your provider shows, or type host, port, user and password. Dumpling connects, reads the server version and measures the size before anything is saved. A user with SELECT is enough.

  2. 2

    Point at a bucket

    Pick a preset for S3, R2, B2, Wasabi, Spaces, Hetzner or MinIO and paste a key scoped to that one bucket. The test writes a tiny object and deletes it, so a wrong key fails now, not at 02:00.

  3. 3

    Pick a schedule

    Hourly, daily, weekly or a cron expression. Set how many copies to keep or for how many days, and an optional passphrase. The first backup runs right away and its log appears on the job page.

Platform-specific steps, including where to find credentials and what to allow-list, are in the 70 setup guides.

The cron job you would have written, with the parts you would have skipped

A pg_dump | aws s3 cp line takes ten minutes. The alerting, the restore check, the retention that does not delete the wrong thing and the log you can show someone are the months after that.

ConcernA cron scriptA Dumpling job
Where the file goesWherever the script writes; often the same serverYour S3-compatible bucket, native pg_dump or mysqldump format
When it stops workingSilence until you lookFailure email at once; missed-run alert when a job is overdue; Slack, Discord or webhook
Whether the dump restoresUnknown until the day you need itpg_restore --list or the mysqldump trailer checked in-stream, every run
Old copiesA bucket that grows forever, or an rm that deletes too muchKeep-last and keep-days retention that only deletes files Dumpling wrote
EncryptionAnother script to write and another key to loseOptional AES-256 passphrase, openssl-compatible, on every plan
The evidenceWhatever cron mailed to rootEvery run's log, size, duration and restore command on the job page

If Dumpling vanished tomorrow, every file in your bucket would still restore with pg_restore or mysql. That is the difference from tools that keep a copy for you.

Works wherever your database lives

Any PostgreSQL or MySQL/MariaDB reachable from the internet, into any S3-compatible bucket. Ten hosting platforms and five storage providers have a step-by-step guide; the rest work with the generic host fields.

Databases hosted on

Each guide says where the credentials are, whether TLS is required and how to allow-list the worker IP.

Backups stored in

No bucket yet? Cloudflare R2 gives 10 GB free with no egress fees; the docs set it up in five minutes.

One database free. Pay when you have several.

The storage is yours, so the price covers scheduling, verification, retention and alerts. Encryption and Slack, Discord and webhook alerts are on every plan, Free included.

Free

$0/month

For a side project that deserves a backup.

Backup jobs
1
Schedule down to
Daily
Database size
up to 1 GB
Run history
7 days

Pro

$9/month

For indie hackers and small SaaS products.

Backup jobs
10
Schedule down to
Hourly
Database size
up to 25 GB
Run history
90 days

Team

$19/month

Pro with more room: more jobs, faster schedules, a year of history.

Backup jobs
50
Schedule down to
Every 15 min
Database size
up to 100 GB
Run history
1 year

Prices in USD before VAT/GST. Cancel any time from the billing page; the first payment is refunded in full if you ask within 14 days. Full details on the pricing page.

You are handing us a database password. Here is what happens to it.

The six facts that matter, in plain terms. The full list, including the one TLS trade-off we make, is on the security page.

  • Secrets encrypted at rest

    Database passwords, bucket keys, passphrases and webhook URLs are stored with AES-256-GCM under a master key kept only in the server processes' environment, and decrypted in memory for the run alone.

  • One fixed IP, read-only user

    Backups leave from a single IPv4 address shown in your dashboard. Allow-list that and nothing else. A user with SELECT is all the dump needs.

  • No copy on our side

    The dump streams from your database into your bucket. After a run we hold timestamps, sizes, object names and the tail of the tool's log, never the data.

  • Encryption you control

    An optional passphrase encrypts each file with AES-256-CBC in OpenSSL's standard format, so even your bucket provider cannot read it and you never need Dumpling to decrypt it.

  • Guarded outbound connections

    Every host you enter is checked against private, loopback and cloud-metadata ranges when saved and again before every use. Bucket endpoints and webhooks must be https.

  • Written down, not badged

    No audit report and no certification; one person runs this. The security page lists exactly what is stored, what never is, and how to report a vulnerability.

Would rather run it yourself? Same engine, MIT licence.

dumpling-backup is the backup run behind this service as a single container: the same streaming dump, the same pg_restore --list check on every archive, retention that only deletes its own files, encryption and failure webhooks. No UI and no state; configuration is environment variables.

The hosted service adds what a container cannot do alone: a run history you can show someone, missed-run alerts when nothing ran at all, email alerts and a weekly digest.

Comparing options? Eight open-source Postgres backup tools, side by side, ours included.

docker run --rm \
  -e DATABASE_URL='postgresql://backup:โ€ฆ@db.example.com:5432/app' \
  -e S3_ENDPOINT='https://<account>.r2.cloudflarestorage.com' \
  -e S3_BUCKET=db-backups \
  -e S3_ACCESS_KEY_ID=โ€ฆ -e S3_SECRET_ACCESS_KEY=โ€ฆ \
  -e SCHEDULE=once \
  ghcr.io/siddhujz/dumpling-backup:18

Image tags :16, :17 and :18 follow your PostgreSQL major version. Exit code 0 means a verified backup.

Questions people ask before trusting a backup tool

Short answers here; the long ones are in the docs.

Does Dumpling store my backups or my data?
No. The dump streams from your database through the worker's memory into your bucket as a multipart upload. No temporary file is written on our side and no copy is kept. What remains after a run is its metadata: when it ran, how large the file was, its object name and the tail of the tool's log.
How do I back up a Supabase, Neon or Railway Postgres database?
Add the database with the connection URL your provider shows, add a bucket, pick a schedule. Supabase needs the session pooler host on port 5432 (the direct host is IPv6-only); Neon and Railway work with the URL from their dashboard. Each platform has a guide under /backup with the exact screens and the allow-list step.
How do I restore a backup?
Download the file from your own bucket. Postgres backups are pg_dump custom format: createdb restored_db, then pg_restore --no-owner --no-acl -d restored_db file.dump (use pg_restore 18 or newer). MySQL backups are gzipped SQL: gunzip < file.sql.gz | mysql restored_db. Encrypted files decrypt first with openssl enc -d -aes-256-cbc -pbkdf2. The exact command is shown on every run.
What does "verified" mean on a run?
While the dump streams, Postgres archives are read with pg_restore --list and MySQL dumps are checked for mysqldump's completion trailer. A dump the standard tools would not accept is reported as a failed run. It does not restore into a database, so keep doing an occasional restore drill.
What happens when a backup fails or does not run?
A failure emails you at once with the error and the log, and posts to Slack, Discord or any HTTPS webhook if you added one, on every plan including Free. A job that is overdue by twice its interval (at least an hour) triggers a missed-run alert. A weekly digest summarises every job.
What access does Dumpling need?
A database user with SELECT on the tables you want backed up, bucket credentials scoped to one bucket, and your firewall allowing one fixed IPv4 address, shown in the dashboard. The grant statements for Postgres and MySQL are in the docs.
How are my credentials protected?
Database passwords, bucket secrets, passphrases and webhook URLs are encrypted at rest with AES-256-GCM under a master key that lives only in the server processes' environment. They are decrypted in memory for the connection test and the backup run and never logged. Every host you give us is checked against private and cloud-metadata address ranges before it is saved and again before every use.
Which databases and storage providers are supported?
PostgreSQL and MySQL/MariaDB reachable over the public internet, on any host. Storage is any S3-compatible bucket: Amazon S3, Cloudflare R2, Backblaze B2, Wasabi, DigitalOcean Spaces, Hetzner Object Storage, MinIO or another S3 endpoint. MongoDB, Redis, SQLite and SSH tunnels are not supported.
How big can the database be?
Size is measured before every run against your plan's cap: 1 GB on Free, 25 GB on Pro, 100 GB on Team. A run over the cap fails with a clear message instead of leaving a partial file.
Can I run it myself instead?
Yes. The backup engine is open source under the MIT licence as dumpling-backup, a single container (ghcr.io/siddhujz/dumpling-backup) configured with environment variables: the same streaming dump, the same check on every archive, retention, encryption and webhook alerts. It runs under Docker Compose, as a Railway template, or as a GitHub Action. The hosted service adds the run history, missed-run alerts, email alerts and the weekly digest, with nothing to deploy.
Who runs Dumpling?
One independent developer, named on the about page, who answers support@getdumpling.dev and replies to vulnerability reports. Live since 13 September 2026. The design that makes a one-person service acceptable for backups is that your data never passes through storage we control.

The first backup runs the moment you save the job.

Sign in with a magic link, add a database and a bucket, and watch the run log fill in. One database with daily, encrypted, verified backups is free with no card. Live since 13 September 2026.