Versioning policy
Independent versioning per surface, and the compatibility promise.
Cartisto exposes several long-lived contracts. Each is versioned independently, because they evolve at different speeds — coupling them would force needless migrations.
The surfaces
| Surface | Version lives in | Consumed by |
|---|---|---|
Theme SDK (window.cartisto) |
the SDK bundle + cartisto.d.ts |
theme JS |
Theme Contract (data-cartisto, seeds, events, layout tags) |
theme.json → "sdk" |
theme markup |
| REST API | the /api/v1 path prefix |
integrations |
| Theme CLI | the CLI package version | the CLI |
| A theme’s own release | theme.json → "version" |
merchant installs |
The compatibility promise
- Within a major, changes are additive. New settings, new events, new endpoints — never a breaking change to an existing one.
- A breaking change ships a new major, and the old one keeps working. A theme
opts into a new SDK/contract major by bumping its declared
"sdk"; the API ships/api/v2while/api/v1continues. - Deprecate, never silently remove. A deprecated surface keeps working until the next major; the Quality Gate warns on deprecated usage, and Deprecations lists timelines.
Theme releases pin merchant installs
A theme’s own "version" is separate from the contract it targets. Installs pin
to it, and pins resolve by minor line:
- Patch = evergreen — a same-minor change reaches every install at once (fleet-wide bugfixes).
- Minor/major = frozen — a release snapshot is cut, and installs on the older line keep rendering it until the merchant applies the update.
This is the honest-pinning model: a “pinned” install actually renders frozen content for breaking changes, while still receiving safe fixes. Full detail in Theme versioning.
Contract stability status
The theme contract is pre-launch: identifiers can still change, and old
surfaces are deleted rather than shimmed. At launch it freezes as v1 — the
data-cartisto grammar, event names, seed globals, cartisto.state/.ui, and the
bundle URL scheme all become stable, and everything above kicks in.
What this means for you
Build against "sdk": "1.0" today. When v2 ships, your theme keeps working on
v1 until you choose to bump — you migrate on your schedule, not the platform’s.