Firmware Version Numbering

I want to take a moment and share how I approach Version Numbering.

Not long ago, a forum user questioned why I was adding major features to CLOCKstep:MULTI without increasing the Major version number.

First and foremost, I don't tie the use of either the Major or Minor version to a marketing strategy.  In my view, the decision to increment these numbers is driven by a certain logic that follows a specific set of technical changes.

I want users to have a measure of comfort in knowing what to expect and if an upgrade poses any technical ramifications.

To start, I use a pretty standard 3 part version number:  Major . Minor . Build.


You will always see this number advance in a new release, whether there are new features, enhancements or bug fixes.  Internally, I advance the Build number all the time as I check-in code.

Each Build number advancement is not always seen by the public, so if you don't see a Build number that falls between 0052 and 0059, that's perfectly normal.

The Build number is never reset, even if the Major and Minor numbers change.


You might think this number would advance when a new feature is added, and that may sometimes appear to be the case, but actually the Minor number will advance mainly on reorganization of internal Preset values.

When you install a new version where the Minor number has advanced, you can expect the update to spend a bit of extra time while it migrates data in EEPROM from one memory location to another.

This type of update is fully compatible with your usage of a prior minor version within the same Major version, and everything that you were doing with it before still functions as it did.  However, if you choose to "downgrade" back to a prior Minor version from this point, your stored presets may need to be reset.


The Major number is reserved only for breaking changes.  These are changes which will really impact your prior usage.

For instance, a feature may no longer be supported or its usage has been drastically changed.  A control command in the MIDI API may no longer be supported, or has been changed to something entirely different.  Something has changed making it so that you have to review how you were using the device before with some altered functionality.  It's a signal that you are entering a new "era" for the device that can no longer be considered entirely compatible with how you may have used it before.

Anytime the Major number advances, the Minor number is reset to 0.

Frequency of Number Changes

There is no standard rate at which changes will happen.  In fact, products that have a smaller scope, or have been well-thought out in advance and contain a good structure from the very start, may never have a Major version change.  This is actually a goal that I strive for, going back to the time when I developed software components for a living.  A bunch of Major number changes is a sure sign that I'm learning a lot of things I didn't know at the beginning!  Minor number changes can happen more frequently, and relates more to a kind of "house keeping" in the code and the memory.

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.