Build the whole interface on UI SDK.

UISet is the components, kits, templates and themes for Vercel’s UI SDK. UI SDK handles keyboard, focus, screen readers and agents; UISet adds how it looks, the big components real apps need, and whole pages. Install any piece with the shadcn CLI.

pnpm dlx shadcn@latest add superzero11/uiset/uiset
Output
64

The same live form in every skin. Tab through it: keyboard, focus and screen reader behavior never change.

UI SDK gives you behavior. UISet gives you everything else.

UI SDK moved the hard part of UI into reusable behaviors: arrow keys, focus, selection, popups, drag and drop, and the ARIA that goes with them, plus a bridge that lets agents work the controls. It ships its components unstyled, and it leaves the large ones to you. That’s where UISet starts.

UISet

Looks
five skins, a theme generator, sound and haptics
55 styled components
and 16 app parts
12 kits
chat, rich text, data grid, charts, scheduler and more
10 page templates
to start from
Web Components
for Vue, Svelte, Solid and HTML
A skill and llms.txt
for coding agents

UI SDK

Behaviors
keyboard, focus, selection, popups, drag and drop
55 components
unstyled
Agent bridge
and WebMCP
Five frameworks
React, Vue, Svelte, Solid, Web Components

Everything a product needs, in one set

Pick what you need; each item installs on its own and brings only what it uses. You never mix in a second UI library.

Kits you’d otherwise build yourself

These are the real components, running. Each is keyboard-first, readable by screen readers and agents, and styled by the skin around it.

You

Search fires a request on every keystroke. How do I debounce it in React?

AI
Assistant

Debounce the value, not the handler, and cancel stale requests:

tsx
function useDebounced<T>(value: T, ms = 250) {
  const [debounced, setDebounced] = useState(value)
  useEffect(() => {
    const id = setTimeout(() => setDebounced(value), ms)
    return () => clearTimeout(id)
  }, [value, ms])
  return debounced
}

Then fetch from the debounced query with an AbortController, so a slow old response can't overwrite a newer one.

ApproachRequests while typing "react"
No debounce5
Debounced 250 ms1

Sources: 12

AI
Assistant

Here's how I'd roll it out:

  1. Add useDebounced to hooks/Done
  2. Abort stale requests in useSearchIn progress
  3. Test fast typing on a slow networkTo doChrome DevTools, Slow 4G
Model

Simulated assistant. Every part is a real component: markdown, code, reasoning, tool calls, sources, tasks, versions, attachments, commands and mentions.

pnpm dlx shadcn@latest add superzero11/uiset/chat superzero11/uiset/chat-composer
Chat docs

All 12 kits, including the board, canvas, IDE, mobile patterns, terminal and the Studio synth.

Agents can use it, not just look at it

Every control is named for UI SDK’s agent bridge, so an agent reads the page as data and works the controls directly, with no screenshots. Risky steps wait for a person in the Agent Console, and every change can be undone.

Across 3 tasks on UISet's kits, agents using the bridge made 40% fewer tool calls, read 79% less text and finished 40% sooner than agents using browser tools, and every run of both finished its task (medians of 3 runs each).

Tool calls
−40%
Text read
−79%
Time
−40%

The benchmark, the method and a live demo

Five skins, one set of components

A skin is pure CSS: colors, type, edges, sound and motion. Keyboard, focus, screen reader and agent behavior stay the same in every one, and each is checked for contrast in every component. Skins nest, so one page can mix them, and the generator makes your own.

  • Base

    Takes your shadcn theme, or builds one from a single key color.

  • Blueprint

    A technical drawing: cyanotype paper, linework and hatching.

  • Studio

    A synth rack: gunmetal panels, rubber pads and amber lamps.

  • Phosphor

    A green-screen terminal: intensity, inverse video, scan lines.

  • Ink

    E-paper: ink on grey, dotted greys, a reading serif, no motion.

Make your own theme from one color

Tested like the infrastructure it is

A UI library is only as good as its worst state. These run on every change.

Accessibility
Every component, kit and template is checked with axe in every skin and theme: text contrast, control edges, names and roles.
Keyboard
Each kit is driven by keyboard in its tests: moving cards, editing cells, drawing events, writing rich text.
Agents
Each kit has a test where an agent reads it and acts through UI SDK’s bridge, by the names people see.
Mutation tests
Each new behavior is broken on purpose to prove a test notices, then restored.
Installs
Every item is installed on its own and all together into a fresh app, then type-checked and built.
The rest
Right-to-left, Windows high contrast, reduced motion, phone widths, and React and web versions side by side.

Start in three steps

  1. Add the root

    It brings the tokens, the skins and the sound, into your project’s components folder.

    pnpm dlx shadcn@latest add superzero11/uiset/uiset
  2. Wrap your app

    Every UISet and UI SDK component inside takes the skin. With a shadcn theme on the page, the base skin uses it.

    app.tsx
    import { UISet } from "@/components/ui/uiset"
    
    export function App() {
      return <UISet skin="base">{/* your app */}</UISet>
    }
    
  3. Add what you need

    Components, kits or a whole page, each with one command.

    pnpm dlx shadcn@latest add superzero11/uiset/button superzero11/uiset/field superzero11/uiset/data-grid

Installation covers manual setup, fonts and Web Components.

React, or anything that renders HTML

Every kit and template also ships as Web Components with the same styles and behavior, for Vue, Svelte, Solid, Angular and plain HTML.

notes.tsx
import { RichTextEditor } from "@/components/ui/rich-text"
import { UISet } from "@/components/ui/uiset"

<UISet skin="ink">
  <RichTextEditor label="Release notes" defaultValue="## Release 2.4" />
</UISet>

Questions

Where it’s going

UISet grows with UI SDK. What’s next, in the open:

More skins
Cockpit (guarded switches and gauges), Paper (cards and tape) and Print (brutalist type), each with its own sound.
Framework guides
Step-by-step setups for Vue, Svelte, Solid and Angular with the Web Components build.
More templates
Onboarding, a settings console wired for agents, and a docs site.
Following UI SDK
UISet tracks UI SDK’s releases, and reports the issues it finds upstream, until UI SDK 1.0.

The full roadmap