Domphy

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.

No compiler, no syntax tax

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.

Add behavior, not abstraction

Want a tooltip on a button? $: [button(), tooltip()]. One DOM node. No wrapper component, no mystery div > div > button > span.

Right size for tool apps

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.

AI generates it correctly

Plain objects are what LLMs produce naturally. @domphy/doctor catches mistakes and tells the model exactly what to fix — self-corrects without you debugging.

74 patches, zero wrappers

button, card, dialog, tooltip, motion, table, form — all patches on native elements. 74 ready-made. Compose any combination. No component hierarchy to fight.

Installation

<div class="blocks">
<div class="block active" data-tab="0">
npm install @domphy/ui
</div>
<div class="block" data-tab="1">

</div>
</div>

Start Here