UI as plain objects. No JSX, no compiler.
{ button: 'Save', $: [button()] } — that's your component. Paste it in a script tag and it runs. No build step, no framework overhead, no wrappers.
Elements are plain JS objects. No JSX transform, no build step required. Works in a script tag, a Vite project, a browser extension — anywhere JS runs.
Want a tooltip on a button? $: [button(), tooltip()]. One DOM node. No wrapper component, no mystery div > div > button > span.
Building a SketchUp plugin, Figma panel, or browser extension? You need reactivity and a design system — not a 40 kB runtime and a JSX compiler.
Plain objects are what LLMs produce naturally. @domphy/doctor catches mistakes and tells the model exactly what to fix — self-corrects without you debugging.
button, card, dialog, tooltip, motion, table, form — all patches on native elements. 74 ready-made. Compose any combination. No component hierarchy to fight.
Installation
npm install @domphy/ui