gpuijs

Reference

Library compatibility

gpuijs runs libraries unchanged when they stick to their framework and the DOM subset that host nodes and the browser environment provide. Each library below has been run in gpuijs: in an example app, in the test suite, or while building compatibility shims for it. gpuijs carries specific fixes for most of them.

Most of them are React libraries, because the large examples are React apps. Framework-agnostic ones (floating-ui, ApexCharts, Chart.js, flatpickr, axios) rely only on host nodes and the browser environment, which Vue and Solid apps get too. So far they have been tested from React apps. See Frameworks.

Import your framework's entry point (@gpuijs/core/react, @gpuijs/core/vue or @gpuijs/core/solid) first when you use any of these.

#Component libraries

LibraryStatusNotes
shadcn/uiWorksUsed by shadcn-demo and next-shadcn-dashboard. Theme variables, tw-animate-css enter and exit animations, ChartStyle.
Radix UIWorksDialog, Popover, Select, Tooltip, Avatar and the other primitives shadcn/ui builds on. Focus scope, dismissal on outside presses, collision-aware positioning and hidden native inputs are all handled.
Base UIWorksUsed by next-shadcn-dashboard. Exit animations end at once, because getAnimations() returns [].
Material UI (@mui/material)WorksThe mui-dashboard example runs MUI's dashboard template unmodified: Emotion styles, menus, selects, collapses, color schemes.
MUI X ChartsWorksLine, bar and pie charts, axis label measuring, tooltips, highlight on hover
MUI X Data GridWorksIn mui-dashboard
MUI X Date PickersWorksIn mui-dashboard
MUI X Tree ViewWorksIn mui-dashboard
cmdkWorksArrow and Enter key navigation from the input, attribute selectors on cmdk-*
vaulWorksDrawer drags read their offset through getComputedStyle().transform
sonnerWorksInjected styles, stacked toasts

#Charts and visualization

LibraryStatusNotes
RechartsWorksText measured through measureText-backed hidden spans, tooltips that follow the pointer
ApexCharts / react-apexchartsWorksBuilds its SVG with createElementNS. Label sizing through getBBox(), injected default styles, innerHTML tooltips.
jsVectorMapWorksRegion hover through SVG hit-testing, CSS :hover fills, page-coordinate tooltips
MUI X ChartsWorksSee above
Three.jsWorksWebGL 2, textures from TextureLoader. See Elements: canvas.
PixiJS v8WorksWebGL renderer, Graphics, Text, Ticker

#Positioning and overlays

LibraryStatusNotes
floating-uiWorksHost nodes pass its element checks. Geometry reads force a layout when needed.
Popper.jsWorksFixed-position tooltips are placed against the window
react-remove-scrollWorksIts injected styles apply
react-resizable-panelsWorksUse its browser build, which the CLI picks by default. Its drag cursor style is injected at runtime.

#Routing, data and forms

LibraryStatusNotes
react-routerWorksOn the in-memory history. ROUTE=/path opens a route directly.
TanStack QueryWorksIn next-shadcn-dashboard
TanStack TableWorksIn next-shadcn-dashboard
TanStack FormWorksIn next-shadcn-dashboard
zodWorksinstanceof FileList checks resolve
axiosWorksThrough its fetch adapter
react-helmet-asyncPartlyRenders. Setting <html>/<body> attributes through it does nothing.

#Interaction and animation

LibraryStatusNotes
dnd-kitWorksPointer-event sensors. Used by next-shadcn-dashboard.
LexicalWorksRich text through beforeinput. See Elements: editable content.
TipTap / ProseMirrorWorksStarterKit; reads typing through MutationObserver
embla-carouselWorksUsed by next-shadcn-dashboard
react-springWorksPer-frame style writes through el.style
tw-animate-cssWorksKeyframes read each element's own --tw-enter-* variables

#Calendars and pickers

LibraryStatusNotes
flatpickrWorksBuilds its calendar with createElement, wraps its input, writes input.value
FullCalendarWorksEvent targets through composedPath()
MUI X Date PickersWorksSee above

#CSS-in-JS

LibraryStatusNotes
EmotionWorksMUI's styling engine, and @emotion/styled directly
gooberWorksFinds its sheet again through the element id global
Tailwind CSS v4Built inSee Styling

Libraries not listed here may well work. Try them, and watch the terminal for errors and unsupported css warnings.

#What tends not to work

Libraries that need these don't work yet:

  • Scroll position: virtualizers that compute their window from scrollTop (react-window, react-virtuoso, TanStack Virtual). gpuijs culls long lists natively, so render the list directly. See Layout: long lists.
  • IntersectionObserver: infinite-scroll triggers and lazy-loading wrappers.
  • Full DOM queries: document.querySelector across the page returns null. Query from document.body instead.
  • iframes.

#Making a library work

When a library fails, the error usually names the missing global or method. Most fixes are small additions to js/src/env.js (globals) or the HostNode object in js/src/renderer.js (element methods). The existing shims show the pattern: each says which library needs it and why. See Contributing.