What the version number means

Pre-1.0, what is genuinely settled, and what may still change under you.

Written By Dustin

Last updated 33 minutes ago

The version the source tree carries is 1.0.0-rc.1, and no public release has been accepted or tagged. If you built from source and are wondering whether that first component means the product is finished: it does not.

Reading 1.0.0-rc.1

Under Semantic Versioning the trailing -rc.1 is a prerelease identifier, and it changes the meaning of everything before it. 1.0.0-rc.1 sorts before 1.0.0, not after it, and a prerelease version carries none of the stability guarantees a released major carries. Read it as "working towards 1.0", not "1.0, plus a note".

The number was chosen deliberately over a throwaway 0.0.1: it is a real, claimable version rather than namespace clutter, and it stays honest about the open items that stand between here and 1.0. Note one consequence the project recorded openly at the same time — publication precedes the independent security review, and the audit flags in the release status data still read false.

Two different things get called "the version"

The number on the tovio binary is not the version of the things other tools build against. Thirteen contracts are versioned independently of it, on their own schedules — from the storage format and wire protocol down to the plugin contract and the audit-record encodings. A change to one implies nothing about any other, and none of them moves just because the binary's number did.

What is settled, and what is not

This is the distinction most often reported second-hand incorrectly, so it is worth stating precisely.

ContractActual state
Wire protocolStable, frozen at 1.0.0. The specification carries the Stable status. The frame set and the canonical encodings are settled, and only additive, byte-compatible optional fields and messages may be introduced.
Storage formatFormat version 1 — but the specification is still at Review status, not Stable. The version discipline below is real and protects what you have already written. "Frozen" is not the right word for it.

Why the storage format is not called frozen

Promotion to Stable is gated, deliberately, on conditions that have not been met:

  • The independent third-party cryptographic audit covering the envelope, the Key Authority flow, and the secret-at-rest path has not completed.
  • The compatibility and deprecation policy that must cover a surface before it is promoted is itself still a Draft document.
  • Specification v1.0 published — the promotion of the storage format, wire protocol, crypto envelope, token contract, and agent API from Draft to Stable — is an open, unchecked item on the roadmap.

Calling the format frozen today would claim the audit and the promotion had already happened. They have not.

The guarantee that does apply today

The format carries a version-bump discipline, and it is stronger than it sounds:

  • Any change that alters how an existing object encodes — and therefore its content address — is a breaking format-version bump that must ship a documented, tested migration. There is no such thing as a small address-changing change.
  • An addition that does not alter the bytes of existing objects — a new optional field, a new object type tag — is not a version bump.
  • The version is carried in two places that must agree: the repository's format marker and each structured object's own version key. Every object states the format it was written under, in its own bytes.

The practical consequence: a future reader cannot silently reinterpret bytes you already wrote. It either reads them as format 1, or it refuses and tells you so. That is narrower than "frozen", and it is the claim the project can actually support.

What may still change

  • Command surface details — flags, output shapes, command names. The --json document shapes are treated as contracts because the extensions, SDK, and agent surface consume them, but they are not settled the way the wire protocol is.
  • Behaviour of newer subsystems, which are further from a frozen contract than the core is.
  • Platform support floors. Every target carries a declared minimum operating system, libc, and architecture — and a certification flag that is not yet set on any of them. Declared is not certified.

How you find out

The changelog on the documentation site is the system of record. Breaking changes appear there under their own heading, naming the version they land in, the version they deprecate, and when the backward-compatibility window closes. Read it before upgrading rather than after, and pin a version in continuous integration so a release cannot arrive mid-pipeline.

What 1.0 will mean

Not a feature count. The open items are the independent security audit, the promotion of the specification set to Stable under the deprecation policy, a second implementation passing the conformance corpus, scale and failure evidence at the declared ceilings, and signed cross-architecture package publication. Those are what stand between here and calling it 1.0.