Skip to Content
⭐️ Leave a star →
API ParityNew

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:

React — hooks prefixed use* (useDebounce).
Solid — primitives prefixed create* (createDebounce), matching Solid’s reactivity conventions.
Vue — composables prefixed 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.

NameReactSolidVue
ClickOutsideuseClickOutsidecreateClickOutsideuseClickOutside
ControllableStateuseControllableStatecreateControllableStateuseControllableState
CopyToClipboarduseCopyToClipboardcreateCopyToClipboarduseCopyToClipboard
DebounceuseDebouncecreateDebounceuseDebounce
DebouncedCallbackuseDebouncedCallbackcreateDebouncedCallbackuseDebouncedCallback
DirectionuseDirectioncreateDirectionuseDirection
DisclosureuseDisclosurecreateDisclosureuseDisclosure
DocumentVisibilityuseDocumentVisibilitycreateDocumentVisibilityuseDocumentVisibility
ElementSizeuseElementSizecreateElementSizeuseElementSize
EventListeneruseEventListenercreateEventListeneruseEventListener
FloatinguseFloatingcreateFloatinguseFloating
FocusTrapuseFocusTrapcreateFocusTrapuseFocusTrap
FocusVisibleuseFocusVisiblecreateFocusVisibleuseFocusVisible
HotkeysuseHotkeyscreateHotkeysuseHotkeys
IduseIdcreateIduseId
InteractiveStateuseInteractiveStatecreateInteractiveStateuseInteractiveState
IntersectionObserveruseIntersectionObservercreateIntersectionObserveruseIntersectionObserver
IntervaluseIntervalcreateIntervaluseInterval
IsMounteduseIsMounted
IsomorphicLayoutEffectuseIsomorphicLayoutEffect
KeyboarduseKeyboardcreateKeyboarduseKeyboard
LocalStorageuseLocalStoragecreateLocalStorageuseLocalStorage
LongPressuseLongPresscreateLongPressuseLongPress
MediaQueryuseMediaQuerycreateMediaQueryuseMediaQuery
MergedRefsuseMergedRefscreateMergedRefs
MutationObserveruseMutationObservercreateMutationObserveruseMutationObserver
OnlineStatususeOnlineStatuscreateOnlineStatususeOnlineStatus
PrevioususePreviouscreatePrevioususePrevious
ReduceMotionuseReduceMotioncreateReduceMotionuseReduceMotion
ResizeObserveruseResizeObservercreateResizeObserveruseResizeObserver
ScrollLockuseScrollLockcreateScrollLockuseScrollLock
SessionStorageuseSessionStoragecreateSessionStorageuseSessionStorage
StateMachineuseStateMachinecreateStateMachineuseStateMachine
ThrottleuseThrottlecreateThrottleuseThrottle
ThrottledCallbackuseThrottledCallbackcreateThrottledCallbackuseThrottledCallback
TimeoutuseTimeoutcreateTimeoutuseTimeout
UndoRedouseUndoRedocreateUndoRedouseUndoRedo
WindowSizeuseWindowSizecreateWindowSizeuseWindowSize

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:

UtilityWhereWhy
useIsomorphicLayoutEffectReact onlyBridges useLayoutEffect / useEffect for SSR — a React-specific hazard. Solid and Vue have no equivalent footgun.
useIsMountedVue onlyVue idiom for guarding post-mount work; React and Solid express this differently.
useMergedRefs / createMergedRefsReact, SolidVue’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:update

See Getting Started to install the package for your framework.

Last updated on

MIT License © 2026 wire-ui

API Parity – Wire UI