Umbraco

Umbraco 13 Release Candidate

Read all about the upcoming major release of Umbraco CMS

Lasse Fredslund
Written by Lasse Fredslund

Umbraco 13 - the next Long Term Supported version of our CMS - is now ready for testing. You can download the release candidate and try all the cool new features out - including an update of the underlying .NET framework to .NET 8 with C# 12, more headless initiatives and much more. Are you ready to take it for a spin? - We hope so. Let’s take a look at what’s in it.

.NET 8 and C# 12

.NET 8 will be released on November 14, so in our RC we’ve included the last release candidate of .NET 8. It includes improvements on the garbage collector to adjust the memory limit on the fly which will open up better and more flexible scaling which again can be turned into better performance and more sustainable hosting. There are also improvements to Serialization, JSON, and a whole lot more - including, of course, all the C# 12 features like Primary Constructors, Using Declarations, Field Interpolation in String Literals, and Lambda Improvements. Please test it out and have fun with all the new features 🙂

Minimal Hosting Model

Talking .NET, C#, and what comes out from Microsoft, we’ve now introduced the Minimal Hosting Model, which Microsoft introduced in .NET 6. This model merges the previous program.cs and startup.cs into one single program.cs file and simplifies the initiation of an application, but most importantly, this model is now also used for all Microsoft Tutorials and examples, which is why we’ve now introduced this model for Umbraco too. Our implementation is made backward compatible, so upgrading your projects shouldn’t be a problem, but going forward we’ll consider the old hosting model obsolete. Let us know if you run into any problems.

Webhooks

As part of our headless initiative, we now also have Webhooks, so you can inform third-party systems about events like publishing and unpublishing in the Umbraco CMS. We’ve added UI so that you can type in the URL you want to call (including potential custom headers) and choose one or more events on which you want the URL to be called. Under the hood, we’ll take care of executing, queuing, retrying, and logging. And you can easily extend the functionality by implementing your own webhooks. This functionality is aligned with the one you might already know from Heartcore.

Nested field limiting and nested field expansion

Update November 2, 2023: We didn't manage to finish the nested field limiting and nested field expansion in RC1. This functionality is expected to be introduced in RC2.

Speaking of internal alignment, we’ve also aligned with Umbraco Commerce Storefront API, as we’ve introduced nested field limiting and nested field expansion for the Content Delivery API. This is considered a V2 of the Content Delivery API, and we encourage you to play around with this and especially the new functionality, where you’ll now be able to limit and expand on multiple levels.

Breaking changes in the Media Delivery API

In 12.2 we introduced the Media Delivery API, however, we did it with a few compromises, as we couldn't introduce breaking changes in a minor. We've now amended these in V13. The changes include making a few classes internal and instead introducing a new public interface and some changed return values. If you want to update an existing solution, you can read the details here.

Dynamic Root

A few things that we’ve introduced for V13 are prerequisites for future functionality. That is the case for the Dynamic Root for the Multinode Treepicker, which is implemented as an alternative to the XPath expressions. This new approach has been introduced to prepare for lazy loaded content where we aim to introduce more efficient caching and memory management and thereby improve performance for sites with large amounts of content. As an added benefit, it will now also be way easier to set up a relative path for the Multinode Treepicker, but please test it out, and let us know what you think.

Blocks in the Rich Text Editor

In the RC you’ll also find the new opportunity for Blocks in the Rich Text Editor. This functionality was initiated by the deprecation of macros and a wish for an alternative to be used in some specific use cases where we currently don’t have good alternatives. But, as we plan for more block functionality - including global blocks as reusable content as described in this RFC - it hopefully also adds value in general to now also be able to show blocks in the RTE.

New Login Screen

As many of you know, we are currently working heavily on the New Backoffice (called Bellissima) where we are introducing new frontend technologies in the form of our Umbraco UI Library and more plain TypeScript with a bit of Lit. Most of this new UI is bound to a new management API, but we’ve seen our chance to sneak in this new technology in a new Login Screen. It has, of course, also got a new design, which we hope you’ll like.

Allow Concurrent Logins

To avoid a user accidentally logging in multiple times and to align with security by design principles, we've changed the default settings for Allow Concurrent Logins, so that it's by default set to false.

Updated NuGet Dependencies

Last but not least we have updated a bunch of NuGet dependencies. The most important might be ImageSharp which includes breaking changes.

Breaking changes

Besides the changes already mentioned around ImageSharp, the “Allow Concurrent Logins” setting, the New Login Screen, and the breaking changes in the Media Delivery API, you’ll find a few other breaking changes which you can find in more detail in the release note.

Known issues

As mentioned, we are currently running on a preview of .NET 8, but the version will of course be updated before the official release.

How to get started

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

First of all, please note that .NET SDK 8.0.0-rc.2 is a prerequisite.

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

dotnet new install Umbraco.Templates::13.0.0-rc1

Now that the Umbraco template is available, you can create a new Umbraco project using your favorite IDE (Integrated Development Environment) or continue using the CLI (Command Line Interface) commands:

dotnet new umbraco -n MyCustomUmbracoSolution

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, and it will be available on the ports written in the console.

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.

Besides fixing potential bugs in the CMS, we will focus on making HQ Packages such as Umbraco Commerce, Workflow, Forms, and Deploy available, and expects Release Candidates for these commercial products to be available shortly after today We’re also focusing on ensuring that Umbraco 13 is available on Umbraco Cloud when released and continuing the efforts to document Umbraco 13.

All of this leads to the public release of Umbraco 13, which is targeted for December 14, 2023.

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