Versioning & branches of my FOSS

A version comes in the form of 1.0.1 or Major.Minor.Revision. My branches are all vMa.Mi like v0.1 or v0.2 & do not include revisions in their naming. Currently (May 6, 2022) all my software versions are managed through the major.minor branches & do not use git tags to manage revisions.

I plan to add git tags to manage revisions, but I'm not sure when.

Notice: This is an early draft of my versioning plans and details may change.

Branching

The main branch of any of my repos will be a versioned branch like v0.2 or v1.0. I do not use a main branch very often.

Pre 1.0

When any of my software is before major version 1 (ie v0.1, v0.2, v0.X), the next minor version is likely to include major breaking changes. Basically during this time, the software is alpha/beta & all bets are off. Breaking changes even MAY occur without changing the minor version, though this is much less likely.

1.0 & later

When my software is major version 1 or greater (ie v1.0, v1.1, v2.0), major breaking changes will only occur when the major version is bumped (going from v1.0 to v2.0).

Minor version changes (1.0 to 1.1) shouldn't introduce breaking changes. Minor version changes will bring new features, deprecations, and sometimes new internal implementations. Sometimes I'll add new features without bumping the minor version, which i think is bad practice but meh.

However, most my software uses public properties & public methods even for internal implementation that isn't INTENDED to be used by a regular user of the library. Sometimes these "internal" (but public) implementation changes will break things. Generally this is if you are using the software outside of its intendeded purposes.

New Branches / versions

When I make a new branch/version, i create the branch v0.5 or v1.0. but will leave the previous version as the default/main branch. So if the default branch is v0.4 and i make a new branch v0.5, then v0.5 will be entirely unstable until i set it as the default branch. And then sometimes, I'll put a notice that it is still yet to be stable / if it is under development.