Versioning

libultraship (LUS) uses epoch semantic versioning.

API definition

For the new epoch, versioning scope includes everything that is public within the Ship namespace.

This replaces the previous epoch rule that treated every C linkage function, variable, struct, class, public class method, or enum included from libultraship.h as part of the versioned API.

Why epochs

LUS is a library undergoing active architectural improvements. From time to time, we perform large refactors that touch core systems - context initialization, component lifecycle, resource management, or event dispatch.

The problem with traditional semver

With standard semantic versioning, major refactors create difficult tradeoffs:

How epochs solve this

Epochs add a leading number to the version: epoch.major.minor.patch (for example, 1.2.3.4 or 2.0.0.0).

This approach:

When to expect a new epoch

A new epoch typically begins when:

Small or targeted breaking changes within an epoch still follow semantic versioning rules (bump major within that epoch). For example, 2.23.0.1 is valid if 23 targeted breaking changes landed in the 2.x.x.x epoch, each with a clear migration path and production-ready code.