Intentional Versioning uses versions to tell who should care about a release. Version u.i.m addresses three audiences:
u — Usersu says: "Users, this release is for you."i — Integratorsi says: "Integrators, this release is for you."m — Maintainersm says: "Maintainers, this release is for you."u.i.m where u, i and m are non-negative integers.users/integrators/maintainers, or integrators/maintainers or just maintainers.The default audiences – users, integrators, maintainers – fit most projects. If yours doesn't have distinct integrators, the i won't change much, and that's fine.
If you want to be explicit, define your audiences in your README:
This project uses Intentional Versioning (intver.org): - Users: teachers and students - Integrators: LMS plugin developers - Maintainers: maintainers and core contributors Badge for README.md: [](https://intver.org) Badge for README.org: [[https://intver.org][https://img.shields.io/badge/versioning-intver.org-blue.svg]]
Version numbers say who should pay attention.
To say what breaks, you can use the git trailing BREAKING-CHANGE:, as recommended in conventional commits. Or you can use more specific git trailers:
feat!: Redesign the dashboard New layout with improved accessibility. Breaks-Users: The settings page has moved to the profile menu. Breaks-Integrators: DashboardConfig.load() now returns a Result type.
Three trailers are available, one per audience:
Breaks-Users:Breaks-Integrators:Breaks-Maintainers:The absence of a trailer means that nothing breaks.
u mean a breaking change?i. The scheme still works, it reflects the reality that this project doesn't have a distinct integrator audience.u' part. Implicitly, changes for users also deserve the attention of integrators and maintainers, and changes for integrators also deserve the attention of maintainers.1.2.3-beta)?u.i.m is identical, so most tools will accept IntVer version strings. The meaning is different, but the structure is the same.