Savepoints and branches
Use savepoint, branch, and merge to manage Bubble-side branch state from the CLI.
Savepoints
Savepoints are Bubble editor restore points for the current branch workspace. Create one before a risky apply or a large refactor.
buildprint savepoint create "before checkout refactor"
buildprint savepoint list
buildprint savepoint list --json
buildprint savepoint restore 1745068712345create requires a description. list prints timestamp, description, and email when available. restore restores the current Bubble branch to the timestamp you pass.
After restore, run:
buildprint syncThe CLI reminds you to sync because the Bubble editor state changed remotely and your local files need to be brought back in line.
Inspect branches
branch reads Bubble app versions. Run it inside a branch workspace, or pass the app id explicitly.
buildprint branch
buildprint branch staging
buildprint branch <appId> staging
buildprint branch <appId> <branchId>
buildprint branch --jsonWith no arguments inside a workspace, branch shows the current branch. With one argument inside a workspace, it treats the value as a branch name or id. With two arguments, the first is the app id and the second is the branch selector.
List branches
buildprint branch list <appId>
buildprint branch list <appId> --jsonUse this before cloning or creating branches so you know the exact names and ids your token can access.
Create branches
buildprint branch create "feature-checkout"
buildprint branch create <appId> "feature-checkout"
buildprint branch create <appId> new-flow --from staging
buildprint branch create "hotfix" --description "urgent fix" --json
buildprint branch create "experiment" --from test --no-workspace-syncInside a branch workspace or app root, you can omit the app id and pass only the new branch name. Outside a workspace, pass the app id first.
Useful flags:
--from <version>chooses the source branch. The default istest.--description <text>adds a Bubble branch description.--jsonprints the full API response and skips local workspace materialization.--no-workspace-syncavoids creating or syncing a local workspace after branch creation.
Branch names are normalized by the server, including trimming, lowercasing, and converting spaces to hyphens.
--from live is not allowed. Create editable branches from test, staging, or another non-live branch your token can read.
Merge Bubble branches
merge uses Bubble's native merge flow to merge one Bubble branch into another:
buildprint merge feature-a test
buildprint merge lemonb-820 staging
buildprint merge feature-a test --jsonThe command must run inside a Buildprint app workspace so it can resolve the app id. Before a non-JSON merge, Buildprint syncs existing local review workspaces for the source and target when it can.
If Bubble reports conflicts, the CLI prints the conflict keys. Resolve them by choosing the target branch value (to) or source branch value (from):
buildprint merge feature-a test --resolve 0=from
buildprint merge feature-a test --resolve 0=from --resolve 1=to
buildprint merge feature-a test --resolve-all toAfter a successful merge, Buildprint syncs an existing local target workspace when available. If you keep a target branch folder open, inspect it after merge and run buildprint sync if you need to refresh manually.
Permission failures
Branch and merge commands use the linked CLI token. If a source branch is not visible to that token, the command fails with a permission message. Create from a branch the token can read or update the Bubble collaborator permissions for the app.