Releasing Image Hotspot 17.0.0
A couple of things had been bothering me about the Image Hotspot package for a while. The image sometimes failed to appear in the editor due to a race condition, and the hotspot didn’t work at all inside block editors. Version 17.0.0 fixes both of those, and picks up a few other improvements along the way.
What’s new
Block editor support. Previously the editor only resolved the image property from the document workspace context, which meant it broke when the hotspot was placed inside a Block List or Block Grid element. It now consumes UMB_PROPERTY_DATASET_CONTEXT first (which covers block items), then falls back to the parent dataset context, then the document workspace, and finally walks the document tree recursively until it finds a match.
Race condition fix. When the image property value changed quickly, or when multiple contexts resolved in quick succession, you could end up with the wrong image or no image at all. The load logic now uses a generation counter: each new load attempt increments the counter, and any async result that arrives after a newer attempt has started is simply discarded.
UUI components throughout. The editor UI now uses uui-box, uui-tag, and uui-table wherever it makes sense, rather than bare HTML elements. Previously, if the image property alias wasn’t configured correctly, the editor would just render broken with no indication of why. It now shows a proper warning with a collapsible debug table that lists exactly where it looked and what it found.


Localization in 29 languages. I asked my AI agent to find all hardcoded strings in the UI and add proper localization for them. It replaced them with <umb-localize> and generated locale files for all languages that ship with Umbraco. A task that would have taken an afternoon of copy-pasting, done in minutes.
A new versioning scheme
The package has switched from rolling SemVer to an Umbraco-based scheme: [UmbracoMajor].[PackageMajor].[PackageMinor].
So 17.0.0 means: targets Umbraco 17, first major release for that version, no minor changes yet.
The old scheme (0.1.0, 0.2.0, 0.3.0) worked fine until I needed to remember which version supported which Umbraco. I never could. Browsing NuGet for a compatible version meant checking the package description or release notes rather than just reading the number. The new scheme makes the minimum Umbraco dependency obvious at a glance, both when installing and when planning an Umbraco major upgrade.
Other community packages do the same. ManifestPeek and SimpleWorkspaceViews both ship at 17.0.0 for Umbraco 17, and it makes sense to me.
Note: This versioning scheme is not standard SemVer. If your tooling enforces strict SemVer, the major version bump on every Umbraco upgrade may look alarming. It just means “this release targets a new Umbraco major”. Which to me is also quite breaking, and in need of a major version bump.
Installing
dotnet add package Umbraco.Community.ImageHotspot
The package is available on NuGet and listed on the Umbraco Marketplace. Source is on GitHub.
Final Thoughts
The block editor fix and the race condition fix were the main reasons for this release. Everything else came along for the ride once I was in there. The localization in particular is the kind of thing that’s easy to skip when you’re building a small package. It feels disproportionate to the effort, but with AI doing the translation work, there’s not much reason not to.