Skip to content

Versioning: crates and format

The crate version and the format version are deliberately not the same number. The published crates are at 0.1.x; the format they implement is 0.3. This page exists so that difference reads as the design decision it is, not a mistake.

Under pre-1.0 semver the minor is the breaking slot, so aligning the crate version to the format version would force a lie the first time the Rust API breaks without the format changing — or the reverse. Instead:

A reader accepts any MINOR at the same MAJOR — minor bumps are additive by definition (new record kinds, new fields, new value encodings), and everything a reader already understood keeps its meaning. When a file’s minor is ahead, the reader must still read it and must say so (AntReader::minor_ahead): the reader saw a subset of what the file means, and the caller decides whether that is acceptable.

A different MAJOR is refused at read time, with an error naming both versions — a major bump means field meanings or the container framing changed, so reading on would silently misinterpret records. The rule is §3 of the specification, and the failure it prevents is the version gate written as version == "0.2": that passes every positive test while being wrong, and v0.1 of the format shipped with exactly that bug. The conformance suite tests for it directly.

artifact version links
.ant format 0.3 specification · v0.3.0 release
ant-types 0.1.x crates.io · docs.rs
antares-format 0.1.x crates.io · docs.rs
openantares (CLI) 0.1.x crates.io · docs.rs

The JSON Schema keeps its own permanent identifier, https://openantares.org/schema/ant-0.1.schema.json, referenced by the crates and served on this site.

openantares info shows both version lines at once — the file’s format version and what the installed build supports:

format version: 0.3 (this build reads/writes 0.3.x)