Back to Blogs

Updating an Umbraco Package for v17 with Claude Code

Kevin Triggle
Author headshot

The challenge

A few months ago I built CountThings, a small Umbraco backoffice dashboard that does exactly what it says on the tin: it counts content, media, users, schema and forms.

Nothing fancy, just a quick snapshot of what’s inside an Umbraco instance — something we’ve found genuinely useful during site assessments before take-on, upgrade or migration.

ct-ss1.png

It was compatible with v13 > v16. Umbraco 17 has now landed as the new LTS release, with support for .NET 10, so it was time to update the package.

I hadn’t touched the codebase in a while and being very new to building packages I’d forgotten half of how the build, test and publish pipeline worked, and I wasn’t sure what breaking changes v17 might introduce. So I paired up with Claude Code directly inside Visual Studio to see how much friction it could remove from the process.

Screenshot 2026-02-17 163306.png

The approach 

1. Re‑orienting on the codebase 

Claude explored the solution, summarised the architecture, and reminded me how the multi‑targeting in my setup works: 

  • .NET 8 for Umbraco 13/14

  • .NET 9 for Umbraco 15/16 

  • .NET 10 for Umbraco 17 

Each target compiles a separate DLL, and NuGet selects the right one at install time.

Screenshot 2026-02-17 163410.png

2. Checking Umbraco 17 breaking changes

It dug through the Umbraco 17 docs to see what might break and good news: the backend controller code compiled cleanly against v17 with no changes. The heavy use of reflection I’d built in for cross‑version compatibility paid off and services that changed between versions were already handled gracefully.

Screenshot 2026-02-17 163549.png

3. The one real fix

The only change needed was on the frontend. The dashboard extension manifest now requires an explicit elementName property.

Earlier Umbraco versions inferred this automatically from the JavaScript web component, but v17 requires it to be declared. A one-line change, but exactly the kind of thing that can eat an afternoon if you don’t know where to look.

Screenshot 2026-02-17 163914.png

4. Tidying up

  • Removed a redundant package reference that .NET 10 is stricter about

  • Bumped the version to 1.2.0

  • Updated the README and marketplace metadata

Screenshot 2026-02-17 163946.png

Testing

Supporting Umbraco 13 through 17 means testing across:

  • Three .NET runtimes

  • Two fundamentally different backoffice architectures

    • AngularJS (v13)

    • Bellissima web components (v14+)

I set up local test instances for each version using SQLite databases, and Claude wrote a small bash script to rebuild the package, uninstall any previous versions of the package from each of the test sites and then reinstall it across all five sites in one go ready for testing.

testing.png

Much faster feedback loop. Everything passed:

  • No regressions on older versions

  • Dashboard loads correctly on v17

  • Counts behave as expected

Verdict?

What I actually found useful about working this way

Lets not pretend that AI is the answer to everything. I think everyone is getting a bit sick of hearing that, but in certain scenarios it's a huge benefit. Having Claude directly embedded into the IDE with access to the code was genuinely useful for:

  • Getting back up to speed on a codebase I hadn’t touched in months

  • Researching breaking changes across Umbraco versions without trawling docs

  • Catching small but critical details like the missing elementName

  • Automating the boring, repetitive bits (like multi‑site reinstalls)

The whole process from “I should update this for v17” to updated and published on NuGet took a fraction of the time it normally would.

Count Things v1.2.0 is live now, supporting Umbraco 13 → 17.

View the package on the Nuget store

View the package on Umbraco Marketplace

Author headshot
Kevin Triggle
Table of contents

    Read time: minutes

    Share

    Share