Umbraco

Umbraco 10 Release Candidate

Read all about the upcoming major release of Umbraco CMS

Bjarke Berg
Written by Bjarke Berg

Umbraco 10 is feature-complete and ready for testing 🎉 The final release is expected mid-June and comes with long-term support (LTS). There’s also support for .NET 6, ASP.NET Core 6, C# 10, and a whole lot more. We hope you’ll take the Umbraco 10 release candidate for a spin 👏

UPDATE 2022-06-08: Umbraco 10 RC5 is now available, additional fixes and improvements can be found in the Umbraco 10 release notes.

Overview:

What’s new in Umbraco 10

Due to our new release cadence with shorter time between majors, the changes from Umbraco 9 to 10 are limited compared to earlier major releases. The aim is to make it easier to keep up-to-date and allow for new features and framework updates that will really delight developers.

You can see the entire list of features, improvements and breaking changes in the Umbraco 10 release notes.

.NET 6 LTS and ASP.NET Core 6

Umbraco 10 is built on Microsoft’s latest versions of ASP.NET Core and .NET, version 6, which is also an LTS version. As previously announced we’re following both the release cadence and support level for .NET releases, so, Umbraco 10 is also LTS. 

The new .NET version brings new low-level performance improvements and other cool things and the new version of the web framework adds a few cool features but mainly takes advantage of the new things available from .NET 6 .

Building on top of .NET 6 enables you to use the latest version of the C# programming language. This version brings some cool features that can help make your codebase more maintainable.

Most notable are file scoped namespaces and global using statements.

Improved cross-platform support

Umbraco 10 replaces support for SQL CE with SQLite. This was a requirement to fully support the latest version of .NET.

SQLite is the most used database engine in the world and runs natively as an embedded database on both Windows, Linux, and macOS. SQLite has the limitation that it only supports one writer at a time and is therefore not considered an alternative for SQL Server for production but serves well as a development database replacing SQL CE.

An illustration of a penguin holding an apple with a bite taken out of it

On Linux and macOS SQLite massively simplifies the setup required to develop locally with Umbraco by keeping the simple setup known from SQL CE and LocalDB Windows.

New MainDom lock

Umbraco 10 also ships with a new MainDom lock, as system-wide named semaphores are not supported on Azure web apps, Linux and macOS. The new MainDom lock is based on the filesystem and can therefore be used as a default on all platforms. Umbraco 10 still supports the semaphore and SQL-based MainDom locks.

Nullable reference types

Prior to C# 8.0, all reference types were nullable. Since then it has been possible to opt-in to using a feature called Nullable reference types, but this feature is more powerful when the underlying framework and libraries are also supporting it. This is the case for .NET 6 and with Umbraco 10 has been enabled It should now be more clear when to expect null and not from the C# APIs. Also, this feature makes it clear when we do not expect null as input parameters.

Configuration reloads

The options pattern introduced in ASP.NET Core and Umbraco 9 supports reloading configuration values without rebooting Umbraco. Umbraco 10 takes advantage of this in more scenarios. E.g. the configurations that have health checks.

Not all configurations can be changed without reloading. Those used to set up Umbraco still need a reboot. E.g. the URL to backoffice, the URL to media, etc.

Distributed Locking

Umbraco has used a distributed lock since Umbraco 8, by using the database. We have introduced a IDistributedLockingMechanism abstraction and decoupled it from the scope. Umbraco ships by default with two different implementations. One for SqlServer and another for SQLite.

Updated dependencies

Umbraco 10 updates all third-party dependencies.  The most notable are ImageSharp which is updated to version 2, so a cool feature like WebP support now becomes available.

Also, Examine has been updated to version 3, running on a newer version of the underlying Lucene.NET.

NPoco is also updated to version 5, so potential patches and minor releases can be introduced later.

The Backoffice has seen a few updates with Umbraco 10 as well. AngularJS has been patched from 1.8.0 to 1.8.3 and the Diff library from version 3.5 to 5. 

Breaking Changes

In general, you can expect some changes in constructors. Most of these are not expected to be a problem as the types should be created using the dependency injection container.

We also moved some classes to other assemblies that are referenced by the old parent assembly, while keeping the namespace. This will require rebuilding custom code such as Umbraco packages.

The updated dependencies can have breaking changes that you need to be aware of if you use APIs from these dependencies in your project.
The interesting dependencies are most likely:

