Umbraco

Umbraco 8.15 Release

Find out what you get with this brand new version of Umbraco

Filip Bech-Larsen
Written by Filip Bech-Larsen

Keep your hands inside the vehicle - Things are about to go fast 🏎 This new release brings a bunch of performance enhancements and improvements to resource usage to the CMS. You’ll also find updates to the Media Picker and Unattended Install features as well as the ability to link directly to dashboards in the backoffice. Umbraco 8.15 is indeed a worthwhile upgrade - Let’s take a look 👀

Overview:

Shannon, Warren and Rune from HQ go through some of the highlights Umbraco 8.15.

What’s new in Umbraco 8.15

We take a look at some of the highlights below but there's much more in the release, not least thanks to our friendly community. See the full list of features and fixes on the Umbraco 8.15 download page.

Reduced footprint

Umbraco has just gotten way faster. No less than 10 issues/fixes are performance-related and some of them are big changes and big improvements. It runs the gamut from optimizing how content is loaded in the Blocklist editor with fewer database calls, to improving memory allocation, startup time and cache optimization. All these things combined reduce the resource footprint of Umbraco CMS.

Faster to boot 👢

A lot of work has been done to optimize booting Umbraco up and both cold and warm booting has been improved. The changes relate to everything from cleaning up the boot events and timing to populating the cache lazily.

Block List editor performance enhancements

A number of optimizations have been done for the Block List editor. This is mainly targeting performance in the backoffice, ie. reducing the number of database calls.

Frontend cache optimisations

Querying content from the frontend caching layer has also been improved. These improvements will benefit all new projects based on 8.15+ (including Umbraco 9) but be aware that some of the new features are optional for projects upgrading from earlier versions. 

General improvements include optimizations to database indexes, more efficient SQL queries and adding string interning in a number of places to reduce memory allocation and speed up string comparison.

If you are upgrading to Umbraco 8.15 you can enable compression for serialized data by adding the following configuration key:

 

<add key="Umbraco.Web.PublishedCache.NuCache.Serializer" value="MsgPack"/>

This change helps reduce the size of the data and thereby the memory allocated for the cache layer. This is enabled by default on all new Umbraco 8.15 installations but off by default when upgrading. If you want to ensure the “old way” of serializing data is used you can force it by adding:

<add key="Umbraco.Web.PublishedCache.NuCache.Serializer" value="JSON"/>

How much faster?

All of these improvements help make Umbraco faster by using less memory, fewer requests and storing data more efficiently. It can be hard to quantify the gains as they depend very much on the amount of content in a given site as well as the implementation. We have done profiling on a number of the improvements which you can see here: https://github.com/umbraco/Umbraco-CMS/pull/8376 

Another huge benefit is that aside from being faster and using less memory, performance is also more consistent which makes it easier to profile, evaluate and optimize your own implementation.

 

 

You can also find a thorough walkthrough of the improvements in the blog post High Performance Umbraco 8.15 by community member Chad C who has helped immensely with ideas, contributions and a lot of time invested in the optimizations. HIGH FIVE YOU ROCK 🙌

Updates to the Media Picker

In Umbraco 8.14 a new Media picker was introduced, bringing a new UI and some great new features to both editors and developers. Unfortunately, the new media picker was not backwards compatible, which meant it could only be used for new implementations or you’d have to do considerable work in order to migrate to the new picker.

This has now been addressed in 8.15. You can switch the property editor from an old “mediapicker2” to “mediapicker3” and it should just work 🎉 The new Media Picker now supports stored data (picked media) in the old format (comma separated UDIs), so without the need to migrate/change existing data.

The returned model for front-end rendering (MediaWithCrops) is updated to be more compatible with existing front-end code in views. We can't provide 100% compatibility, but this should at least keep the required changes to a bare minimum. It’s also worth noting that the GetCropUrl() extension methods now also take the local crops into account (and fallback to the crops defined on the media item - if any), so there's no need to use GetLocalCropUrl() anymore. You can find details in the PR

Deep-linking to dashboards

It is now possible to deep-link to a specific dashboard in the backoffice, really helpful if you want to send a link guiding someone to information on a dashboard.

Click here for full-screen video.

