Logo by @stefanitattoo
This is the new UI version, wrote from scratch using vuejs.
Thanks @ramon-src for the support and guidance on this project.
yarn install
yarn serve
yarn build
yarn lint
The UI uses shadcn-vue with Tailwind CSS 4. Theme tokens live in src/assets/globals.css; component config is in components.json.
Use the Vue CLI, not the React one:
# Wrong (React)
npx shadcn@latest apply --preset ...
# Correct (Vue)
npx shadcn-vue@latest apply --preset a64LKtAeIf components.json is missing or invalid:
npx shadcn-vue@latest init --preset <preset-code> --template viteUse a preset code from shadcn-vue.com/create. Codes from ui.shadcn.com (React) do not work here.
Keep "typescript": true in components.json. With "typescript": false, apply can break Vue files during install.
Quick way (recommended):
npm run theme:update -- <preset-code-or-name>
# examples:
npm run theme:update -- a64LKtAe
npm run theme:update -- maia -y # skip dirty-tree promptThe script runs shadcn-vue apply, sets iconLibrary to remixicon, reinstalls UI components, fixes Sonner.vue toast icons, and runs npm run build.
Manual steps:
-
Pick a preset on shadcn-vue.com/create, or use a named style:
vega,nova,maia,lyra,mira,luma,sera. -
Apply it to the project:
npx shadcn-vue@latest apply --preset <preset-code> -y
# or
npx shadcn-vue@latest apply --preset maia -y- Reinstall Lucide (registry components import
@lucide/vue):
npm install @lucide/vue- Restart the dev server:
npm run serveapply updates components.json, CSS variables in globals.css, and reinstalls files under src/components/ui/.
- UI primitives (
src/components/ui/): default is Lucide (@lucide/vue) afterapply. - App code (sidebar footer, filters, export, etc.): Remix Icon (
@remixicon/vue).
To switch UI icons from Lucide to Remix Icon:
npx shadcn-vue@latest migrate icons
# from: @lucide/vue
# to: @remixicon/vueAfter migrate icons, check src/components/ui/sonner/Sonner.vue. The CLI often leaves Lucide names (CircleCheckIcon, InfoIcon, etc.) mixed with Remix imports and the dev server will fail. Replace them with Remix exports, for example:
CircleCheckIcon→RiCheckboxCircleLineInfoIcon→RiInformationLineTriangleAlertIcon→RiAlertLineOctagonXIcon→RiCloseCircleLine
Other libraries (e.g. Hugeicons) are listed in the preset, but the CLI may still leave Lucide imports in .vue files—keep @lucide/vue installed unless you migrate icons manually.
npm run build
npm test| Error | Fix |
|---|---|
Failed to resolve import "@lucide/vue" |
Run npm install @lucide/vue after apply |
Invalid preset: … with a React site code |
Generate the preset on shadcn-vue.com/create |
Opening tag "nav" not terminated / use strict in .vue |
Set "typescript": true in components.json, then run apply again |
CircleCheckIcon is not exported by @remixicon/vue |
Fix icon names in src/components/ui/sonner/Sonner.vue (see Icons section) |
npx shadcn@latest says invalid components.json |
Use shadcn-vue, not shadcn |