|
libmemalloc 0.0.0-alpha
The Magic of Memory Transmutation
|
Versions use the following format:
MAJOR.MINOR.PATCH
Each field has a specific meaning:
| Field | Bump when | Example |
|---|---|---|
| MAJOR | A backward-incompatible public API, ABI, CLI, configuration, file format, or documented behavior change is introduced. | 1.4.2 -> 2.0.0 |
| MINOR | A backward-compatible feature, public API addition, or deprecation notice is introduced. | 1.4.2 -> 1.5.0 |
| PATCH | A backward-compatible bug fix, maintenance correction, documentation correction, or test correction is introduced. | 1.4.2 -> 1.4.3 |
The release version must be selected from the highest-impact change included since the previous release. For example, if a release contains both a bug fix and a new compatible feature, the release is a MINOR release.
Versions below 1.0.0 represent initial development:
0.y.z
During this phase, the public API is not considered stable, and incompatible changes may still happen as the project evolves.
Recommended project policy:
| Version range | Meaning |
|---|---|
| 0.x.y | Initial development. APIs, internals, and behavior may still change. |
| 1.0.0 | First stable public API release. |
| x.y.z, where x >= 1 | Stable versioning rules apply strictly. |
Pre-release versions are used for unstable previews, validation builds, and release candidates.
Format:
MAJOR.MINOR.PATCH-prerelease
Examples:
0.1.0-alpha.1 0.1.0-beta.1 1.0.0-rc.1
| Identifier | Meaning |
|---|---|
| alpha.N | Early preview. APIs and behavior may still change. |
| beta.N | Feature-complete preview. Bugs may still be fixed before release. |
| rc.N | Release candidate. Intended to become stable if no blockers are found. |
A pre-release version has lower precedence than the corresponding stable version.
Example:
1.0.0-rc.1 < 1.0.0
Build metadata may be appended with +.
Format:
MAJOR.MINOR.PATCH+metadata
Examples:
1.0.0+20260505 1.0.0+git.abc1234 1.0.0-rc.1+build.42
Build metadata identifies a specific build, revision, or packaging context, but it does not change version precedence.
Use the highest-impact change to decide the next version:
if any change breaks public compatibility:
bump MAJOR
else if any change adds compatible public functionality:
bump MINOR
else if any change fixes behavior or improves compatibility:
bump PATCH
else if a release is still needed for documentation, tooling, or metadata:
bump PATCH
else:
do not publish a new release
Release tags should use a leading v:
vMAJOR.MINOR.PATCH
Examples:
v0.1.0 v0.2.0-alpha.1 v1.0.0 v1.1.0 v2.0.0
MAJOR -> incompatible public change MINOR -> compatible public feature or deprecation PATCH -> compatible fix or maintenance correction 0.y.z -> initial development 1.0.0 -> first stable public API -alpha.N -> early preview -beta.N -> feature-complete preview -rc.N -> release candidate +metadata -> build metadata, no precedence change
Conventional Commits gives direct semantic-versioning meaning to these cases:
| Token | Meaning | SemVer impact |
|---|---|---|
| fix | A bug fix. | PATCH |
| feat | A new feature. | MINOR |
| BREAKING CHANGE | A breaking API or behavior change. | MAJOR |
| BREAKING-CHANGE | Synonym of BREAKING CHANGE when used as a footer token. | MAJOR |
| ! | Marks a breaking change in the commit prefix. | MAJOR |
A breaking change can be part of any commit type.
Examples:
feat(api)!: rename MEM_alloc to MEM_malloc BREAKING CHANGE: The internal heap metadata layout is incompatible with previous debug tooling.