Releases & Versioning
This is an alpha pre-release. CNA is now versioned, but neither the C++ API nor the experimental C ABI is promised stable before 1.0. Pin the tag or commit you build against.
The first tagged release
| Product version | 0.1.0-alpha.1 |
|---|---|
| Git tag | v0.1.0-alpha.1 |
| Resolved commit | 1bb2145d99ed572dd4eb15009c34e2e5f410fcf0 |
| Tag date | 2026-08-20 19:06:23 +0200 |
| Release status | First tagged pre-release |
The leading v belongs to the Git tag. The product version reported by CMake and C++ is 0.1.0-alpha.1 without it. Browse the immutable tagged source or its release changelog.
Semantic Versioning before 1.0
CNA follows Semantic Versioning 2.0.0. The alpha.1 suffix has lower precedence than a final 0.1.0. During the 0.y.z phase, minor releases may change the API; alpha, beta and release-candidate identifiers communicate increasing release maturity, not an ABI guarantee.
Reading the product version
The root project(CNA VERSION 0.1.0) and CNA_VERSION_PRERELEASE are the build source of truth. CMake generates CNA/Version.hpp in the build tree.
#include "CNA/Version.hpp"
static_assert(CNA_VERSION_MAJOR == 0);
static_assert(CNA_VERSION_MINOR == 1);
static_assert(CNA_VERSION_PATCH == 0);
static_assert(CNA::isPreReleaseVersion());
std::string_view version = CNA::getVersionString(); // "0.1.0-alpha.1"
std::string_view label = CNA::getVersionPreRelease(); // "alpha.1"
The generated header also provides CNA_VERSION_PRERELEASE, CNA_VERSION_STRING, and constexpr major/minor/patch accessors. Because it is generated, use the configured build's include directories rather than copying the template into a consumer.
Product version versus C ABI
The experimental native C interface declares its own ABI identity: 0.7.0 at this tag. It is not the CNA product release number. However, alpha.1 cannot produce the final C library: its C renderer table has 49 entries against the canonical 50, with NanoVG missing, and a deliberate static_assert stops compilation. Treat 0.7.0 as the identity of the checked-in contract, not evidence of a consumable binary. A future CNA product release can retain or revise that ABI independently after repairing the build.
#include <CNA/C/abi.h>
uint32_t runtime_abi = cna_get_abi_version();
if (runtime_abi != CNA_ABI_VERSION) {
/* refuse or use an explicitly supported compatibility path */
}
See Experimental C API for the measured source scope, intended package design and exact compile blocker.
Exact source boundary for this site
This edition audits changes from ae0be4b5211957efaef60f2f23627ae5a9ddda23 through the resolved tag commit above. Claims come from the final tag's implementation, CMake configuration, headers, registries and tests. Repository plans and changelog entries are discovery aids, not overrides for contradictory code.