gpuicn
gpuicn gives native GPUI apps 45 polished, shadcn-styled components, from Button and Dialog to Sidebar, Resizable and Virtual List. Like shadcn/ui, it copies the Rust source into your app, so you own every line and can change any of it. Behavior comes from GPUI Kit; gpuicn adds the Nova styling, a themeable token system and larger desktop components.
[!WARNING] gpuicn is experimental. APIs and styling can change between releases;
gpuicn diffshows exactly what an update would change in your copy.
Quick start
&&
That's the whole setup. No Node.js is involved. In an existing app, run
gpuicn init from its root instead of gpuicn new; it keeps everything you
already have. Installing the CLI also adds cargo gpuicn as an alias.
Then use components like any other Rust code in your crate:
use Button;
new
.label
.on_click
Or use it as a crate
If you'd rather not keep the source in your app, use crate mode. Every component
comes from the gpuicn crate, and you copy out only the ones you want to change:
Your code reads ui::button::Button either way, so moving a component between
the crate and your app never changes a call site. The theme always stays in the
crate, so every component reads the same theme.
Everyday commands
| Command | What it does |
|---|---|
gpuicn list |
Every component in the registry |
gpuicn add <name>… |
Copy components and the shared files they need; your edits are kept |
gpuicn status |
Which installed components differ from the registry |
gpuicn diff [name…] |
The exact change an update would make |
gpuicn add <name> --overwrite |
Replace your copy with the registry version |
gpuicn remove <name>… |
Delete a component, keeping files others still use |
gpuicn eject <name>… |
Crate mode: copy a component out of the crate to edit it |
Learn more
- Catalog: live GPUI/WASM previews, usage and API for every component
- Install and update: what
initdoes, manual setup, upgrading - Theming: colors, density, type, radius, motion, and importing shadcn themes
- Changelog and release notes
- gpui-icons: the full Lucide icon set the components use
Requirements and platform scope
Rust 1.98 or newer. gpuicn v0.7.0 targets GPUI Kit 0.8.1 and its pinned
gpui-pre 0.3.10 runtime; import GPUI types through gpui_kit. Apps on another
GPUI revision must migrate first. macOS native builds need Xcode's Metal toolchain;
Linux needs the usual GPUI system libraries (fontconfig, xkbcommon, Wayland/X11).
The browser catalog renders the same Rust components through WebGPU and WASM.
The WASM canvas does not expose a browser accessibility tree. Differences from
shadcn and platform limits are documented per component in docs/parity/ and
in the catalog.
Example app
gpuicn Workspace combines projects, tasks and local chat with saved state; pass
-- --catalog for the component gallery. See showcase packaging.
Contributing
Bug reports, parity gaps and component requests are welcome as issues. See CONTRIBUTING.md for the development setup, the checks to run, and how to add a component. Project planning and validation records live in docs/internal.
License
gpuicn is available under the MIT License.