Skip to content
🚧 These docs are a work in progress and may contain inaccuracies. Content is being actively reviewed and validated.

Backups

Dubby has a built-in backup and restore system accessible from the admin UI and REST API. You can also perform manual backups using standard tools.

Go to Settings > Backups in the admin panel and click Create Backup. Each backup can include any combination of components:

ComponentWhat’s includedSize impact
DatabaseFull SQLite snapshot (users, metadata, settings, watch progress)~50 MB per 1,000 items
ImagesCached TMDB artwork (posters, backdrops, logos)1-5 GB typical
TrickplaySeek preview thumbnail sprites~50 MB per movie/episode

Configure automatic backups under Settings > Backups > Schedule:

  • Cron schedule — Set the frequency (e.g., daily at 3 AM)
  • Retention count — How many backups to keep. When the limit is exceeded, the oldest backup is deleted automatically
  • Components — Choose which components to include in scheduled backups

From the backup list, you can:

  • Download — Export a backup archive from the server for offsite storage
  • Upload — Import a previously downloaded archive (with optional auto-restore)
  • Restore — One-click restore from any completed backup (owner-only)
  • Delete — Remove old backups to free disk space
Terminal window
# List backups
curl -H "Authorization: Bearer $TOKEN" http://localhost:3000/v1/backups
# Create a backup
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"components": ["database", "images"]}' \
http://localhost:3000/v1/backups
# Restore from a backup
curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"backupId": "backup-id-here"}' \
http://localhost:3000/v1/backups/restore

For users who prefer external backup tools, the data directory can be backed up directly.

DataLocationContains
DatabaseDUBBY_DATA_DIR/dubby.dbUsers, libraries, metadata, watch progress, settings
WAL filesDUBBY_DATA_DIR/dubby.db-wal, dubby.db-shmUncommitted database transactions
Image cacheDUBBY_METADATA_CACHE_DIRCached TMDB artwork
Trickplay spritesDUBBY_TRICKPLAY_CACHE_DIRSeek preview thumbnails
  • Transcode cache — Temporary files, regenerated on demand
  • Log files — Useful for debugging but not critical
  • Media files — Back these up separately; Dubby doesn’t modify your media

SQLite in WAL mode supports concurrent reads during writes. You can copy the database while the server is running:

Terminal window
sqlite3 /path/to/dubby-data/dubby.db ".backup '/path/to/backup/dubby.db'"

The .backup command creates a consistent snapshot even while the database is in use.

If you prefer to manage backups outside of Dubby:

/etc/cron.d/dubby-backup
0 3 * * * root sqlite3 /path/to/dubby-data/dubby.db ".backup '/backups/dubby-$(date +\%Y\%m\%d).db'" && find /backups -name "dubby-*.db" -mtime +7 -delete

If using Docker named volumes:

Terminal window
docker run --rm \
-v dubby-data:/data:ro \
-v /path/to/backups:/backup \
alpine tar czf /backup/dubby-data-$(date +%Y%m%d).tar.gz -C /data .
  1. Stop the server: docker compose stop dubby
  2. Replace the data directory with the backup
  3. Start the server: docker compose start dubby

The server checks for pending migrations on startup and applies them if needed.

  • All user accounts and sessions
  • Library configurations and paths
  • All metadata (titles, descriptions, artwork references)
  • Watch progress and continue watching state
  • User preferences and settings
  • Feature flag configurations
  • Collections and watchlists
  • AI enrichment data
  • Parental control profiles
  • Invite codes and permissions
  • Active streaming sessions (ephemeral)
  • Cached transcodes (regenerated on demand)
  • Trickplay sprites (unless included in the backup components)