Backups & Schema Migrations
Inhalt
Mesh persists its entire configuration in a single JSON file and automatically protects it from schema changes.
Where is the configuration?
In the container: /data/config.json — mapped to the host via the volume mount.
Standard on Unraid: /mnt/user/appdata/itsweber-mesh/config.json.
Schema migration chain
Mesh has a migration chain (apps/web/src/server/config/migrations.ts). On container start runMigrations runs:
- Reads the current config version from the JSON
- If version <
CURRENT_VERSION: runs the migration for every step - On success: persisted config has the new version
- On failure: container does not start — logs show exactly which step failed
Current version: v17 (as of 2026-04-29).
Automatic backup before every bump
Before every schema bump the store creates a backup:
/data/config.json.pre-vN
Examples from a live system:
config.json
config.json.pre-v15
config.json.pre-v16
config.json.pre-v17
Existing backups are never overwritten — if pre-v17 already exists (e.g. because the container already migrated from 16→17 before), a new bump will not replace the backup.
Manual backups
Recommended: daily rsync to another host:
rsync -av --delete /mnt/user/appdata/itsweber-mesh/ backup-host:/path/to/mesh-backup/
Or snapshot the complete appdata path every few days — that is the Unraid standard via the Appdata Backup Plugin.
Restore
docker stop itsweber-mesh
cp config.json.pre-v17 config.json
docker start itsweber-mesh
On start the migration runs again — if the version was the same, it is a no-op.
What to do with a corrupted backup?
Mesh can start with an empty /data — the First Run Wizard runs through and creates a fresh config. So no data loss is possible, only configuration loss.
If the config.json is too badly corrupted:
mv config.json config.json.broken
docker restart itsweber-mesh
Schema version history
| Version | When | Contents (highlights) |
|---|---|---|
| 1 | v0.1 | Initial |
| 8 | v0.4 | Multi-board support |
| 10 | v1.0 | Header search, OIDC |
| 13 | v1.2 | Editable help items, editor role |
| 14 | v1.4.2 | Command Overview banner, quick actions |
| 15 | v1.4.3 | Grid 12×80 → 24×20 |
| 16 | v1.4.6 | Z2M auto-discovery |
| 17 | v1.5.0 | Route-based nav, services[].pinnedToHome |
Full list: apps/web/src/server/config/migrations.ts.
Pre-release validation
For major schema bumps we test:
- Copy live config to an isolated test instance
- Start container with new image → migration runs
- Click through the UI manually → no 500s, no missing data
Only then is :latest updated.