Related story
Umbraco Product Update - April 28, 2022
New releases for both Umbraco Forms and Deploy are out, Umbraco 9.5 is just around the corner, and so is the release candidate for Umbraco 10. Letâs get to it đ
UPDATE 2022-06-08: Umbraco 10 RC5 is now available, additional fixes and improvements can be found in the Umbraco 10 release notes.
Overview:
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.
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.
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.
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.
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.
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.
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.
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.
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.Â
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.
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.Â
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.
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.Â
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.Â
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.
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.
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.
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 đ