// Guide

What Is Semantic Versioning?

Semantic versioning is the system behind version numbers like 2.4.1. Understanding it makes you a better communicator of what changed — and a better writer of release notes.

Try Free — No Account Needed →

The three numbers: MAJOR.MINOR.PATCH

A semantic version number has three parts: MAJOR.MINOR.PATCH. Each number has a specific meaning:

When you bump a number, all lower numbers reset to zero. So after 2.4.7: a bug fix becomes 2.4.8, a new feature becomes 2.5.0, a breaking change becomes 3.0.0.

Real examples of when to bump which number

ChangeVersion bumpWhy
Fixed a crash on loginPATCH (2.4.7 → 2.4.8)Bug fix, backward compatible
Added dark modeMINOR (2.4.8 → 2.5.0)New feature, backward compatible
Added dark mode + bug fixMINOR (2.4.8 → 2.5.0)MINOR absorbs the patch — only one bump per release
Renamed an API endpointMAJOR (2.5.0 → 3.0.0)Breaking change — callers need to update
Removed a deprecated featureMAJOR (3.0.0 → 4.0.0)Breaking change
Changed the config file formatMAJORExisting configs break — that's a breaking change

Pre-release and build metadata

SemVer also supports pre-release identifiers after the version number:

pre-release version examples
1.0.0-alpha # early alpha — unstable, API may change 1.0.0-alpha.1 # second alpha release 1.0.0-beta # feature-complete but may have bugs 1.0.0-beta.2 # second beta 1.0.0-rc.1 # release candidate — final testing 1.0.0 # stable release

What counts as a "breaking change"?

This is where teams get confused. A breaking change is anything that causes existing, valid usage to stop working:

Things that are not breaking changes: adding new optional parameters, adding new endpoints, fixing bugs (even if some users depended on the buggy behaviour — that's a judgement call), improving performance, updating documentation.

SemVer and your changelog

Semantic versioning and changelogs work together. The version number signals the severity of change; the changelog explains what specifically changed. A good CHANGELOG.md uses SemVer headers and groups changes by type — matching exactly what the version number communicates.

ChangelogAI generates changelogs that include your version number, date, and properly grouped changes. When you paste your commits, it also infers whether breaking changes are present and flags them in the output.

Common SemVer mistakes

Connection to release notes: Every MAJOR release should have a migration guide linked from the release notes. ChangelogAI flags breaking changes in the output — use that as your prompt to write the guide.

Frequently Asked Questions

What does v1.0.0 mean?

The first stable public release — where you commit to maintaining backward compatibility. Everything before 1.0.0 (0.x.y) is considered unstable and can change at any time.

Should I use SemVer for a mobile app?

App stores use build numbers and marketing versions differently. You can still use SemVer for the version string (displayed as 3.2.1) even if the internal build number increments separately.

What's the difference between SemVer and CalVer?

SemVer (Semantic Versioning) encodes the type of change in the version number. CalVer (Calendar Versioning) uses the date — e.g. 2026.06.02. Many large projects like Ubuntu and pip use CalVer. Neither is definitively better.

When should I release v1.0.0?

When you're ready to commit to a stable public API and backward compatibility. Staying in 0.x.y too long sends the wrong signal to users. 1.0.0 doesn't mean perfect — it means stable enough to depend on.

Does ChangelogAI support semantic versioning in the output?

Yes. Enter your version number in the version field and ChangelogAI formats it correctly in the output — e.g. ## [2.4.0] — 2026-06-02 for Keep a Changelog format.

Related Tools & Guides

Stop writing release notes by hand

Paste your commits. Get polished, publish-ready release notes in seconds. Completely free, no account needed.

Try ChangelogAI Free →