
# Release Notes

> Read what changed in the version you run, in any earlier version, or since the version you upgraded from — breaking changes first, from the binary, with no network.

```text
Usage: sovrium changelog [<version>] [--list] [--since <version>] [--format md|json] [--output <path>]
```

Every Sovrium release publishes release notes: what broke, what is new, what was fixed and what got faster. The binary carries those notes for every release, so the answer to "what changed?" is always one command away — on your laptop, on a server with no internet access, or inside the AI that edits your config.

The notes the binary prints are the ones published with it. Nothing is fetched, and nothing in your project is read.

## What changed in the version I run

```bash
sovrium changelog
```

Prints the entry of the version `sovrium --version` reports, then one line saying how many earlier releases the binary knows about.

An entry looks like this:

```markdown
## 0.27.0 (2026-09-23)

### Features

- **cli**: add sovrium docs --export for documentation sites

### Bug Fixes

- **pages**: keep what is typed into a form inside a tab panel
```

The bold prefix names the part of Sovrium a change touches. A release with nothing you can see says so in one line.

A binary you built yourself between two releases has no published entry of its own yet. It says so, and prints the latest entry it carries.

## One release

```bash
sovrium changelog 0.25.0
sovrium changelog v0.25.0
```

Both spellings work. A version the binary does not carry is refused, and the message suggests the nearest versions it does carry.

## Every release

```bash
sovrium changelog --list
```

One line per release, newest first, with its date and a count of what it holds — `1 feature, 3 fixes`, `4 breaking, …` — so you can see which entries are worth opening. The version you run is marked `current`.

## Everything since I upgraded

```bash
sovrium changelog --since 0.24.0
```

Prints every release after `0.24.0`, up to the version you run, newest first. Before the first entry, it gathers **every breaking change** of those releases in one place, each naming the version that introduced it: when you jump several versions at once, that is the list to read before anything else.

If `0.24.0` is the version you run, or a newer one, the answer is `Already up to date`.

## For tools and scripts

```bash
sovrium changelog --since 0.24.0 --format json
```

Prints one JSON document:

```json
{
  "format": "sovrium-changelog",
  "schemaVersion": 1,
  "engine": "0.28.0",
  "releases": [
    {
      "version": "0.27.0",
      "date": "2026-09-23",
      "compareUrl": "https://github.com/sovrium/sovrium/compare/v0.26.0...v0.27.0",
      "current": false,
      "sections": [
        {
          "kind": "features",
          "title": "Features",
          "entries": [
            { "scope": "cli", "text": "add sovrium docs --export for documentation sites" }
          ]
        }
      ]
    }
  ]
}
```

`kind` is `breaking`, `features`, `fixes`, `performance` or `other`. `scope` is `null` for a change that names no area. The releases are the same ones the markdown view prints, in the same order.

`--output <path>` writes the result to a file instead of the terminal, creating missing folders:

```bash
sovrium changelog --since 0.24.0 --output notes/upgrade.md
```

## Refusals

Each exits `1` with a message saying what to do instead:

- a version the binary does not carry, or a word that is not a version;
- a version together with `--list` or `--since` — ask for one view at a time;
- a `--format` other than `md` or `json`.

`sovrium changelog --help` prints the usage.

## Behaviour

### `sovrium changelog` Prints the Release Notes the Binary Carries

- `sovrium changelog`, run in an empty directory, prints the entry of the version `sovrium --version` reports, under a `## <version> (<date>)` heading, and exits 0
- The default view ends with a footer naming how many earlier releases the binary carries and `sovrium changelog --list`, and that count is one less than the lines `--list` prints
- `sovrium changelog 0.27.0` prints that release's heading, date, sections and every one of its lines, nothing from another release, and `v0.27.0` prints the same bytes
- `sovrium changelog --since 0.23.0` prints every breaking change of the releases it covers, each naming its version, before the first release entry
- A release whose lines carry no area prefix and a Performance Improvements section (`0.22.2`) prints those lines verbatim, with no invented prefix, under their own section
- A release with no user-facing changes (`0.6.2`) prints its heading and says it has no user-facing changes, and exits 0
- A version the binary does not carry, and a word that is not a version, exit 1 with nothing on stdout; the message names what was asked, suggests the nearest carried versions and names `--list`
- `--list` prints one line per release, newest first, each with its version, its date and what it holds; the first line is the running version and is marked as such, and the last is `0.0.2`
- `--since 0.26.0` prints the entry of every release after `0.26.0` up to the running one, newest first, and not `0.26.0` itself; `--since` beside a version argument exits 1 naming both
- `--since` the running version, or a version newer than it, prints `Already up to date` naming the running version, and exits 0
- `--format json` prints one `sovrium-changelog` document at `schemaVersion` 1 whose `engine` is the running version and whose releases carry version, date, link, sections and scoped entries; an unknown `--format` exits 1 naming `md` and `json`
- `--output <path>` writes exactly the bytes the same view prints to stdout, creating missing parent directories, and prints none of the notes to stdout
- `sovrium changelog --help` prints its usage naming `--list`, `--since`, `--format` and `--output` and exits 0, and `sovrium --help` lists `changelog`
- Reading one release, the running one, the list, a range and the JSON document, and refusing what the binary does not carry (regression)