This is done by adding a query parameter with the dashboard alias to the backoffice Url when a dashboard is shown. If you have multiple dashboards the parameter will update as you navigate them.

Default User for Unattended Installs

Unattended installs were added a while back to make it possible to install Umbraco without having to navigate the installer GUI. It was a well-received addition to the CMS but there was a drawback. You had to add a user subsequently to log in to the installation. Not a huge issue, if you know how to do it either via code or directly in the database. 

With Umbraco 8.15 this has been made easier by introducing new environment variables that you can set, in order for the user to be created (for example in your continuous integration setup):

 

Variable Name

unattendedName

unattendedEmail

unattendedPassword

 

Or, alternatively, you can create a JSON file that includes the values you want to set. The values can are read from the JSON file at the following location:

 /App_Data/unattended.user.json

Example content of the file:

{
    "name": "Jim Walsh",
    "email": "jw@umbraco.com",
    "password": "password12345"
}

The JSON file will be deleted after the unattended installation has run.

 

Community Contributions

Of the 39 bug fixes and feature additions in 8.15.0 a total of 23 of them have been contributed by the community, by 10 unique contributors.

While the number of 6 PRs from Chad might not sound like a lot, this is the result of months of work closely together with Shannon to get all the performance and memory improvements in there, thanks again Chad!! 🏅

We’re welcoming four brand new contributors who have made their first pull request for Umbraco-CMS, they’re marked with a star below. Welcome to the contributor club Lucas, iNETZO, Christian and Nikolaj! 🏆

 

Bjarne Fyrstenborg - 6 PRs

Chad - 6 PRs

Jan Skovgaard - 2 PRs

Patrick De Mooij - 2 PRs

Vlael Layug - 2 PRs

Russell - 1 PR

⭐ Lucas Michaelsen - 1 PR

⭐ iNETZO - 1 PR

⭐ Christian Tricarico - 1 PR

⭐ Nikolaj Brask-Nielsen - 1 PR

⭐ = First pull request to any Umbraco repository


As announced for the 8.14 release early June, we’re planting trees for each contributor to a minor release. So we’ve added another clump of trees to our plot for today’s 8.15.0 release to celebrate your contributions. 🌳🌲🌴

Umbraco 8.15 release Trees Planted

Breaking Changes

There are a few breaking changes in relation to the updates for the new Media picker. These should be minor and are mostly functional changes but can be good to be aware of if you’ve already implemented the new Media picker using Umbraco 8.14: 

  • MediaWithCrops model: no parameterless constructor and properties don't have a setter anymore
  • Removed ambiguous method: IHtmlString GetCropUrl(this UrlHelper urlHelper, ImageCropperValue imageCropperValue, string cropAlias, bool htmlEncode = true) (was also available as separate PR #10527)

Functional changes:

  • Local crops are merged with media crops when using the GetCropUrl() extension methods on MediaWithCrops
    • The GetLocalCropUrl() extension methods are now obsoleted because of this
  • The concrete implementation of MediaWithCrops model is now MediaWithCrops<T> and implements IPublishedContent
    • The MediaItem property is obsoleted, as it's now recommended to use the Content property (that is of a specific type when using the generic model)
  • Only configured crops are returned in the ImageCropperValue and MediaWithCrops models

See the original issue for more information.

Known Issues

Due to some new and updated dependencies introduced for the Reduced Footprint improvements it has been necessary to disable the Minor Upgrade feature on Umbraco Cloud projects. We will add it back as soon as possible but still have a bit of work in ensuring that the added dependencies do not cause issues. 

If you don’t want to wait, you can upgrade your installation manually but be aware of the added dependency for MessagePack. If you are using this already you might need to add assembly redirects.

How to get your hands on Umbraco 8.15

As always, from today, all new Umbraco Cloud projects will be running Umbraco 8.15. For all our Umbraco Cloud customers, as explained above, you will have to wait a bit before upgrading existing projects to 8.15 is enabled in the Umbraco Cloud portal.

Installation and release notes for Umbraco 8.15 can be found on Our: https://our.umbraco.com/contribute/releases/8x0

This release is also available from Nuget: https://www.nuget.org/packages/UmbracoCms/8.15.0