Skip to content

Versioning

Beans has one place that says which version it is, follows SemVer, and is currently on a preview line leading up to 1.0.

All version numbers come from one file: compiler/version.h.

version = "0.1.18"
language_version = "1.0"
runtime_abi_version = 6
  • version: the compiler version (0.1.18).
  • language_version: the language version (1.0).
  • runtime_abi_version: the runtime ABI number (6).

From that header, compiler/beans/version.b is generated. A test (test/version.sh) refuses a stale copy, so the generated Beans file can never drift from the header.

beansc --version prints all three.

Beans follows Semantic Versioning.

  • Before 1.0, the language, standard library, CLI, module format, and ABI may change between minor releases. Pin the compiler and commit beans.lock for serious projects. See Compatibility.
  • After 1.0, a breaking public change needs a new major version, and both the current and previous minor lines get fixes.

The runtime ABI number changes whenever generated code and the shipped runtime stop being compatible with each other.

The 0.1.x line is a production preview on the 1.0 stabilization line. It is solid enough to build on, but it is not 1.0 and you should not call it 1.0.0.

Reaching 1.0 requires every release gate in the roadmap to pass:

  • the performance gates pass
  • a 24-hour fuzz campaign
  • a 30-clean-day beta, then a 14-clean-day release candidate
  • no open critical or high correctness bugs
  • the full 26-target release manifest published

See Maturity and platforms for the wider picture, and the release process for how a version is built and published.