Skip to content

Plan a Cratis Chronicle upgrade

Before upgrading Cratis Chronicle, find out whether the change affects application code, stored data, or communication between the server and its clients. A version bump and rebuild may be enough for one boundary; another may require a stored-state migration. When crossing several majors, you need the instructions for every boundary between your current and target versions.

Choose those versions below. This planner reads Chronicle’s major-version guide; links for the other Cratis products follow it.

Showing every boundary from 6 to 20.

  1. 6 → 7Stored state2023-01-10

    Stored observer state

    migrate that stored state before starting 7.x, or accept that inbox observers restart from their default position.

  2. 7 → 8Compile-time, transport2023-01-23

    Namespaces, transport and several APIs

    expect compile errors across the codebase and work through them; update `cratis.json` / `cluster.json`, where single-cluster mode changed from `local` to `single`.

  3. 8 → 9Compile-time2023-07-19

    Repository split and startup

    Startup and configuration only; wire-compatible both directions

  4. 9 → 10Unknown2024-07-30

    No recorded change

    No release notes exist for this major

  5. 10 → 11Stored state2025-03-12

    Stored job state

    expect in-flight job state from 10.x to be unreliable. Drain jobs before upgrading if their completion matters.

  6. 11 → 12Compile-time2025-06-04

    Internalized APIs and a renamed package

    rename the package reference; stop using anything from `Cratis.Chronicle.Contracts` or `Cratis.Chronicle.Infrastructure` that you were reaching into.

  7. 12 → 13Compile-time2025-06-23

    One method became async

    `await` it. Opt out with `AutoDiscoverAndRegister = false` on `ChronicleOptions` or the `skipDiscovery` argument if you were managing discovery yourself.

  8. 13 → 14Stored state, compile-time2025-08-15

    Read-model formalization and stored layout

    this one touches stored layout as well as APIs. Read the release notes in full, and go to **14.0.1**, not 14.0.0.

  9. 14 → 15Compile-time, config2026-02-03

    Rules retired, TLS, content type

    replace Rules usage; fix code that treated `Content` as `ExpandoObject`; configure TLS for production; rename the testing package reference.

  10. 15 → 16Config, endpoints2026-07-09

    One port, always TLS

    remove management-port configuration, point tooling and bookmarks at the single TLS port, and configure a certificate for production.

  11. 16 → 17Wire2026-08-25

    The generated wire contract

    take a matching client. Go to **17.0.1** — 17.0.0 is the accidental release described above and carries a pre-migration contract.

  12. 17 → 18Wire2026-09-08

    Append content back to a string

    nothing, if you use a published client at a matching version. A client built directly against the raw gRPC contracts must send and receive `Content` as a string.

  13. 18 → 19Compile-time2026-09-17

    A .NET signature

    rebuild.

  14. 19 → 20Cluster2026-11-04

    Cratis Choreography

    stop every kernel silo of the cluster and start them on 20 together, rather than rolling pods one at a time across this boundary.

A compile-time boundary changes an API your code uses. Fix the accumulated compile errors against the version you plan to run, rather than rebuilding your application at each intermediate version.

A stored-state boundary concerns data already written. Follow these instructions in order: skipping an intermediate release does not skip its data changes. Before crossing one, take a backup, verify you can restore it, and rehearse the upgrade against a copy.

A wire boundary changes the protocol between the Chronicle kernel (the server) and its clients. The kernel and .NET client must move together across these boundaries. For example, a 16-to-18 upgrade crosses wire changes at both 16-to-17 and 17-to-18; read both entries before choosing a client version.

Chronicle verifies compatibility across released minors within one major; crossing a major permits a protocol change. The TypeScript, Kotlin/Java, and Elixir clients have their own version numbers and check wire compatibility with the kernel when they connect. Check the pairings in Version compatibility, not just matching version numbers.

Each entry links to the full account in Chronicle’s own upgrade guide, which is where this list comes from. Read that entry before changing a deployment; the planner summarizes it rather than replacing the instructions.

The other products do not publish a major-version guide in this format yet. Use their own migration pages and release notes:

  • Components: Migration guides, including 2 to 3 and 3 to 4.
  • Arc, the CLI, the clients, and the tools: the release notes linked from What’s new.