How software is versioned

What does a version number actually look like across the software world, and how much of it writes one the way SemVer says to?

82%

of products write versions SemVer would accept, across 1,250 with enough releases to have a habit.

52%

of readable version strings open with a v. Half overall, and split sharply by channel.

26%

of releases carry no version at all, out of 36,483 in the catalog.

A version number is the one part of a release every reader sees. This page reads all 26,832 of them the catalog holds through one grammar and reports what they look like: how many numbers, whether SemVer would accept the string, who writes the v, and where a version is missing altogether. It measures spelling. What a vendor promises when a number goes up is a different question, and one this corpus cannot see.

Three numbers, and mostly the way SemVer spells them

Of the versions this catalog can read as numbers, 85.2% are three components long, and 81.2% are strings SemVer 2.0.0 would accept as they stand: three integers, no leading zero, an optional tail. Counted per product instead, so that a project tagging nightly counts once, the SemVer-shaped share is 82.5%. Whatever vendors say about their versioning policy, this is the spelling they have settled on. 15.9% of the SemVer-shaped strings carry a prerelease or build tail; the rest are the bare three numbers.

Recognized versions by how many dot-separated numbers they lead with. Five stands for five or more.
one component0.1%31/24,494
two components7.6%1,873/24,494
three components85.2%20,859/24,494
four components7.0%1,708/24,494
five or more0.1%23/24,494

Every version string in the catalog, by the grammar it is written in. Releases are a share of all versioned releases; products are the vendors whose releases are mostly written this way, of those with at least 5 the reader recognizes. Examples are the newest releases in each bucket and link to the release counted.

SemVer-shaped is a fact about the string, not about the project. A build number written as three dot-separated integers passes the same test as a library that documents every breaking change, and the two are counted together here because the corpus cannot tell them apart.

The channel is a grammar of its own

Where a release is published decides much of how its version is written, because most channels have rules of their own. Package registries validate a version before they accept it, and they sit at 96.1% SemVer-shaped; releases tagged on GitHub, where the string is whatever the maintainer typed, sit at 86.1%. At the other end, Steam publishes patch notes with no version field at all: 100.0% of the releases tracked from it carry none. A vendor blog sits in between: a headline names a version when the writer chose to put one in it, and 57.2% of the releases read from feeds did not.

SemVer-shaped versions by the channel the release was read from, as a share of that channel's recognized versions. Channels with fewer than 100 releases, or with no readable versions at all, are not ranked. The tick marks the corpus as a whole.
registry96.1%926/964
gitlab91.2%124/136
github86.1%15,022/17,444
sparkle80.0%188/235
appstore77.1%758/983
feed73.4%1,320/1,798
scrape67.9%1,042/1,535
jetbrains62.7%198/316
versions59.1%162/274
play31.0%31/100
adobe28.4%21/74
riot3.1%12/392

By category the spread runs from AI at 98.5% to Games at 10.4%. Underneath the ranking, developer-facing software clusters at the top and the categories where a version is printed for an end user rather than parsed by a tool sit lower. A two-part browser version or a four-part build is a perfectly good version; SemVer simply has no grammar for it. One category barely versions at all: Games publishes 93.3% of its releases with no version.

SemVer-shaped versions by product category, as a share of the category's recognized versions. Categories with fewer than 100 releases are not ranked. The tick marks the corpus as a whole.
AI98.5%3,337/3,387
Frameworks & Libraries96.2%3,754/3,902
Languages & Runtimes91.2%309/339
Developer Tools89.4%3,975/4,447
Infrastructure & DevOps87.4%1,860/2,129
Security & Privacy80.8%954/1,181
Creative Tools80.1%478/597
System Utilities78.6%857/1,091
Databases & Data75.9%802/1,056
Lifestyle & Apps75.4%338/448
Communication72.1%961/1,333
Media66.3%532/803
Operating Systems64.6%332/514
Firmware62.1%82/132
Drivers60.0%60/100
Gaming Tools55.6%258/464
Productivity54.0%888/1,644
Browsers16.2%69/426
Games10.4%52/501

