Skip to content
devaryakjhaPublic

About

Open-code components for GPUI, built on Base GPUI.

Topics

Resources

Contributing

Stars

10 stars

Watchers

0 watching

Forks

Repository files navigation

gpuicn

gpuicn logo

Native, editable UI components for GPUI.

Catalog · Install · Theming · Issues

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 diff shows exactly what an update would change in your copy.

Quick start

cargo install gpuicn-cli --version 0.6.0 --locked
gpuicn new my-app  # cargo new + pinned deps, Geist fonts, theme, Button and a starter window
cd my-app && cargo run
gpuicn add sidebar dialog

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 ui::button::Button;

Button::new("save")
    .label("Save")
    .on_click(cx.listener(|this, _, _, cx| this.save(cx)))

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:

gpuicn new my-app --crate   # or `gpuicn init --crate` in an existing app
gpuicn eject button         # src/ui/button.rs is now yours; ui::button uses it
gpuicn remove button        # back to the crate's Button

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.

gpuicn component catalog

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

Requirements and platform scope

Rust 1.98 or newer. gpuicn v0.6.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

cargo run --release -p gpuicn-showcase --features gpui_platform/runtime_shaders

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.

About

Open-code components for GPUI, built on Base GPUI.

Topics

Resources

Contributing

Stars

10 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages