# Versions

> The current version of ode and of the Songcode Audio Engine, how a song names its version, which engine reads which ode, and how to find the engine a platform runs.

ode and the Songcode Audio Engine each have a version. ode is on 0.3.0. The Songcode Audio Engine is on 0.1.1.

## How the numbers move

A version has three numbers, as in `0.3.0`. The middle number moves for a big release: new words, new parts of a song, or a change to what something means. The last number moves for a tweak: a fix, or a small addition that changes nothing a song already says. The first number moves only for a change that reshapes the whole language, and that has not happened yet.

The two numbers move on their own. A change to the engine that does not touch the language (a better reverb, a faster render, a fix in how a note is played) moves only the engine's number.

## Naming a version in a song

A song starts with the line `ode`. That is all Songcode writes, and all a song needs.

```ode
ode
title "glass elevator"
tempo 126
form loop 1

stem kick: club {
  kick [x... x... x... x...]
}

mix {
  kick 0db
}
```

The line can also name a version, as in `ode 0.3.0` or `ode 0.3`. A song that names one asks for that version or newer. A song that does not is read as the newest ode the engine knows.

Tracks saved before ode was versioned start with `ode 1`. They open and play as they always have, and nothing rewrites them. `ode 1` reads as ode 0.3.0.

## Which engine reads which ode

Every engine reads every version of ode up to the one it was built with. A newer ode can use words an older engine has never seen, so an older engine may not read it.

| Songcode Audio Engine | reads ode |
|---|---|
| 0.1.1 | up to 0.3.0 |
| 0.1.0 | up to 0.3.0 |

When an engine meets a song that names a newer ode than it reads, it does not play it and says so, with both versions: the song's ode and the newest ode the engine reads. A song that just says `ode` gives no version to compare, so an older engine reports any word it does not know, line by line, as it would for any mistake.

## Where each version runs

The [Songcode Studio](https://docs.songco.de/app/) always runs the newest Songcode Audio Engine. If the Studio says a song is too new, reload the page.

Other places that read ode can run a different engine version from the Studio, so each one says which it runs:

- **The API.** `GET /api/v1` returns `ode` (the newest version it reads) and `engine` (its name, `version` and `reads`). Every check of a song, in a draft, a track or a `check` call, carries the same two fields. See [the API](https://docs.songco.de/developers/api/).
- **MCP.** `check_code` and every tool that returns a song's check include the engine's version and the ode it read the song as. See [for agents](https://docs.songco.de/agents/).

A song that plays in the Studio and fails elsewhere with a version message needs that platform's engine to catch up. Nothing in the song has to change.

---

This page on the web: https://docs.songco.de/ode/versions/
Every page of the Songcode docs, for agents: https://docs.songco.de/llms.txt (index) and https://docs.songco.de/llms-full.txt (all of it in one file).
