Umbraco

Moving to Semantic versioning

Filip Bech-Larsen
Written by Filip Bech-Larsen

Today we are announcing another step towards making our release-process more predictable – from the .NET Core version of Umbraco, we are moving to “proper” semantic versioning.

Semantic versioning is a tried and tested industry standard for software versioning. The overall idea is that given a version number major.minor.patch, we will increment the

  • MAJOR version when there are breaking/incompatible API changes
  • MINOR version when there is added functionality/features in a backwards-compatible manner
  • PATCH version when there are backwards-compatible bug fixes

(from semver.org)

This means that when you see the version number of a new Umbraco release, you immediately know what to expect from it; when to pay close attention to breaking changes and when it will be harmless to update.

New release cadence for major versions

Earlier we announced that we will be releasing minor-versions every 6 weeks. After the .NET core version of Umbraco, two times pr. year, the scheduled minor version will instead be a new major version. This means that we will only introduce incompatible versions two times pr. Year. We believe this is an appropriate cadence, as we want everyone to continually upgrade (and we are aware that work can be required) but also need this ability in order to advance the software in the best possible way, without creating technical debt.

 

 

You can think of future major-releases of Umbraco as far less obstructive than previous major-versions have been, but potentially a little more obstructive than previous minors. It is our intention that an upgrade-path will be easy and available for all. 

Deprecating things 

Along with this change, we will also state our formal deprecation policy. Going forward when we need to remove from the public API, we will release a minor version with the deprecation in it, and keep it around for the next major as well. (So announced deprecation in 3.2.0 means it may no longer be available in 5.0.0).

This is a big change, and you probably have unanswered questions. Let us try to answer some of them beneath – if you still have questions, please reach out on product@umbraco.com or to me directly on Twitter.

Will you start over from 1.0.0 then?

Yes. The .NET Core release of Umbraco is going to be a new package and startover from 1.x. Current alpha is called 0.5.0 for the same reason. Until then, we will stay on 8.x and release minors every 6 weeks, and patches when necessary.

Updated: No, after community feedback and careful consideration we've decided to continue from the current version (v8). So the next major release will be Umbraco 9.

What if I don’t want to update all the majors

Every 2 years, we intend to mark a major version as Long Term Support. This means it will continue to receive patches for 27 months after its release. Hence, there will be a 3-month overlap after the next LTS is released. All other major-version only receive patches for 9 months after release.

How hard will major upgrades be?

We still aim at making as few breaking changes as possible, and to provide migrations when possible. There will be a migration path from 8.x.x to the .Net core version (new NuGet package starting from 1.0.0), but because of the size and scope of that migration, you can expect that to be a bigger task. Future migrations will not be that big.

What is and is not considered a breaking change

We will follow SemVer 2.0. This means that incompatible changes to the “public API” of Umbraco is considered breaking and requires a new major version. Internal and dependency-changes, are not considered breaking and do not require a new major version. What exactly the “public api” is will be determined before the final release. 

What about the frontend

We will keep the existing definition of what a breaking change is for the backoffice for the time being. We want to eventually change that also. Look forward to talking about the future of backoffice at a later time.

When is Umbraco 9 coming?

With semantic versioning wan’t to move away from users talking about version numbers, and you shouldn’t think of the number as a marketing-gimmick anymore. Rather, the major version number will be a useful indicator of what you can expect from the release.

Updated: We still aim for releasing a beta version of the .NET core version of Umbraco in Q1 of 2021 and the public release (Umbraco 9.0.0) in Q3.

If you really want to know when 9.0 is coming, with two major releases per year, it should be out in 2025 if you do the math... 😉

What does this mean for automatic cloud updates

We intend to enable automatic updates for minors as well alongside the .NET Core release. Look out for a formal announcement on that as we get closer.

Are there no exceptions?

A possible exception to this major-cadence would be if we encountered a security-issue with a high enough risk and where the fix is a breaking change. In that case we will fix it and release a new major as soon as possible). In such a case, the unscheduled major-release won’t include any other breaking changes.