What’s included in Umbraco 9 Beta
I’m thrilled to say that it is actually easier to list what is not in the beta release compared to what is. This is because we are finally at a stage where we consider Umbraco 9 to be feature complete - all features and functionality available in Umbraco 8.13 are available in Umbraco 9 and migrated to the latest versions of Microsoft’s tech stack.
We have a single area that we know does still not support cross-platform execution, the search functionality through Examine, but it should still work on Windows.
In this blog post, I’ll highlight some of the changes compared to Umbraco 8 and then of course encourage you to take this feature-complete beta version for a spin and provide us with feedback. And if you’re curious but not quite sure what to do, how to test, etc. - fear not, you’re not alone and together with the community, we’ve planned helpful Umbraco 9 beta “learn-a-thons” to get you going - more on those later. First, let’s see what’s new:
Framework updated from .NET Framework 4.7.2 to .NET 5
The main goal of Umbraco 9 was to be executable on Microsoft's latest version of .NET. To make this happen, it required a lot of changes, several of which are listed below. Most APIs that come with .NET Framework 4.7.2 are part of .NET Standard, so we can continue using them, but not all APIs are available and some have changed, so we had to rewrite code, to achieve the goal.
Web-framework updated from ASP.NET 4 to ASP.NET Core 5
The most significant requirement for .NET 5, is to also run on the new web framework named ASP.NET Core.
This web framework is completely rewritten. Even though the main MVC pattern is very similar to the one from ASP.NET, it contains many changes under the hood.
Dependency injection (DI) is a first-class citizen, and to adopt the new web framework, we were required to adjust DI everywhere in our codebase too. We also decided to adopt the logging abstractions available in the new framework instead of having our own.
The last significant requirement to use the new web framework was to update the way we configure the application. Here we have also adopted the standardized abstractions provided as part of the new web framework.
User and Member authentication updated to ASP.NET Core Identity
The two types of authentication we know from backoffice, users and website members, have been updated from ASP.NET Identity and Membership Providers, respectively, to using ASP.NET Core Identity for both. The changes are most significant for members, but they are now implemented with the same technology, which will make maintenance easier in the future. And furthermore, a lot of code can be reused between the two concepts.
Third-party dependencies updated or replaced
Umbraco had a couple of third-party dependencies that were not developed for .NET (Core) and the libraries are only in support mode.
We also had lots of other third-party dependencies that could be made compatible with .NET 5 by just updating them to the latest versions.
Static events are replaced by a new Notification pattern
We have replaced the static events raised by Umbraco with a new Notification pattern. This new pattern makes it possible to handle asynchronous notifications and makes dependency injection easier. Furthermore, these are now fully handled by the dependency injection container and are not tightly coupled to specific implementations like static events.
The installation process of Umbraco also had to change, due to new limitations in NuGet. Instead of installing the Umbraco package into an empty web project, it is now possible to use a new concept called dotnet new templates. These templates need to be installed using NuGet, but can then be used from both CLI, Visual Studio and Rider. More information about how to install Umbraco in the How to get started section below.
Who is the beta release relevant for?
You, possibly. As we consider Umbraco 9 feature complete, this release is also relevant to more people. But note that it is still just a beta release, so expect we will find issues that need to be fixed before the final release and we do not recommend having websites in production running on this release.
Help us by testing/playing around
The more people testing out the prereleases the better. So we appreciate all testing and especially edge cases that you have done in Umbraco previously. If you encounter any issues, please do raise an issue on the tracker - see below for more details. And if you’re unsure how to get started with testing, why not join the learn-a-thons - more on those in a minute ;)
Package developers - go on and start migrating
We also recommend package developers start migrating their packages to Umbraco 9 now. Packages are important for most Umbraco sites and the earlier these packages are available the more people can help to test both Umbraco and the packages, before the final releases.
If you have a project that does not require packages and that is targeted to go live after the release of Umbraco 9 (Q4), might not be available for the final release, we can recommend starting that project on the beta version.
Get familiar with Umbraco 9
With Umbraco running on a new framework, some things have been changed or updated to work with new conventions and requirements. We have tried to make the switch as seamless as possible, so Umbraco still feels like Umbraco. If you’re used to developing Umbraco on the old .NET framework, you might wonder what has changed and why? This blog post will give some of the answers but there are areas that can benefit from spending a bit more time diving into them. In order to facilitate this, we have planned 4 learn-a-thons in May, each with focus on a different topic. These will be hosted by Carole Logan, Microsoft and Umbraco MVP, and Emma Burstow, developer advocate at Umbraco HQ
“Join us as we explore the new Umbraco 9 beta from a developer's perspective. We'll soon be building our sites on .NET core & Umbraco (exciting!!) so let's have a look at building with the v9 beta to create websites, APIs, extend the backoffice and more. This won't be talks or a traditional workshop, we'll be learning together, screen sharing, hacking, etc. We'll have a focus each week on what we'll be targeting in our v9 journey. Join us to learn and share with the community, see you there!” - Carole Logan
We’re also holding webinars for Gold Partners and Umbraco MVPs, with more in-depth presentations and time for Q&A.
How to get started
We have added a full guide to how to get started with the beta release, but here you have a short summary.
First of all, please check the prerequisites list:
- .Net 5 SDK
- SQL connection string (MS SQL Server/Azure), unless you want to install using SQL CE (Compact Edition)
To use the new beta release, you will need to insert a custom NuGet feed to your sources. This can be done in a command prompt of your choice:
dotnet nuget add source "https://www.myget.org/F/umbracoprereleases/api/v3/index.json" -n "Umbraco Prereleases"
Once this feed is available as a NuGet source, you can install the new Umbraco dotnet template:
dotnet new -i Umbraco.Templates::9.0.0-beta001
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 favourite 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:
At this point, the project is ready to be executed:
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.
By default, Umbraco installs without SQL CE support, due to the Windows-only limitation. SQL CE can be added by creating the project with the following command:
dotnet new umbraco --UseSqlCe -n MyCustomUmbracoSolution
Changes since the last pre-release of Umbraco 9
Since the alpha 4 release of Umbraco 9, the main focus has been on event migration and member-related functionality. Furthermore, we have resolved a couple of bugs that were reported.
Members are now fully migrated with ASP.NET Core Identity and the public access restrictions are working using this new implementation. We now save a security stamp on the member, every time we update the member and rehash the password to a stronger algorithm on login if required to increase security.
The remaining static events are now all migrated to the new notification pattern. We also added some missing information to some of the notifications that were already migrated in alpha4.
Finally, we’ve also merged the latest changes from Umbraco 8 into Umbraco 9, so features in Umbraco 8.13 are available.
For a full overview of all changes take a look at the documentation. Speaking of documentation, you can now find a list of all the articles that have been verified and updated for Umbraco 9.
Known issues in the Beta release
While using the beta beware of the following known issues.
- When the Umbraco solution is installed, a restart is required. As it is only possible to stop the application and not restart it, we need some functionality in front to handle the restart. IIS/IIS express/Nginx can be used to boot the application if it is not running on a request and start the process again.
- Search indexes from Examine can only be used on Windows.
How to provide feedback
These are all known issues and missing parts, meaning you don’t need to report these. We try to keep the list of known issues up-to-date in the Umbraco .NET Core documentation. If you find other issues that are not already reported, please report them on the GitHub tracker by following the link or selecting “🌟 .Net Core Bug Report” when creating a new issue.
Even though this release is considered feature complete, it is unrealistic to expect there won't come more changes.
We plan to make new beta versions when bugs are fixed or other interesting features are available. Our first priority is to fix reported issues, and we plan to release more beta releases as issues are fixed.This will allow you to continuously keep up with the progress whether you’re migrating packages, planning for new projects or just generally interested in the progress on the project. For those that want to stay on the bleeding edge we also have nightly builds available.
The next feature we will look into is to update examine, so it has cross-platform support.
We will also be focusing on getting our own packages, Umbraco Forms and Umbraco Deploy, ready for the release candidate. It is highly likely that we discover some areas that need improvement, while migrating these packages to run on Umbraco 9.
Finally, we will of course continue to merge new features from Umbraco 8 into Umbraco 9.
All of this leads up to the release candidate for Umbraco 9, which is targeted for release in Q2, 2021.
Community contributions to Umbraco 9
Umbraco 9 has been underway for quite some time and luckily we had some significant contributions from community members.
First of all, our Unicore team has contributed across a number of crucial areas such as discussions, advising, coding and testing the Alpha. Huge thanks to Emma, Benjamin, Steve and Simone. Also thanks to Andy, who did massive contributions before he started working at HQ.
Since we started migrating Umbraco to .NET (Core) we have had contributions for this next major version from Scott Brady, Ollie P, Cyberdot, Paul Johnson, James Jackson-South, Anthony Dang and Kenn Jacobsen.
We also had lots of indirect contributions, from all the people contributing to Umbraco 8, with contributions that will all be part of Umbraco 9.
🙌 HIGH FIVE YOU ROCK to everyone who has contributed so far and thanks to everyone who gives the beta release a spin and reports bugs - your help and feedback is a massive help as we move closer to the next major release of Umbraco.