Be aware of a potential breaking change for package developers. The Diff library, which has been updated from version 3 to 5 and has renamed its globally available API from “JsDiff” to “Diff”.

Furthermore, we have added a short description of breaking changes on the PRs listed in the release, not on Our.Umbraco.

Who is the release candidate relevant for?

You, most likely 😉 We consider Umbraco 10 feature-complete and ready for testing and all feedback is relevant at this stage. There will likely be further RCs released as issues are raised and addressed. HQ packages (Forms and Deploy) will be available within the next few weeks, and we’ll hopefully see community packages getting ready as well to allow for more testing scenarios. 

Real projects

Do note that it is still just a release candidate and we expect to find issues that need to be fixed before the final release. We do not recommend running live Umbraco 10 sites in production on the release candidates. 

If you have a project that is targeted to go live after the final release of Umbraco 10.0.0, we recommend starting that project on the release candidate. The final release will be available in mid-June.

Help us by testing/playing around

The more people building projects and testing out the release candidate the better. We appreciate all testing and common use cases that you have done with Umbraco previously. If you encounter any issues, please do raise an issue on the tracker - see below for more details. 

Package developers - Make your packages available

We encourage all package developers to update their packages to Umbraco 10. Compared to earlier major releases the effort required to update should be a lot smaller than usual. Some packages might just require updating the reference to Umbraco and the .NET version.

The introduction of SQLite as the new embedded database might require some extra work in order to support, just like it was the case with SQL CE, but that depends on how (and if) your package is using the database layer. We hope as many as possible can add support for SQLite for Umbraco 10 or later versions. 

How to get started

Like release candidates for minor versions, this release candidate is available on NuGet.

First of all, please note the new prerequisites. .NET SDK 6.0.202.

To use the new release candidate you can install the new Umbraco dotnet template:

dotnet new -i Umbraco.Templates::10.0.0-rc5

Now that the Umbraco template is available, you can create a new empty Umbraco project:

dotnet new umbraco -n MyCustomUmbracoSolution

This creates a new project with the name: MyCustomUmbracoSolution. You can now open the newly created project in your favorite IDE (Integrated Development Environment) or continue using the CLI (Command Line Interface)  commands.

In CLI the project can be built by navigating to the newly created folder and running the build command:

cd MyCustomUmbracoSolution
dotnet build

At this point, the project is ready to be executed:

dotnet run

This will boot the project, and write the log to the console. The website is now running on the Kestrel server, it will be available on the ports written in the console.

What to test

The new features in Umbraco 10 really touch every corner of the codebase. Therefore all testing of Umbraco 10 RC is valuable.

Especially testing out using SQLite as the database will be valuable, as all SQL queries need to return the expected results. SQLite will be the default option when running the installer in order to ensure a better cross-platform experience. All the other options you know from previous versions are readily available except for SQL CE. 

Also, the introduction of nullable reference types has touched almost all C# APIs. Therefore updating existing projects to Umbraco 10 RC is valuable so we can identify APIs with potentially wrong `null` indications.

How to provide feedback

If you find issues that are not already reported, please report them on the GitHub tracker by following the link or selecting “🐛 Bug Report” when creating a new issue.

What’s next?

Even though this release is considered feature complete, it is unrealistic to expect there won't be more changes to come, although at this stage they should be minor bug fixes based on feedback and testing.

We plan to make new release candidate versions available as bugs are fixed and you can always try out the latest nightly build if you want to test fixes made since the RC.

UPDATE 2022-06-08: Umbraco 10 RC5 is now available, additional fixes and improvements can be found in the Umbraco 10 release notes.

Besides fixing potential bugs in the CMS we will also focus on making HQ Packages such as Umbraco Forms and Deploy available. We’re also focusing on ensuring Umbraco 10 is available on Umbraco Cloud when released as well as continuing the efforts to document Umbraco 10 with the Documentation Curators. 

As we do not expect more versions of Umbraco 9, all feature additions from the community will be targeted to either Umbraco 10.1 or Umbraco 11.

All of this leads up to the final release for Umbraco 10, which is targeted for release on June 16, 2022.

Now, go on and take the Umbraco 10 Release Candidate for a spin - we look forward to hearing your feedback 🙌

Umbraco community highfive graphics