Pop Dispatch makes a backup every night and whenever you ask. You will be able to make a backup, read the list, and know exactly what to do after a restore.
Before you start #
Backups belong to the owner. Other roles receive "Only the owner can use backups."
Make and read backups #

- Open Settings, Backup. The list shows each backup with its kind (nightly, on demand, before update or before restore), its size and the time it was taken.
- Choose to back up now. The server takes a snapshot, removes the secrets from it, compacts it, records a checksum, restores it into a scratch copy to prove it opens, and only then adds it to the list. The answer says
checked: true. - Nightly backups run by themselves. The server checks every 30 minutes and takes one whenever none was made in the last 24 hours.
What is kept #
- 14 nightly backups and 5 on-demand backups. On-demand backups never push out nightly ones.
- Before-update and before-restore backups stay until you remove them.
Secrets stay out of backups #
A backup holds no password hash, sign-in token, device key, authenticator secret, webhook signing secret, saved idempotent answer or sign-in attempt. Public link tokens are cleared, and tow call tokens get fresh random values. A stolen backup holds nothing that signs anyone in.
Backup files for another computer #
The folders above stay inside the data folder, so they go down with the computer. For a copy that survives it, Pop Dispatch also makes one encrypted file ending in .psdbackup into a folder you choose (a USB drive or a network share), every night and on request. Restoring one on a new computer needs your recovery key: dispatch-server restore <file>. See "Backup files, schedule and the monthly test" and the playbook "My computer died".
Restore a backup #
- Stop the server. Restoring replaces the live database file, so nothing should be using it.
- Choose the backup folder. Each backup is a folder under
backupsin the data folder, named by its time, holdingdbandmanifest.json. - Run
dispatch-server restore --from <backup folder> --data-dir <data folder>. - The command checks the backup against its checksums, saves your current data as a before-restore backup named with the time and
_prerestore, puts the backup in place and runs the launch check on the result. - Read the message. It lists each owner in the restored data with the exact
reset-passwordcommand to run for them. - Start the server. The crash count clears, so a server in safe mode starts normally.
After a restore (the reset-password step) #
Passwords, authenticator secrets and webhook secrets stay out of backups, so the owner has three things to redo:
- Reset passwords. Run
dispatch-server reset-password --tenant <account> --user <email>for each person, starting with the owners. The command prints a one-time password once, clears that person's lockout and ends their earlier sign-ins. At the next sign-in the person must choose their own password. See "Signing in, tokens and lockout". - Set up the authenticator app again for every owner and manager. See "Two-step sign-in for owners and managers".
- Make a new signing secret for each webhook endpoint with its rotate-secret call. Until then, queued deliveries wait with the message "The signing secret is missing. Make a new secret for this endpoint."
Also make new integration keys, because token hashes stay out of backups too.
Technical details
- Layout:
backups/<stamp>/dbandmanifest.jsonin the data folder. The stamp is UTC time asYYYYMMDDTHHMMSS. The manifest lists the format, kind, applied migrations, and the SHA-256 and size of each file. - A backup is written in a staging folder and renamed into place only when whole, so a crash leaves nothing that looks complete.
- Restore checks the snapshot's checksums first, takes a before-restore backup of the current state (a raw copy when the current file refuses to open), copies the snapshot over the database and removes leftover journal files. A backup folder from outside the data folder is copied into
backupsfirst, and a different backup with the same name there stops the restore. GET /backuplists backups andPOST /backuptakes one. Both are for the owner and both stay open while the licence is read-only.- The scrub runs on the snapshot file, never on the live database.
If something goes wrong #
- The answer to a new backup is
server_error: the snapshot failed its restore check and was removed. Check free disk space, then try again. - The list is empty: no backup has completed. Take one now.
- "That backup failed its check": the backup is damaged and the restore stopped. Choose an older one.
- "has no db and manifest.json": the folder lacks the backup files. Choose the folder named by time inside
backups. - "The restored data failed its check": choose an older backup. The data you had before is saved as the before-restore backup.
- People are locked out after a restore: see the steps above, and the playbook "Server down or restoring a backup".