History
Bogen records every change to a file: who made it (you, another person, an agent, another of your devices), when, with which tool, and which layers it touched. On top of that you make commits, named points to come back to. Both travel with the file to your paired devices.
Open the History tab from the toolbar. Changes and commits are one list.
Changes
Every change is a row. From a row you can:
- Revert this change, also one that is not the last;
- Revert everything this run did, for a whole agent run.
A revert turns a value back only if it still holds what the change left there. What someone changed since stays, and is listed as a conflict with the reason; the rest still goes back. A layer that gained children since stays; a layer whose parent is gone cannot come back. A revert is itself a change, can be reverted, and in the editor is one Ctrl+Z.
This works after a restart and from another device. Your agent uses change_list and change_revert, with dry_run to look first.
How long changes are kept, per file and device: the last 30 days in full, up to 32 MB. Older changes lose their details, oldest first, but keep who, when, which tool and which layers, up to 50,000 entries. A thinned change can no longer be reverted, and says so.
Commits
Press Ctrl+Alt+S, or Commit in the History tab, and give a message. A commit holds the whole design.
- Look at this version on the canvas previews a commit.
- Compare with now shows two versions side by side with a visual difference.
- Restore this version brings the design back to a commit as one change. What is there now is committed first, so nothing is lost. Layers, pages, tokens, keyframes and other document data go back; comments stay as they are. Fonts are only ever added.
Bogen also commits by itself: when an agent run finishes, before a restore, and every few minutes while you work. Show automatic commits lists the timed ones.
How long commits are kept: named commits by people and agents, for good. Commits from runs and restore points, until a file's commits pass 256 MB, oldest first. Automatic commits thin out to the latest 24, then one per hour for a day, then one per day for a month.
Your agent uses commit_create, commit_list, commit_diff and commit_restore.
Branches
A branch is a named copy of the file that shares its history, listed as its own file. Work in it, then Compare with this file, Merge into this file or Discard this branch.
Merging applies the copy through the same mechanism that merges edits from several people, so when both sides changed one value, the later edit wins. There is no three-way view. The list of branches stays on the device that made them, though the copies sync as files.
Design folders and Git
A design folder is a design written out as text: sorted keys, parents before children, assets as files. It diffs well, and writing it back gives the same bytes.
bogen export-folder "Pricing page" ~/Work/site/design # file id or name
bogen import-folder ~/Work/site/design --name "Pricing page"
bogen diff ~/Work/site/design ~/Work/old/design # --json for a machine-readable diff
To keep a design folder in a real Git repository:
bogen git init "Pricing page" ~/Work/site/design # makes or uses the repository, binds the file
bogen git commit "Pricing page" -m "Tighter hero" # writes the folder and commits it
bogen git log "Pricing page"
bogen git restore "Pricing page" --rev <commit> # brings the file back to that commit
Once a file is bound, a commit made in Bogen, by you or by an agent with commit_create, is mirrored to the repository as a real Git commit. Bogen runs no prompts or hooks, and never pushes. Restoring commits what it replaces first, like a restore in the History tab.
Change logs and commits are not part of .bogen files or design folders: those hold the design as it is.