Umbraco

Putting Umbraco 9 to the test: Carole Logan

Let Carole help you get started with Umbraco 9

Carole Rennie Logan
Written by Carole Rennie Logan

What's it actually like to develop in Umbraco 9? If you've been wondering this, you're in luck because today we’ve got another talented Umbracian from the community who’d like to share her experience with Umbraco 9 with you. And Carole has indeed done some thorough testing - H5YR! So if you want to know what it’s like to develop in Umbraco 9 or how best to get started, Carole is the expert and is here to give you some friendly and very useful guidance and tips: 

After many RFCs, alpha releases and release candidates, Umbraco 9 is almost here! With this exciting news, it can bring some questions: What can we expect as developers? What has changed? How can I get started? In this post, I hope to answer those questions, share useful learning resources and hopefully help more developers be v9 ready!

What’s changed?

This is a major version, meaning there are significant (breaking) changes expected, this gives a chance for significant change and improvement. So what has changed? Let’s have a look...

First of all, the good news is that when we log in to Umbraco it looks the same. It’s the same CMS we know and love! All features and bug fixes that have been added to CMS recently in Umbraco version 8 have also been updated in version 9 so from day 1 it’s like for like, feature-wise.

The major change in Umbraco 9 is a really important one for the future of the platform it is built upon, the migration from .NET Framework to .NET 5. As this is the route the .NET ecosystem has been going for the last few years, it’s great to be able to keep up with this while using Umbraco, we’ll get the latest features of .NET and C# while having confidence in the CMS we know. Many of the changes we will notice as developers in Umbraco v9 are actually changes in best practice between .NET Framework to .NET Core, this consistency will make life for .NET developers easier in the long run.

