Versioning
February 17, 2026 · View on GitHub
Coi uses a Rolling Ecosystem version model instead of Semantic Versioning (SemVer).
The Coi Versioning Philosophy: Pond & Drop
1) Pond (The Stability Era)
The Pond represents the contract version of the language.
- Compatibility: Code in the same pond shares the same core syntax and ABI rules.
- When it changes: Pond increments only for breaking changes.
- Reset: When a new pond starts, drop resets to
0.
In short: if pond changes, the contract changed.
Note
We are currently in Filling Pond 0. We still allow breaking drops while the language core stabilizes; once the core is stable, we move on to the next pond.
2) Drop (The Progress Counter)
The Drop is the progress counter within the current pond.
- Direction: Drops are strictly additive (
Drop 500includes everything fromDrop 499plus more). - Scope: New features, fixes, and platform improvements are delivered as higher drops in the same pond.
- Scale: Drop can grow very large over time; it tracks real development mileage.
In short: drop is velocity inside a stable contract.
Registry Compatibility Fields
Registry package releases use:
compiler.pond: required pond contract for that release.compiler.min-drop: minimum drop required in that pond.
Compatibility rule:
compiler.pondmust match the compiler pond.- compiler drop must be
>= compiler.min-drop.
If pond differs, compatibility is rejected even if drop is high.
Declaring a New Pond in the Compiler
Compiler version metadata is generated from the gen_version rule in build.ninja.
When starting a new pond, update these values in that rule:
pond_number: integer pond contract versionpond_start_commit_count: total git first-parent commit count where the current pond starts. This is not the current drop.
Pond names are currently mapped in CLI code by pond_number:
- Pond
Ndisplays asFilling Pond N(includingFilling Pond 0)
Runtime drop is computed as:
drop = GIT_COMMIT_COUNT - pond_start_commit_count
Example:
- Pond starts when total commit count is
350→ setpond_start_commit_count = 350 - Later total commit count is
356→ runtime drop is6