Repository navigation
UUI 2.0 — New major version in development #1300
Pinned
Umbraco HQ Admin
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Summary
Announcing the development of a new major version of the Umbraco UI component library.
We have begun work on version 2.0 of the Umbraco UI library. The primary motivator for publishing a new major version of the UI library is to accommodate the changing styleguides for Umbraco-related products. This release also includes breaking changes to package structure, import paths, and runtime requirements.
The headline change is the refresh of the UI facade of components and changes to colors, borders, and more.
See this pull request for an explanation and visual changes: #1237
The biggest change to the code is an internal one: The consolidation of ~84 individual
@umbraco-ui/uui-*npm packages into a single@umbraco-ui/uuipackage. This simplifies installation, versioning, and dependency management for all consumers.For the most common use case — installing
@umbraco-ui/uuiand importing it through a bundler — the upgrade is straightforward:npm install @umbraco-ui/uui@latestandimport '@umbraco-ui/uui'continue to work as before. The breaking changes mainly affect consumers who imported individual@umbraco-ui/uui-*sub-packages, used removed components, or referenced the old CSS paths.Developers working on V1 will be able to upgrade easily — For the most part, you are probably using the UI library's components in your HTML. There will be no change to this - all components are still present and have the same names, except for the two deprecated components listed below.
Timeline
👉 The first UUI 2.0 prerelease is scheduled for March 2026
👉 The final release is expected in June 2026, aligning with Umbraco v18.
Changes
Umbraco CMS (users and developers)
No changes to usage within the Umbraco CMS. All component names remain the same, and all import paths remain. You will notice the refreshed visuals, and that's it.
For developers, you will import from:
Other consumers
If you already import the library through the UUI package, you only need to update the main stylesheet:
Breaking changes in UUI 2.0 for developers:
@umbraco-ui/uuiis now the actual library (no longer a meta-package that re-exports 84 sub-packages);import '@umbraco-ui/uui'still registers all components@umbraco-ui/uui-buttonto@umbraco-ui/uui/components/button/button.js"type": "module"(no CommonJS)uui-popoveranduui-carethave been removeduui-css.cssis nowthemes/light.css; newthemes/dark.cssaddedelement-internals-polyfillandrequestSubmitpolyfill are no longer bundled (baseline browser support)Other changes for developers
uui,uui-css,uui-base) were already published via npm Trusted Publishing. The other 81 packages used granular npm tokens with--provenance, which produces provenance attestations but still authenticates through a stored secret. With a single package in v2, every release is fully covered by Trusted Publishing — no tokens anywhere in the publish pipeline.Migration documentation and codemod tooling will be provided to help consumers update their code.
Trusted Publishing
Starting with UUI 2.0, every release of
@umbraco-ui/uuiis published to npm via npm Trusted Publishing — an OIDC-based mechanism where the npm registry authenticates directly with GitHub Actions, with no tokens or secrets involved.This means every published version is cryptographically tied to a specific commit in this repository and a specific CI workflow run. npm records this as a provenance attestation, and you can see it on the package page:
The provenance record shows:
.github/workflows/publish.yml) that ranYou can verify any installed version yourself:
Why this matters
Starting in v1.16, three core packages (
uui,uui-css,uui-base) were moved to Trusted Publishing. The other 81 packages continued to be published using granular npm tokens with--provenance, which produces provenance attestations but still authenticates through a stored secret rather than direct CI identity.With a single package in v2, every release is fully covered — no tokens anywhere in the publish pipeline. The trust chain runs directly from source commit → GitHub Actions → npm registry.
Previous behavior
@umbraco-ui/uui-button,@umbraco-ui/uui-input,@umbraco-ui/uui-base, etc.), each independently versioned and published@umbraco-ui/uuiexisted as a meta-package that depended on all 84 individual packages —import '@umbraco-ui/uui';registered every component at onceimport '@umbraco-ui/uui-button';import { UUIButtonElement } from '@umbraco-ui/uui-button';import { LabelMixin } from '@umbraco-ui/uui-base';import { UUITextStyles } from '@umbraco-ui/uui-css';@umbraco-ui/uui-css/dist/uui-css.cssuui-popoveranduui-caretcomponents available (deprecated but functional)element-internals-polyfillandrequestSubmitpolyfill bundledNew behavior
@umbraco-ui/uuiis now the actual library (no longer a meta-package that re-exports 84 sub-packages);import '@umbraco-ui/uui'still registers all componentsnpm install @umbraco-ui/uuiimport '@umbraco-ui/uui';(registers all components) orimport '@umbraco-ui/uui/components/button/button.js';(cherry-pick)import { UUIButtonElement } from '@umbraco-ui/uui'(re-exported from root) orimport { UUIButtonElement } from '@umbraco-ui/uui/components/button/button.js';for bundling with tree-shakingimport { LabelMixin } from '@umbraco-ui/uui';import { UUITextStyles } from '@umbraco-ui/uui';import '@umbraco-ui/uui/themes/light.css'(renamed fromuui-css.css)import '@umbraco-ui/uui/themes/dark.css';"type": "module")uui-popoverremoved — useuui-popover-container(native Popover API)uui-caretremoved — useuui-symbol-expandType of breaking change
Source incompatible — all import paths change, two components removed, Lit major version bump.
Reason for change
Recommended action
1. Update your dependencies
If you already use
@umbraco-ui/uuias a bundle import, just update:If you installed individual sub-packages, remove them and switch to the single package:
2. Update import paths
@umbraco-ui/uui-{name}@umbraco-ui/uui/components/{name}/{name}.js@umbraco-ui/uui-{name}/lib/{file}@umbraco-ui/uui/components/{name}/{file}.js@umbraco-ui/uui-base@umbraco-ui/uui@umbraco-ui/uui-base/lib/{subpath}@umbraco-ui/uui@umbraco-ui/uui-css/lib/{file}@umbraco-ui/uui3. Update theme/CSS references
4. Replace removed components
5. Upgrade Lit to v3
If your project uses Lit 2, follow the Lit 2 to 3 upgrade guide.
6. CDN / bundler-free usage
UUI 2.0 can still be loaded directly from a CDN (e.g., jsdelivr), but you now need a browser import map to resolve
litand@umbraco-ui/uuiimports. Seedocs/USAGE-WITHOUT-BUNDLER.mdfor a full example.Full migration guide:
docs/MIGRATION-V1-TO-V2.mdAffected APIs
@umbraco-ui/uui-*package imports (84 packages)@umbraco-ui/uui-base→ re-exported from@umbraco-ui/uui@umbraco-ui/uui-css→ re-exported from@umbraco-ui/uui; stylesheetuui-css.css→themes/light.cssuui-popover(→uui-popover-container),uui-caret(→uui-symbol-expand)Support
When version 2.0 launches in June 2026, we intend to transition version 1.x into its security phase, which means we will continue to support it in terms of security fixes. However, we do not expect any bug fixes or feature updates to be available. Read more in our security policy.
All reactions