- Language
- TypeScript
- Last commit
- 32m ago
- Forks
- 0
- Open issues
- 0
- Registry update
- Oct 17, 2026
Connect
remote$claude mcp add --transport http nuvui https://nuvui.nuvraxis.com/mcpHeaders
Nothing to configure — it works as is.
Security review
Review passedReviewed 55m ago.
- tools
- 10 tools scanned
- metadata
- scanned
No findings.
Tools
10get_rules
Start here. Without a topic: what to know before writing code with nuvui, the packages, the rules in a line each, and which component meets which need. With a topic: that rule in full, with wrong and right code.
list_components
Every component page, by package, with what each is for in a line. Pass a package to see only its pages.
list_guides
The pages that aren't about one component: getting started, theming, Tailwind, SCSS, forms, right to left, translation, the Content Security Policy, support, and recipes for whole screens.
get_page
One page of the reference, as Markdown: a component's parts, props, examples, CSS variables, classes and accessibility, or a guide. Takes a page's id from list_components, list_guides or search_docs, or a component's name, such as Compare or DataTable. A section gives only that part of the page, such as Props or CSS variables.
search_docs
Finds the sections of the reference that best answer a question or a few words, such as 'sortable table', 'dark mode' or 'error message on a field'. Each result names its page and section, for get_page.
list_blocks
Blocks are screens and parts of apps built from the components, such as a sign-in screen, a dashboard or a pricing table, each a TSX file and an SCSS file to copy and change. Look here before building a screen from nothing.
get_block
A block's files in full, the packages they need, and the command that adds it to a project.
list_charts
Charts built with @nuvui/charts on Recharts, each one file to copy: area, bar, line, pie, radar, radial, scatter and more.
get_chart
A chart's file in full, such as bar/stacked, from list_charts.
get_tokens
The design tokens as CSS custom properties, for your own CSS: var(--color-primary), never a color written out. A prefix gives only those, such as --color-, --radius- or --text-.
README
Nuvraxis/nuvui/README.mdnuvui
React components for enterprise applications: the data tables, forms, charts and dashboards that business software is made of. They're built on Radix UI primitives and styled with plain SCSS. Class names follow BEM, and the look is controlled through CSS custom properties named after Tailwind v4's theme variables. It's published as @nuvui/react, with add-on packages next to it for the parts that need a library of their own. There are ten: date pickers, tables, charts, barcodes, chat, a kanban board, a rich text editor, an emoji picker, a map and a set of icons.
The website and the docs are at nuvui.nuvraxis.com.
Install
pnpm add @nuvui/react
It needs React 18 or 19. Each add-on is installed next to it, with the library it's built on where that's a peer dependency:
| Package | What it adds | Install |
|---|---|---|
@nuvui/react | The components, the tokens and the presets | pnpm add @nuvui/react |
@nuvui/date-picker | A calendar, a date field and a date range field | pnpm add @nuvui/date-picker |
@nuvui/table | Tables, and a data table on TanStack Table 9 | pnpm add @nuvui/table @tanstack/react-table |
@nuvui/charts | Charts on Recharts 3 | pnpm add @nuvui/charts recharts |
@nuvui/barcodes | Barcodes and QR codes, drawn as SVG | pnpm add @nuvui/barcodes |
@nuvui/chat | The parts of a conversation with an assistant | pnpm add @nuvui/chat |
@nuvui/kanban | A board of columns with cards that are moved between them | pnpm add @nuvui/kanban |
@nuvui/editor | A rich text editor on Tiptap, with HTML as its value | pnpm add @nuvui/editor |
@nuvui/emoji | An emoji picker with search, groups, skin tones and recent ones, and a reaction button | pnpm add @nuvui/emoji |
@nuvui/map | A map on MapLibre, with markers, popups, controls, routes and clusters | pnpm add @nuvui/map maplibre-gl |
@nuvui/icons | 317 line icons drawn for nuvui, in three styles, as React components and SVG files. It needs only React | pnpm add @nuvui/icons |
Getting started has the rest.
Using it with a coding agent
An agent that hasn't been told about nuvui writes what it knows from other libraries: utility classes on components, a components/ui folder, props that don't exist. The repository has a skill that tells it otherwise, in skills/nuvui. A skill is a folder of Markdown that an agent reads when the work calls for it.
Add it to your project with the skills installer, run from the project's folder:
pnpm dlx skills add Nuvraxis/nuvui
It asks which agents to install for and copies the folder to where each one looks: .claude/skills for Claude Code, .agents/skills for Cursor, Codex, GitHub Copilot and Gemini CLI. Add -g to install it for every project of yours. Commit the folder, so that everyone on the project has it.
From then on there's nothing to type. The agent loads the skill when it sees nuvui in the project: a @nuvui/ package in package.json, an import from one, or a class that begins with nuv-. Ask for what you want, such as "add a form to invite a teammate", and it reads the rules and the reference file of each component it uses.
After you update nuvui, run the command again to update the skill with it.
For an agent the installer doesn't know, copy skills/nuvui into the project and name it in the agent's instructions file:
This app is built with nuvui. Before writing UI, read skills/nuvui/SKILL.md
and the files it points to.
NuvUIAIAgent.md is the skill's first page as one file, to hand to a model directly. For one that takes a URL, the docs are served as plain text: /llms.txt lists every page, and /docs/llms-full.txt is all of them in one file.
There's also an MCP server, for an agent to ask while it works, with nothing copied into the project: the same rules and reference, at https://nuvui.nuvraxis.com/mcp. For Claude Code:
claude mcp add --transport http nuvui https://nuvui.nuvraxis.com/mcp
MCP server has the steps for Cursor, VS Code, Codex and others.
The skill doesn't check what the agent wrote. Run your lint and typecheck, and look at the screen. Using with AI agents has the rest: what's in the skill, and what it tells an agent.
Status
Early. The packages are on npm as 0.x versions. Before 1.0 a minor version may rename or remove things, and each package's changelog says where one does.
What exists today:
- Seventy-six components. Twenty-seven for actions, overlays and navigation: Accordion, ActionBar, AlertDialog, Breadcrumb, Button, Checkbox, Command, ContextMenu, Dialog, DropdownMenu, HoldToConfirm, HoverCard, Menubar, Navbar, NavigationMenu, Pagination, Popover, Select, Sheet, Sidebar, Stepper, Switch, TableOfContents, Tabs, Toast, Tooltip and Tree. Twenty for forms: ButtonGroup, ChoiceCard, ColorPicker, Combobox, Field, Fieldset, FileUpload, Input, InputGroup, Label, NativeSelect, NumberField, OtpField, PasswordInput, RadioGroup, Rating, Slider, Textarea, Toggle and ToggleGroup. Twenty-nine for display and layout: Alert, AnimatedNumber, AspectRatio, Avatar, Badge, Card, Carousel, Collapsible, Compare, Confetti, Empty, FormattedNumber, HoloCard, Item, Kbd, ListView, Progress, Resizable, ScrollArea, Separator, Skeleton, Spinner, Stat, TextReveal, TextShimmer, Timeline, Toolbar, Trend and VisuallyHidden. Each has tests for rendering, keyboard behavior, touch sizing, and accessibility in light, dark and forced colors. The tests run in Chromium, Firefox and WebKit.
@nuvui/date-picker, a package of its own with three more: Calendar, DatePicker and DateRangePicker. It's built on react-day-picker and date-fns, which is why it isn't part of the core. It has locales, time zones, and dates that can be typed as well as picked.@nuvui/table, another package of its own: the elements of a table, styled, and a data table on TanStack Table 9. Sorting, filtering, pagination, row selection, a column chooser, pinned and resizable columns, rows that open, a mode where a server does the sorting, filtering and paging, and virtual rows for tables of thousands. TanStack Table is a peer dependency, and a table only carries the features it's made with.@nuvui/charts, a third: a container, a tooltip, a legend and a data table for charts built from Recharts 3's own parts. A chart takes its colors from the theme through CSS variables, so a new theme recolors it without drawing it again. Series can be told apart by pattern and dash as well as by color, and each chart can carry its numbers as a table for screen readers. Recharts is a peer dependency.@nuvui/barcodes, a fourth:Barcodein seventeen kinds (Code 128, GS1-128, Code 39, EAN-13, EAN-8, UPC-A, UPC-E, ITF, ITF-14, MSI, Codabar and Pharmacode, some with check digits) andQRCodewith four levels of error correction and room for a logo or the Swiss cross in the middle. Both are SVG with no state, so a server component can render them, and both stay black on white in a dark theme because that's what scans. A code can be saved as an SVG or a PNG. The encoders are JsBarcode's and uqr's.@nuvui/chat, a fifth:Conversation, which keeps the latest message in view while a reply arrives and stops following when the reader scrolls up,Messagewith a row of actions,MessageLoader,Markdownfor a reply a model wrote,CodeBlock,PromptInput, a box that grows, sends on Enter, takes files and stops a reply,PromptSuggestion,Attachment,Sources,ToolCall, with a question to approve before a tool runs,ReasoningandThreadList, the list of past conversations. It takes messages as props and fetches nothing, so it works with whatever talks to your model. Its markdown entry brings react-markdown, loaded only where it's imported, and Shiki is optional, for colored code.@nuvui/kanban, a sixth:Kanban, a board of columns with cards that are dragged between and within them, moved with the arrow keys from a handle on each card, and read out as they move. It keeps the order and tells you once, when a card is dropped. A move you don't take is undone.@nuvui/editor, a seventh:RichTextEditor, a box to write formatted text in, on Tiptap. Bold and italic, headings, lists, quotes, code and links, from a toolbar, from the keyboard or from a small menu over selected text, with a character limit and a count. Its value is HTML, and it's sent with a form like any field's.@nuvui/emoji, an eighth:EmojiPicker, a panel to pick an emoji from, with a search box, the emoji in their groups, a choice of skin tone and the ones picked before. It draws the device's own emoji, as text, so there's no artwork to load or to license, and it draws only the rows in view, so nineteen hundred emoji are a few dozen elements. The list is a grid with one stop for the Tab key, and each emoji is read by its name. The list of emoji is loaded when a picker is first drawn. AndEmojiReaction, a button with an emoji and how many reacted with it, pressed when the reader is one of them.@nuvui/map, a ninth:MapView, a map on MapLibre, withMapMarkerfor a place, drawn as a pin or as your own element and read by its name,MapPopupfor a box that points at one, andMapControls, the library's own buttons to zoom, turn north up, find the reader and fill the screen.MapRouteis a line through a list of places, andMapClustersgathers places that are near each other into one button with a number on it. The map takes the arrow keys, and each marker that does something is a button. It has no tiles of its own: the style you give it says whose map it is. MapLibre is loaded when a map is first drawn.@nuvui/icons, a tenth: 317 line icons drawn for this library on a 24 pixel grid, in three styles, Standard, Rounded and Sharp, with the same names in each. Each is a React component, such asArrowRightIcon, in the color of the text around it and hidden from screen readers unless it has atitle, and an SVG file. Each icon is a module of its own, so a page carries only the icons it imports. It needs only React, and none of the other packages uses it.- A
toast()function for showing toasts from anywhere, with aToasterto render them. DirectionProvider, for apps in languages that read from the right.- The design tokens: color scales, semantic colors for both themes, chart colors, type, spacing, radius, shadow, motion and control sizes. They build to CSS custom properties, and the SCSS source ships alongside.
- Five presets, each a stylesheet that restyles everything, and three densities.
- A skill for coding agents, in
skills/nuvui: the rules an agent gets wrong without being told, and a reference file for each component, written from the docs so it can't fall behind them. Using it with a coding agent says how to add it to a project. And an MCP server with the same rules and reference, for an agent to ask while it works. - A docs site with a page for each component, a getting started page, and search that runs in the browser.
- A website around the docs, built with the library's own tokens: a home page with a live dashboard, 39 charts in ten families, each one file to copy, a theme builder that shows a theme on real components in light and dark and gives it back as CSS, and 64 blocks in eight groups. A block is a part of an app, such as a sign-in screen, a dashboard or a pricing table, as a TSX file and an SCSS file to copy. The site also serves them as a registry for shadcn's command line tool, at
/r. The docs carry the website's header, so either leads to the other. - Guides for theming, for using the tokens with Tailwind v4, for using the SCSS source, for building forms, with React Hook Form as the worked example, and for right-to-left layouts. The theming page has an editor that changes tokens in the browser and prints the CSS for what you changed.
What's missing:
- Testing in Safari itself. WebKit is covered through the build Playwright ships, which is close to Safari and isn't Safari.
- Compiling the whole library from its SCSS source in Next.js with Turbopack on Windows. That's a known problem in Next.js. Loading only the mixins works there, and so does everything on Linux, and under webpack and Vite. The SCSS guide has the details.
This section gets updated as things land.
What 1.0 means
The releases so far are 0.x. One becomes 1.0 when all of this is true:
- Every component in every package has its page in the docs, its tests in three browser engines, and axe passing in every theme. That's done.
- The names are frozen: props, variants, CSS variables and class names. A pass over them was made in October 2026, and from 1.0 a rename needs a major version.
- Every piece of text the library writes has a prop, and one page lists them. That's done: translation.
- The support policy is written, and what it calls supported is tested. React 18.2 is type-checked, built and rendered on a server. The component tests in a browser run on React 19 only.
- Every component has been checked in a forced-colors theme and in a right-to-left layout by a test, and with a screen reader by a person.
- The policy a site with a strict Content Security Policy needs is written down. That's done: Content Security Policy.
- The packages have been used in at least one real app. They're published under 0.x, which is what makes that possible.
Until then a minor version may rename or remove things, and the changelog says so where one does.
Quick look
import "@nuvui/react/styles.css";
import { Button } from "@nuvui/react";
export default function Page() {
return <Button intent="secondary">Save changes</Button>;
}
The stylesheet is a plain CSS file that you import once. Nothing in the JavaScript imports CSS, so there's no loader to configure and it works with server components.
To restyle a component, set its CSS variables. They aren't declared by the library, so any rule of yours wins:
:root {
--nuv-button-radius: var(--radius-full);
}
Dark mode is opt-in. Put data-theme="dark" on <html>, or data-theme="system" to follow the visitor's operating system.
Working on it
You need Node 22.18 or newer and pnpm 12.
pnpm install
pnpm playwright:install # downloads the browsers the tests run in
Then:
pnpm lint # Biome for TS and JSON, Stylelint for SCSS
pnpm typecheck
pnpm test # component tests, in a real browser
pnpm build
pnpm test:e2e # Playwright against the built website and docs
pnpm size # the size of each entry point against its budget
pnpm dev # packages in watch mode plus the website and the docs
pnpm dev serves the website at http://localhost:3001, with the docs under http://localhost:3001/docs.
Layout
packages/uiis the library, published as@nuvui/react.packages/date-picker,packages/table,packages/charts,packages/barcodes,packages/chat,packages/kanban,packages/editor,packages/emojiandpackages/mapare the add-ons, each published under its folder's name.packages/themeis the theme generator. It turns a choice of brand color, base color, radius and density into token values and checks their contrast. The presets are written by it. It isn't published.apps/showcaseis the website: the home page, the charts, the theme builder and the blocks. It's built with the library's own tokens, in SCSS, with no Tailwind. A block is a folder underapps/showcase/src/blocks, with ablock.jsonthat says what it is.apps/docsis the documentation, served under/docsof the same address. Its build is copied into the website's, so the two are one folder of static files.apps/Dockerfilebuilds the two apps into one image, nginx serving the static files.packages/telemetrysends the site's web vitals to an OpenTelemetry collector. It isn't published.packages/toolingis what the published packages are built, checked and tested with. It isn't published.packages/typescript-configholds the shared tsconfig presets.fixturesholds three small apps that install the packed library the way a stranger would, one of them on React 18.2.skills/nuvuiis the skill for coding agents, andNuvUIAIAgent.mdits first page. The reference in it is written from the docs bypnpm skill.apps/mcpis the MCP server, which answers from the skill and the blocks.apps/mcp/Dockerfilebuilds its image. It isn't published.
Testing
Component tests run in Chromium, Firefox and WebKit through Vitest's browser mode, with Playwright driving the browsers. We don't use jsdom, because it has no layout engine and so can't check focus rings, touch target sizes or color contrast. End-to-end tests for the docs site and the website use Playwright directly. CI runs them in Chromium, as a desktop and as a phone, and in Firefox. The WebKit setups, a desktop and a phone, are still in the Playwright configs to run by hand: on our runners they were too slow to finish.
The accessibility checks run once for every theme the package ships: the default and each preset, in light and in dark.
Contributing
CONTRIBUTING.md covers the setup, the conventions and what a pull request needs. Bug reports and ideas are welcome in the issue tracker. Please read the code of conduct first.
Security problems go through the process in SECURITY.md, not the public tracker.
License
From the server's repository — third-party content, read it before running anything it suggests.
More in Dev tools
greenlight
io.github.CloudCorpRecords
Pre-flight checks for open-source contributions: is this GitHub issue actually landable?
jCodemunch MCP
io.github.jgravelle
Token-efficient code exploration via tree-sitter AST parsing. 70+ languages, 86-99% token savings.
egovframe-scaffold-mcp
io.github.EricSeokgon
eGovFrame (전자정부 표준프레임워크) projects: templates, components, CRUD, build, 5.x migration, dependencies
concord-engine
io.github.harsh-chandak
Scale parallelism. Preserve alignment. A fleet of coding agents builds one task in parallel against
mcp
io.github.briefroom
briefroom stdio MCP server — expose the briefroom CLI to Claude Code, Codex, and other agents.
SkillTotal
ai.skilltotal
Deterministic security scan of MCP servers, agent skills and npm/PyPI packages. Runs locally.
Listing from the official MCP Registry · repository facts from GitHub, just now.