API Parity
Wire UI ships the same primitives for React, Solid, and Vue. The goal is full parity: a component or hook that exists in one framework exists in the others, with the same parts, props, and data-* contract — implemented idiomatically for each renderer.
This page is the authoritative matrix of what exists where. It’s generated from the packages’ actual export surface, so it can’t drift from what’s published.
Components
Every component is available in all three frameworks — same compound parts, same data-* state attributes. Differences live only in the implementation (React hooks, Solid signals, Vue composition), never in the API shape.
Hooks, primitives & composables
The hook-level utilities follow each framework’s idiom and naming convention:
use* (useDebounce).create* (createDebounce), matching Solid’s reactivity conventions.use* (useDebounce).The matrix matches them by concept and shows the exact identifier exported by each framework. A dash (—) means the utility isn’t shipped there.
| Name | React | Solid | Vue |
|---|---|---|---|
| ClickOutside | useClickOutside | createClickOutside | useClickOutside |
| ControllableState | useControllableState | createControllableState | useControllableState |
| CopyToClipboard | useCopyToClipboard | createCopyToClipboard | useCopyToClipboard |
| Debounce | useDebounce | createDebounce | useDebounce |
| DebouncedCallback | useDebouncedCallback | createDebouncedCallback | useDebouncedCallback |
| Direction | useDirection | createDirection | useDirection |
| Disclosure | useDisclosure | createDisclosure | useDisclosure |
| DocumentVisibility | useDocumentVisibility | createDocumentVisibility | useDocumentVisibility |
| ElementSize | useElementSize | createElementSize | useElementSize |
| EventListener | useEventListener | createEventListener | useEventListener |
| Floating | useFloating | createFloating | useFloating |
| FocusTrap | useFocusTrap | createFocusTrap | useFocusTrap |
| FocusVisible | useFocusVisible | createFocusVisible | useFocusVisible |
| Hotkeys | useHotkeys | createHotkeys | useHotkeys |
| Id | useId | createId | useId |
| InteractiveState | useInteractiveState | createInteractiveState | useInteractiveState |
| IntersectionObserver | useIntersectionObserver | createIntersectionObserver | useIntersectionObserver |
| Interval | useInterval | createInterval | useInterval |
| IsMounted | — | — | useIsMounted |
| IsomorphicLayoutEffect | useIsomorphicLayoutEffect | — | — |
| Keyboard | useKeyboard | createKeyboard | useKeyboard |
| LocalStorage | useLocalStorage | createLocalStorage | useLocalStorage |
| LongPress | useLongPress | createLongPress | useLongPress |
| MediaQuery | useMediaQuery | createMediaQuery | useMediaQuery |
| MergedRefs | useMergedRefs | createMergedRefs | — |
| MutationObserver | useMutationObserver | createMutationObserver | useMutationObserver |
| OnlineStatus | useOnlineStatus | createOnlineStatus | useOnlineStatus |
| Previous | usePrevious | createPrevious | usePrevious |
| ReduceMotion | useReduceMotion | createReduceMotion | useReduceMotion |
| ResizeObserver | useResizeObserver | createResizeObserver | useResizeObserver |
| ScrollLock | useScrollLock | createScrollLock | useScrollLock |
| SessionStorage | useSessionStorage | createSessionStorage | useSessionStorage |
| StateMachine | useStateMachine | createStateMachine | useStateMachine |
| Throttle | useThrottle | createThrottle | useThrottle |
| ThrottledCallback | useThrottledCallback | createThrottledCallback | useThrottledCallback |
| Timeout | useTimeout | createTimeout | useTimeout |
| UndoRedo | useUndoRedo | createUndoRedo | useUndoRedo |
| WindowSize | useWindowSize | createWindowSize | useWindowSize |
Framework-specific utilities
A few hooks exist in only one or two frameworks — by design, because the underlying concern is framework-specific rather than a parity gap:
| Utility | Where | Why |
|---|---|---|
useIsomorphicLayoutEffect | React only | Bridges useLayoutEffect / useEffect for SSR — a React-specific hazard. Solid and Vue have no equivalent footgun. |
useIsMounted | Vue only | Vue idiom for guarding post-mount work; React and Solid express this differently. |
useMergedRefs / createMergedRefs | React, Solid | Vue’s template-ref model doesn’t require ref merging, so there’s no equivalent. |
These are intentional, not missing features. Direction utilities (useDirection / createDirection, getDirection, isRtl) and everything else are at full parity across all three frameworks — Wire UI components honor dir="rtl" in React, Solid, and Vue alike.
How it stays accurate
The matrix is regenerated from each package’s src/index.ts and validated in CI — a pull request that adds a component to one framework but not the matrix fails the API parity drift check. Regenerate it locally with:
npm run parity:updateSee Getting Started to install the package for your framework.