Upgrading
How to move installed Edmi components to a newer release: changelog, preview, re-add with --overwrite, review.
You installed Edmi at one version and a newer one is out. Components are copied into your project by the
shadcn, shadcn-vue or shadcn-svelte CLI, so there is no npm update for them. You upgrade by adding the items
again and reviewing the diff.
How versions work
Section titled “How versions work”- The Pages registry URL (
https://viandwi24.github.io/edmi-ui/r/<framework>/{name}.json) always serves the latest release. - jsDelivr serves pinned versions:
https://cdn.jsdelivr.net/npm/@edmi-ui/registry-<framework>@0/r/<name>.jsonis the latest 0.x,@0.3.0is exactly 0.3.0. @edmi-ui/tokensis a normal npm package: update it with your package manager (npm update,pnpm update,yarn up,bun update).- Before 1.0 a minor release (0.2 to 0.3) may contain breaking changes. Read the Changelog
(or the GitHub Release
v<version>) first.
Recommended flow
Section titled “Recommended flow”-
Clean working tree. Commit or stash your work, ideally upgrade on a branch. The diff is your safety net.
-
Read the changelog for every version between yours and the target. Look for removed or renamed items, changed props and token changes.
-
Preview the change. The React CLI can show it without writing files:
Terminal window npx shadcn@latest add @edmi-ui/button --dry-runTerminal window pnpm dlx shadcn@latest add @edmi-ui/button --dry-runTerminal window yarn dlx shadcn@latest add @edmi-ui/button --dry-runTerminal window bunx shadcn@latest add @edmi-ui/button --dry-run--diffshows a diff for a file and--viewshows file contents (seeadd --helpfor your CLI version).shadcn-vueandshadcn-sveltehave no preview flag: upgrade on a scratch branch and usegit diff. -
Re-add with
--overwrite. Single items, or everything you installed:Terminal window npx shadcn@latest add @edmi-ui/button @edmi-ui/card --overwriteTerminal window pnpm dlx shadcn@latest add @edmi-ui/button @edmi-ui/card --overwriteTerminal window yarn dlx shadcn@latest add @edmi-ui/button @edmi-ui/card --overwriteTerminal window bunx shadcn@latest add @edmi-ui/button @edmi-ui/card --overwriteTerminal window npx shadcn@latest add @edmi-ui/theme @edmi-ui/all @edmi-ui/patterns @edmi-ui/ai-all --overwriteTerminal window pnpm dlx shadcn@latest add @edmi-ui/theme @edmi-ui/all @edmi-ui/patterns @edmi-ui/ai-all --overwriteTerminal window yarn dlx shadcn@latest add @edmi-ui/theme @edmi-ui/all @edmi-ui/patterns @edmi-ui/ai-all --overwriteTerminal window bunx shadcn@latest add @edmi-ui/theme @edmi-ui/all @edmi-ui/patterns @edmi-ui/ai-all --overwriteVue uses the same
@edmi-ui/<name>names withshadcn-vue. Svelte takes URLs:Terminal window npx shadcn-svelte@latest add https://viandwi24.github.io/edmi-ui/r/svelte/theme.json https://viandwi24.github.io/edmi-ui/r/svelte/all.json --overwriteTerminal window pnpm dlx shadcn-svelte@latest add https://viandwi24.github.io/edmi-ui/r/svelte/theme.json https://viandwi24.github.io/edmi-ui/r/svelte/all.json --overwriteTerminal window yarn dlx shadcn-svelte@latest add https://viandwi24.github.io/edmi-ui/r/svelte/theme.json https://viandwi24.github.io/edmi-ui/r/svelte/all.json --overwriteTerminal window bunx --bun shadcn-svelte@latest add https://viandwi24.github.io/edmi-ui/r/svelte/theme.json https://viandwi24.github.io/edmi-ui/r/svelte/all.json --overwriteOnly add the entry items you originally installed (
patternsandai-allare optional). If you use a color theme item (theme-<base>-<accent>), install it again aftertheme. -
Review
git diff. Re-apply your local changes to overwritten files, fix call sites for changed or removed props, and run your typecheck and build. Check light and dark mode and every surface that usedraised(see the 0.2 to 0.3 notes below). -
Pinned CDN users: change the version in the URL (
@0.2.0to@0.3.0, or use the@0range). If you pinned the registry incomponents.json(registriesfor React and Vue), change it there too.
From 0.2 to 0.3: raised becomes elevation
Section titled “From 0.2 to 0.3: raised becomes elevation”0.3 replaces the boolean raised prop with the elevation system. It is a breaking
change and there is no alias: a leftover raised prop is a type error (or ends up on the DOM in Vue and Svelte).
What changed
raisedis removed everywhere. Useelevation="auto" | "sunken" | "flat" | "raised" | "floating"(default"auto").- Raised no longer has a hard lip. It is a bevel (rim, top highlight, hairline);
floatingadds one soft drop;sunkenis a soft inset. Pressed sinks 1px instead of 2px. - Only the active part of tabs, toggle groups, pagination, calendars, switches and sliders rises. A raised
TabsListraises the active trigger, not the list. - New
elevationitem withElevationProvider. Wrap a page inmode="layered"and every role takes its default level (filled buttons raised, fields sunken, cards raised, popovers and dialogs floating). - New tokens (
--bv-*,--sk-*,--r1-*,--fl-*) and a clearer dark ladder for the stone base. Thethemeitem’s base rule now keys off[data-elevation=raised], [data-elevation=floating]. The old lip tokens remain for compatibility only. - Demo and docs names changed from
<name>-raisedto<name>-elevation.
Steps
- Re-add the entry items and every component you use with
--overwrite(flow above). Always includethemeandelevation; components that take depth installelevationas a dependency. - Replace every
raisedin your code. Search forraised,:raised,raised=anditemRaised. - Decide per page: keep it flat, raise a few things with the prop, or wrap the page in a layered
ElevationProvider. - Delete any hand-written lip shadows and
-lipborder colours: use the prop or the shadow tokens. - Check light and dark mode, and any
Toaster,TabsList,ToggleGroup,PaginationandCalendarthat usedraised.
Before and after
// 0.2<Button raised>Get started</Button><TabsList raised variant="pills">…</TabsList><Card raised>…</Card><Toaster raised />
// 0.3<Button elevation="raised">Get started</Button><TabsList elevation="raised" variant="pills">…</TabsList><Card elevation="raised">…</Card><Toaster elevation="raised" />
// 0.3, layered: no per-component props, roles decide<ElevationProvider mode="layered"> <App /></ElevationProvider><!-- 0.2 --><Button raised>Get started</Button><TabsList raised variant="pills">…</TabsList><Card :raised="featured">…</Card>
<!-- 0.3 --><Button elevation="raised">Get started</Button><TabsList elevation="raised" variant="pills">…</TabsList><Card :elevation="featured ? 'raised' : 'flat'">…</Card>
<!-- 0.3, layered --><ElevationProvider mode="layered"> <App /></ElevationProvider><!-- 0.2 --><Button raised>Get started</Button><Tabs.List raised variant="pills">…</Tabs.List><Card.Root raised={featured}>…</Card.Root>
<!-- 0.3 --><Button elevation="raised">Get started</Button><Tabs.List elevation="raised" variant="pills">…</Tabs.List><Card.Root elevation={featured ? "raised" : "flat"}>…</Card.Root>
<!-- 0.3, layered --><ElevationProvider mode="layered"> {@render children()}</ElevationProvider>The documentation examples and the example apps in the repository use layered mode for the Stockbreak pages and explicit levels for the Layerbeat page; open an example’s Code tab to see both styles. With the Agent skills installed your coding agent knows this migration.
- Keep customizations in wrapper components or
classNameat call sites instead of editing installed files, so--overwritenever fights your changes. - Keep the same
iconLibraryincomponents.json, so icons are rewritten the same way. - New dependencies of a newer version are installed by the CLI. If you skipped dependency install (
--no-deps-installon Svelte), run your package manager afterwards. - Renamed or removed items are called out in the changelog; delete the old file yourself after switching to the new item.
- Tell your coding agent: with the Agent skills installed it knows this flow.