This move to .NET Core gives us many advantages, some of the key ones:

  • Developing on whatever operating system you like. I personally prefer Windows, but I have developer friends who are really looking forward to coding in .NET on a Mac (check out Warren Buckley’s tutorial here & Carl Sargunar's post here). You can even use online coding environments like GitHub codespaces.

  • If you write custom C# in your Umbraco solutions, you will now be able to make use of the latest features in the language in .NET 5, you can learn more here.

  • With the upgrade in framework, we get a performance boost. This is something that not only we as developers can benefit from but also our clients and users. Check out Shannon Deminick’s Codegarden talk about "Performance Tuning in v9" to learn more.

Warren Buckley has written a “What’s changed from Umbraco version 8 to 9?” blog that goes into full details.

How can developers get started?

In my opinion, the developer experience of creating a new Umbraco project has really improved in Umbraco 9. We can create a new Umbraco project from a dotnet template rather than the old way of creating a new empty MVC project and installing Umbraco. 

Firstly, you need to install the Umbraco template, see instructions here: https://our.umbraco.com/documentation/UmbracoNetCoreUpdates#steps-to-install-the-umbraco-dotnet-new-template 

Now it’s installed, there are 2 ways to use these templates:

Via IDE: Visual Studio

Now in Visual Studio, we have an “UmbracoProject” option when creating a new project. We can set any variables in here needed for set up, then the project is created and all the relevant packages are installed. We are ready to build and run! More info here: https://our.umbraco.com/Documentation/Fundamentals/Setup/Install/visual-studio 

Note: Make sure you have this preview feature set in Visual Studio for these templates to be available. 

Via CLI (command line interface)

For those of us who would rather use the command line, we can create, build and run our solution in these 3 commands… lovely!

  • dotnet new umbraco -n Umbracov9Project
  • cd Umbracov9Project
  • dotnet run (dotnet build is implicitly called by dotnet run)

This will start up the new Umbraco project and make it available in the browser to continue the install process. So much quicker to get started on a new project than previous versions. More info here: https://our.umbraco.com/Documentation/Fundamentals/Setup/Install/install-umbraco-with-templates 

What’s it like to develop in Umbraco 9?

From chatting to a few Umbraco developer friends, I know one big improvement for them is being able to more freely use their IDE of choice. Developers have been mostly limited to Visual Studio or Rider, but now building from the CLI is a lot easier, we can use the text editor or IDE we like! Making Umbraco more inclusive and friendly for developers to be the most productive can only be a good thing!

One of the first things folks will probably notice about our newly created v9 solution is there is no web.config! But this is where we keep all our settings, right?... now in .NET these are in AppSettings.json. Emma Garland has written a great article on this for 24DaysInUmbraco 2020 where she explains how she and the Unicore team updated Umbraco to use this new .NET way of working with configuration. One awesome developer feature now is we can get suggestions in IDE reminding us which configuration settings are available for Umbraco and what the options are for these variables. 

In Umbraco 9 we still have our friend Models Builder (yay!), but with a few changes. As per the point above, the configuration is now in the appsettings.json and the names are now changed to be a bit more friendly. Read more here: https://carole.dev/blog/umbraco-v9-models-builder/ 

Can we still extend Umbraco?

Yes! We can still add our custom code to our project to add custom functionality. 

For example, I often need to add custom API controllers to all the content to be accessed via API. We can do this in a very similar way to Umbraco version 8 by using UmbracoAPIController, see my blog post here on building, testing and documenting your custom APIs. Have a look at this example repo from Dennis Adolfi: https://github.com/Adolfi/UmbracoNineDemoSite, he has examples of Umbraco Render controllers as well as view components.

As the approach to building backoffice UIs has stayed the same from a JavaScript and HTML perspective, many of your backoffice extensions will be easily ported over to v9. 

Poornima Nayar has given a great overview of what’s changed between Umbraco 8 and 9 in backoffice dashboards here.

Check out this post by Sebastiaan Janssen on integrating hangfire into Umbraco 9, super useful & a great example of how we can extend Umbraco based on our project requirements.

Can I migrate from version 8 to 9?

As you can see from the above, there is quite a lot fundamentally changed about the structure of a project, where we store configuration, etc. Therefore a direct upgrade is not possible.

However, the database schema hasn’t changed between Umbraco version 8 and 9. Therefore, you can take a copy of your database and point a newly created Umbraco 9 project at it to get all your doctypes and content in your Umbraco 9 project! The rest of the tasks to port your project to Umbraco 9 will really depend on the scale and complexity of your project.

For example, if you use Nuget packages for specific .NET features or Umbraco extensions, you will need to find a .NET 5 compatible version for your Umbraco 9 project. However, you will likely be able to reuse a lot of your cshtml and C# code, with some adaptations for .NET Core ways of working.

Are there still Umbraco packages?

One of the strengths of Umbraco is its community of package developers who build extensions to provide more features beyond the core CMS. It’s been great to see the progress of Umbraco package developers and Umbraco HQ starting to build in Umbraco 9, check out Package Manifest podcast discussing this.

Some community favourites are already being developed for Umbraco 9 alongside the RCs. The following are already available or are being worked on:

Huge high fives to all these package developers who have been getting these all ready for Umbraco 9!

One important thing to note is how we can install packages has changed for Umbraco 9. This post explains how the standard approach for Umbraco 9 and beyond is via NuGet only: “The “Packages'' section in the backoffice will remain, but you won’t be able to install packages directly from here".

For many developers, this won’t be new at all as we have always had this option, but may need some adapting for users who utilise the other approaches at the moment.

What about hosting?

As per the .NET move from Framework to Core, Umbraco 9 will now be multiplatform, meaning it can be hosted anywhere. We can, of course still host via IIS, check out this video by Warren Buckley on hosting an Umbraco 9 site in IIS: https://www.youtube.com/watch?v=riO5EQKE0YY 

The community has been exploring alternative hosting methods too, Corné Hoskam has written this great post on running Umbraco 9 in Docker & Carl Sargunar wrote this cool post on running Umbraco on Raspberry Pi now that it can run on Linux!

From version 9, the Azure blob storage provider is now maintained by Umbraco HQ, we can install this package to utilise this functionality to store our media in Azure blob rather than in file directory:https://github.com/umbraco/Umbraco.Cloud.StorageProviders.AzureBlob 

Is there developer documentation available?

As with every project, documentation is key! There is a list of Umbraco 9 specific documentation here on Our Umbraco. It’s been great to see there has been a greater focus on documentation with this release than previous releases, the Umbraco HQ team has shared they are aiming for 80% of docs being ready by release. 

If you prefer to learn by watching others code rather than read docs:

Carole, will you be using Umbraco 9 for real projects?

I have already been using Umbraco 9 since the Alpha, through the Betas and RCs, mostly for R&D purposes and to stay up to date with the changes. Along with Emma Burstow and her colleagues at Umbraco HQ, we have hosted eight Umbraco 9 “learnathons” where we learned about and built things with Umbraco 9.

For me, this is really positive as the community has been building with version 9 well ahead of launch and our experience has been used to make Umbraco 9 better. I am personally really looking forward to using it on real projects soon.

What do you look forward to in the future with this new major release?

One of the things I am looking forward to in Umbraco 9 and beyond is a more steady release cadence, set timelines for major versions and Long Term Support (LTS) cycles that follow shortly behind the Microsoft .NET releases, see more info here: https://dotnet.microsoft.com/platform/support/policy/dotnet-core. This follows from the theme of aligning the approach to the .NET way of working and makes planning for major releases easier for Umbraco, developers and clients. (learn about the Umbraco release cadence and LTS here)

While this work to upgrade the underlying framework Umbraco is built upon has been happening, there have been lots of chats between Umbraco HQ and the community about making the front end of Umbraco more modern and maintainable. I am really looking forward to seeing the decisions made on this to build upon the great work in Umbraco 9.

As described in other answers, this is a really important release for the future of the CMS. I think the amount of community participation in the Alpha, Beta and RC releases as well as blogs, videos and documentation contributions, shows this is a big release everyone in the Umbraco ecosystem is excited for!

Author bio:

Carole is a Principal Engineer at contributing Gold Partners Equator, 5x Umbraco MVP and community meetup organiser. Together with Umbraco HQ’s Emma Burstow, she’s been co-hosting 8 learnathons for Umbraco 9 in order to help other community members and Gold Partner agencies getting started with Umbraco 9. Huge H5YR, Carole!

Carole Logan