Backups & restore
SyncBins does not ship automated in-app backups yet. Settings → Backups shows a “Coming soon” placeholder. Until that API exists, you own backup strategy on the host.
Your 12-word recovery phrase is the authoritative key backup — without it, ciphertext on disk is useless. Server snapshots protect against disk failure, not against losing the phrase.
What to back up
Section titled “What to back up”| Component | Location (typical Docker) | Contains |
|---|---|---|
| SQLite DB | ./data/syncbins.db | Devices, encrypted items, sync versions, tenant rows |
| Local blobs | ./data/blobs/*.bin | Encrypted large payloads when STORAGE_KIND=local |
| Cloud blobs | R2 / Azure bucket | Same ciphertext if STORAGE_KIND=r2 or azure |
| Env secrets | docker/.env | BLOB_URL_SECRET, storage credentials — not in the DB |
Ciphertext without your recovery phrase (and a paired device or phrase to derive keys) cannot be read. Backups preserve availability, not access if you lose the phrase.
Single-tenant snapshot (local storage)
Section titled “Single-tenant snapshot (local storage)”- Stop writes (optional but safest):
docker compose stop syncbins— brief downtime, consistent SQLite file. - Copy metadata:
cp ./data/syncbins.db ./backups/syncbins-$(date +%F).db - Copy blobs:
tar -czf ./backups/blobs-$(date +%F).tar.gz -C ./data blobs - Copy env: store
docker/.envin your secrets manager (not in the same unencrypted tarball as production keys if you can avoid it). - Start again:
docker compose start syncbins
For hot backups without stopping the container, SQLite’s online copy works if nothing else is writing:
sqlite3 ./data/syncbins.db ".backup './backups/syncbins-$(date +%F).db'"Still copy blobs/ separately — blob files are independent files on disk.
Cloud blob backends
Section titled “Cloud blob backends”When blobs live in R2 or Azure, back up both:
- SQLite (item metadata +
blob_refnames) - The object store (enable provider versioning or periodic
rclone sync)
Restoring SQLite without matching blob objects produces items that 404 on download.
Restore drill (do this once)
Section titled “Restore drill (do this once)”- Spin up a scratch container on another port or machine.
- Drop in your backed-up
syncbins.dbandblobs/(or point at restored bucket credentials). - Set the same
BLOB_URL_SECRETas production (signed local URLs depend on it). - Open the UI, unlock with recovery phrase, confirm item count and a random blob opens.
- Destroy the scratch instance.
What in-app backup will add later
Section titled “What in-app backup will add later”The Settings → Backups pane describes planned encrypted exports to S3/R2. That is not implemented — no API, no scheduled jobs. When it ships, this page will document the export format and restore path.
Multi-tenant operators
Section titled “Multi-tenant operators”One SQLite file holds all tenants. Backup the whole file plus shared blob prefix; per-tenant restore requires tooling not shipped yet. See Multi-tenant mode for operational notes.