Roadmap
Cairn ships monthly minor releases under date-based versioning
YYYY.M[.PATCH]. Each month delivers what is ready; nothing is held back for an arbitrary “1.0”.
Six named milestones cross-cut the monthly schedule so contributors and consumers can plan against
something more durable than a calendar tick.
Schedule is a plan, not a promise. The compiler is implemented in the open and slips happen. The CHANGELOG is the source of truth for what actually shipped.
Release cadence
Section titled “Release cadence”- Monthly minor (
YYYY.M.0) on the first of the month. The release PR is opened by a cron job and merged after human review. - Patches (
YYYY.M.N,N ≥ 1) are cut on demand frommainwhenever a relevant commit lands. Typical triggers: registry/constraint pack updates, regressions, and security fixes. No upper bound on patches per month. - Channel: there is only one —
stable. Cairn does not run a separate nightly or beta train. Behaviour that is not yet stable is gated by compatibility tier, not by release channel. - Backports: none. The latest release is the supported release. Older
YYYY.M.*lines do not receive further patches.
Milestones
Section titled “Milestones”Each milestone is a “the project can credibly do X” gate, hit when the corresponding month ships. Naming the gates separately from version numbers gives the roadmap a stable vocabulary even when the monthly schedule shifts.
| Milestone | Lands by | The thing it earns |
|---|---|---|
| M1 — source parses | 2026.7.0 | cairn parse produces an AST for every example in examples/ |
| M2 — minimal build | 2026.10.0 | cairn compile writes a Java .nbt for a single-room structure with floor and walls, plus a lockfile |
| M3 — examples work | 2027.1.0 | cottage, themed-tower, village all round-trip through cairn compile --edition java and load in Minecraft |
| M4 — Java/Bedrock parity | 2027.2.0 | Same DSL source emits valid output for both editions; parity table populated; per-edition theme fallbacks work |
| M5 — developer experience | 2027.3.0 | cairn-lang-lsp provides diagnostics and completion in at least one editor (VS Code) |
| M6 — redstone simulates | 2027.5.0 | Logical redstone synthesis, place-and-route, and tick simulator land together; redstone-door example verifies |
Monthly scope
Section titled “Monthly scope”The month → release contents table below is the working plan. It is denser than the milestone table because monthly minors can ship without crossing a milestone gate.
| Release | Scope added |
|---|---|
| 2026.7.0 | cairn-lang-core lexer/parser, cairn parse subcommand (AST display only). Release automation goes live. |
| 2026.8.0 | Intent IR; syntactic validation; cairn check. |
| 2026.9.0 | Semantic layer; materials and themes basics; cairn info reports the three version axes. |
| 2026.10.0 | Block-array pivot; Java backend (walls and floors only); lockfile (build.cairn.lock). |
| 2026.11.0 | cottage.crn compiles end-to-end for --edition java. |
| 2026.12.0 | Registry pack ingest; fail-loud errors with nearest-valid suggestions. |
| 2027.1.0 | All examples/ work on Java. M3. |
| 2027.2.0 | Bedrock backend with parity table and per-edition theme fallbacks. M4. |
| 2027.3.0 | cairn-lang-lsp minimal (diagnostics + completion); VS Code extension. M5. |
| 2027.4.0 | Redstone logical layer; combinational synthesis and place-and-route. |
| 2027.5.0 | Redstone tick simulator; sequential macros; redstone-door verifies. M6. |
| 2027.6.0 | cairn-lang-wasm + browser playground (live compile in the docs site). |
Beyond 2027.6.0 the schedule is intentionally not drawn. Once M6 lands the spec-driven part of
the project is largely complete and the roadmap will be redrawn around real usage feedback.
How the schedule is enforced
Section titled “How the schedule is enforced”The release strategy itself is automated:
- Monthly minor PR is opened by a GitHub Actions cron at
17:04 UTCon the first of each month (deliberately offset from the hour boundary, where GHA crons are most likely to be delayed or skipped). - Version is computed from existing tags: no
vYYYY.M.*tag yet → next isYYYY.M.0, otherwise the next in-month patch. - release-plz generates the version bump and changelog, applies the computed version via
--version-overrides, and opens a PR. - Human review is mandatory for the monthly minor. Patches from
mainpush events follow the same PR flow; merging triggers the publish pipeline. - Publish runs on the resulting
v*tag: cross-compile binaries for Linux, macOS, and Windows onx86_64andaarch64; sign with sigstore; attach to a GitHub Release; andcargo publishevery workspace crate to crates.io.
Compatibility expectations across this schedule are defined separately by
compatibility tier: .crn syntax and the lockfile evolve under Stable
rules, the Rust API stays Internal (#[doc(hidden)]) until M3, and most other surfaces sit at
Evolving for now.