Versioning¶
Bundlebase has a built-in versioning system. Every time you call commit(), a new version is created with all your changes.
Until commit() is called, any changes you have made remain in-memory and only apply to your bundle instance. To share changes, you must commit.
Committing Changes¶
Viewing Version and History¶
Status¶
View uncommitted changes in the bundle. status() is available on builders
(from create() or extend()) — a bundle opened read-only has no uncommitted
changes and no status() method.
Reset¶
Discard all uncommitted changes, reverting to the last committed state.
Note
reset() and undo() are not available in the sync API yet.
Undo¶
Undo the last uncommitted operation. Can be called multiple times to undo several operations, or use UNDO LAST N to undo multiple at once.
Verify Data¶
Verify the integrity of all files in the bundle by checking SHA256 hashes.
Note
update_versions=True requires a builder (create()/extend()); bundles
opened read-only can verify but not update version metadata.
Format Compatibility¶
Every bundle records the minimum bundlebase version required to open it. This is set automatically when a bundle is created and tracks the major.minor version (e.g., 0.9). A maximum version can also be recorded, but new bundles leave it unset so any future bundlebase version can open them.
When opening a bundle:
- If the current bundlebase version is below the bundle's minimum version, an error is returned. This means the bundle uses features that this version of bundlebase doesn't support.
- If the bundle has a maximum version recorded and the current bundlebase version is above it, an error is returned with a suggestion to upgrade the bundle.
Old bundles created before version tracking was added will open without restriction.
Upgrading a Bundle¶
When you update bundlebase to a newer version, existing bundles may need their version range updated.
This updates the bundle's min and max version to match the current bundlebase version, committing the change. The upgrade writes directly to the bundle's manifest without opening it, so it works even when the version mismatch would prevent a normal open.
Manifest System¶
Each commit is stored as one YAML file under _bundlebase/ in the bundle directory, recording the author, message, timestamp, and every operation applied. See Bundle Format for the full layout and an annotated example.