Separate capture from storage
Database code produces an artifact; storage code moves it. That keeps S3, GCS, Azure, and local delivery out of the database-specific commands.
Open source / Developer tooling
A Go CLI for automated, observable database backups across local and cloud storage.
$ bullstash backup postgres
--storage s3 --compress
--notify discordbackup complete · restore point verified
Why I built it
I started BullStash after seeing how easily teams accumulate a different backup script for every database and environment. Configuration drifts, schedules become invisible, and the first restore test happens during an incident.
I used the project to design one command model across database engines and storage providers. The goal was not just moving bytes. I wanted schedules, failures, notifications, metrics, and restoration to behave predictably from the same interface.
Support matrix
The run lifecycle
BullStash normalizes configuration and lifecycle events while keeping database and object-storage adapters independent. A run composes capture, compression, transfer, retention, and notification without putting provider logic in the command layer.
That separation kept the CLI understandable as I added engines, storage targets, and observability without turning each command into a separate script.
run.next()run.next()provider.put()restore.verify()Database code produces an artifact; storage code moves it. That keeps S3, GCS, Azure, and local delivery out of the database-specific commands.
I wanted recovery to use the same configuration and provider model. A green upload message is not proof that the data can be restored.
Schedules, metrics, and webhook notifications are part of the backup path because silent automation is difficult to trust during an incident.
The standard
A backup is an operational promise, not a successful upload message.
I designed and built the Go command surface, provider abstractions, backup and restore lifecycle, observability hooks, and documentation as an open-source system.
Current state
Open-source work in progress with working full backup, restore, scheduling, and provider pathsStill on my list