The v is a GitHub habit

Whether a version starts with a v gets argued about more than it matters. Across the catalog, 51.6% of readable version strings open with one, and 53.7% of products write it more often than not. That is two populations averaged together, not a field of undecided vendors. On GitHub, where the version is the tag the maintainer pushed, 69.9% lead with a v. On nine channels — registry, sparkle, appstore, scrape, jetbrains, versions, play, adobe and riot — not a single version does. Some of those are stores and registries that normalize the string before anyone reads it. The rest are vendors’ own release-notes pages, where the number is written into prose and nobody types a v.

Versions opening with v or V, by the channel the release was read from, as a share of that channel's recognized versions. Channels with fewer than 100 releases are not ranked.
registry0.0%0/964
gitlab28.7%39/136
github69.9%12,188/17,444
sparkle0.0%0/235
appstore0.0%0/983
feed23.0%413/1,798
scrape0.0%0/1,535
jetbrains0.0%0/316
versions0.0%0/274
play0.0%0/100
adobe0.0%0/74
riot0.0%0/392

The v is a property of Git tags more than a convention. It appears where the tag is the version and disappears wherever a platform sits between the maintainer and the reader.

About one version in 12 is a date

Calendar versioning has its advocates, and it is visible here without being common: 8.3% of readable versions, from 78 products, either open with a four-digit year or carry a zero-padded component like .09 that only a month explains. 1,534 do the first and 1,231 the second, with some doing both. That figure is a floor: a two-digit year with no padding, like 26.2, cannot be told from a major version in the twenties, so those are counted as plain numbers and the true share is somewhat higher.

When the tag is a name

8.7% of the version strings vendors publish are not numbers at all by the reading used here, and 61 products write most of theirs this way. The examples show the shapes: a rolling nightly or preview tag with no number in it, a package name in front of the number because the repository holds several, a branch, a channel or a language in front of it, a date with a commit hash. Each one is a version to the people who wrote it and a name to any tool that has to sort it.

They are counted and left in the denominators on purpose. A report that dropped whatever its reader could not parse would be measuring the reader rather than the vendors.

How this is measured, and how to read it

  • Grammar is not policy. A string is SemVer-shaped when SemVer 2.0.0 would accept it: three integers without a leading zero, then an optional -prerelease and +build. Nothing here checks whether a bump meant what SemVer says it should. A vendor can be SemVer-shaped and break compatibility in a patch, or write four numbers and never break anything.
  • The string is read as the channel exposed it. Registries and app stores normalize a version before publishing it, so a v that a maintainer typed never reaches them. A version read from a blog headline is taken only when it follows the product name, so a feed that buries the number mid-sentence counts as versionless here. Steam has no version field and this catalog does not guess one from a headline. Each of those is a property of the channel as much as of the vendor, and the channel table is where to read it.
  • Releases and products answer different questions. A project that tags every night contributes hundreds of rows; one that ships twice a year contributes two. The release figures are what a reader of changelogs actually meets; the product figures are the vendors, each counted once, and a product needs at least 5 readable versions and a majority grammar among them to be counted at all.
  • The catalog leans on GitHub. 56% of the products here are tracked from a GitHub release page, so the overall figures inherit GitHub habits, the v most of all. The channel table corrects for that.
  • The date count is a floor. Only a four-digit year or a zero-padded component is read as a date. A version like 26.2 is either a year or a major and the string cannot say which, so it is counted as a plain number.
  • The catalog is not the world. These are the products What’s New tracks, which skews towards software that publishes a changelog at all, and towards the parts of the industry that publish in English on the open web.

Recomputed every week. Every figure comes from the catalog at build time rather than being typed in.

The companions to this page are the release note clarity gap, which asks what a release says once it has a number, and when software ships, which asks when. Declarative Changelogs turns the patterns in all three into a practical proposal for clearer release communication.