Vite (Vue)
Install newt/ui in a Vue 3 project built with Vite, from the template or into an app you already have.
Choose the brand hue, the radius and the font in newt/create, and it prints a preset code. Pass that code to init and the project comes out already wearing it.
pnpm dlx newtui@latest init --preset <code> --template vite-vuenpx newtui@latest init --preset <code> --template vite-vueyarn dlx newtui@latest init --preset <code> --template vite-vuebunx newtui@latest init --preset <code> --template vite-vuepnpm dlx newtui@latest add buttonnpx newtui@latest add buttonyarn dlx newtui@latest add buttonbunx newtui@latest add buttonOne command creates the project and wires the tokens into it. --template exists for Next.js, both Vite flavours and Nuxt; everywhere else init runs inside a project you already made.
pnpm dlx newtui@latest init --template vite-vuenpx newtui@latest init --template vite-vueyarn dlx newtui@latest init --template vite-vuebunx newtui@latest init --template vite-vuepnpm dlx newtui@latest add buttonnpx newtui@latest add buttonyarn dlx newtui@latest add buttonbunx newtui@latest add buttonCreate the app
npm create vite@latest my-app -- --template vue-tsAdd Tailwind
npm install tailwindcss @tailwindcss/vite@import "tailwindcss";Declare the alias twice
Once for the type checker, once for the bundler — init reads the first and
your build needs the second:
{
"compilerOptions": {
"paths": { "@/*": ["./src/*"] }
}
}import { fileURLToPath } from "node:url"
import tailwindcss from "@tailwindcss/vite"
import vue from "@vitejs/plugin-vue"
import { defineConfig } from "vite"
export default defineConfig({
plugins: [vue(), tailwindcss()],
resolve: {
alias: { "@": fileURLToPath(new URL("./src", import.meta.url)) },
},
})Run init
pnpm dlx newtui@latest init --framework vue --bundler vitenpx newtui@latest init --framework vue --bundler viteyarn dlx newtui@latest init --framework vue --bundler vitebunx newtui@latest init --framework vue --bundler viteBoth flags are guesses it usually makes on its own: the framework comes from
your dependencies, the bundler from the presence of a vite.config. Pass them
when it guesses wrong.
Load the stylesheet, then add a component
import "./assets/index.css".newt-root goes on the element that wraps the application — the <body> in
index.html is the usual place.
pnpm dlx newtui@latest add buttonnpx newtui@latest add buttonyarn dlx newtui@latest add buttonbunx newtui@latest add button<script setup lang="ts">
import { Button } from "@/components/ui/button"
</script>
<template>
<Button variant="primary">Send</Button>
</template>What init writes
components.json the config, shared with shadcn
src/assets/index.css the --newt-* token block
src/lib/utils.ts cn()
src/components/ui/button/Button.vue add button
src/components/ui/button/index.ts
A folder per component: the single-file components, and an index.ts barrel
that re-exports them with their class-variance-authority variants.
See Dark mode for the theme toggle, and RTL if the app has to run right to left.