Backup
Back up the per-deployment data -- the engine itself is a git clone and everything generated is rebuildable:
| Path | Why |
|---|---|
content.nosync/posts/ | the posts -- the one thing that's truly irreplaceable |
content.nosync/versions/ | what each edited post said before its last ten saves, which is what [v] restores from (Properties and actions). It sits beside the content and dies with it, so a backup of the posts alone keeps the archive and loses the undo |
media.nosync/ | their images and videos. A published picture has been a hardlink to this file since 1.6, so a backup still stores it once per name -- this is the copy that matters (A published picture is the archive's own file) |
config/site.yml | site identity and integrations |
config/site.<lang>.yml | what the site says about itself in each further language: its title, menu, the words for its tags and series, and where a language without a locale borrows its interface. Gitignored like site.yml, so a fresh clone has none -- and a site that names ui_language in one does not build without it |
assets/images/header.png, assets/images/favicon.png | your banner and icon -- gitignored, so a fresh clone brings back the engine's defaults instead, silently (Banner and favicon) |
env.sh | tokens (or re-create them; mind the file's 600 mode in backups too) |
trash/ | optional -- deleted-but-recoverable posts |
config/palettes.yml | only if you added a palette of your own -- the file itself ships with the engine |
Not needed: public.nosync/ (build output), .deploy_manifest*.json (self-heals with one full re-upload), .deploy_baseline.json (the guards' reference; losing it costs one deploy with the growth guard standing down, and it is rewritten by that same run), incoming/ (transient staging), .build_cache*.json (what the last build wrote, so the next one can skip re-making it -- per-machine, and deleting it costs one full build), .on-this-day.*.json (the on-this-day catalogues, rewritten by every build), .search_index.json (the words browse and list --search search, kept between runs so a query reads only the posts that changed -- deleting it costs one slow search), and the working files next to them -- .last-edit.md (the text from the last editor session, with .last-edit.meta recording which command it came from), .deploy-pending (a marker that says a scheduled publish still owes the target a deploy; see Deploying) and .last-scheduled-run (the scheduled-publish heartbeat above). The wizards' config/site.yml.bak and env.sh.bak are not needed either -- but the second holds your previous tokens, so delete rather than archive it. Restore = fresh clone + copy those paths back + ./blog.sh rebuild. The same list is exactly what to move when changing machines.
A backup is those paths as they are -- not an export. ./blog.sh export (Taking your content elsewhere) is for leaving, and it converts: what markdown cannot write down comes out as HTML. Restoring from an export is possible (./import.sh reads it back whole), but restoring from the archive itself is exact.
