| Crates.io | gpui-component |
| lib.rs | gpui-component |
| version | 0.5.0 |
| created_at | 2025-02-06 03:42:09.391904+00 |
| updated_at | 2025-12-08 02:59:20.734036+00 |
| description | UI components for building fantastic desktop application by using GPUI. |
| homepage | https://longbridge.github.io/gpui-component |
| repository | https://github.com/longbridge/gpui-component |
| max_upload_size | |
| id | 1545019 |
| size | 2,222,983 |
UI components for building fantastic desktop applications using GPUI.
RenderOnce components, simple and user-friendly.Theme and ThemeColor, supporting multi-theme and variable-based configurations.xs, sm, md, and lg.Here is the first application: Longbridge Pro, built using GPUI Component.
gpui = "0.2.2"
gpui-component = "0.4.0"
use gpui::*;
use gpui_component::{button::*, *};
pub struct HelloWorld;
impl Render for HelloWorld {
fn render(&mut self, _: &mut Window, _: &mut Context<Self>) -> impl IntoElement {
div()
.v_flex()
.gap_2()
.size_full()
.items_center()
.justify_center()
.child("Hello, World!")
.child(
Button::new("ok")
.primary()
.label("Let's Go!")
.on_click(|_, _, _| println!("Clicked!")),
)
}
}
fn main() {
let app = Application::new();
app.run(move |cx| {
// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(async move |cx| {
cx.open_window(WindowOptions::default(), |window, cx| {
let view = cx.new(|_| HelloWorld);
// This first level on the window, should be a Root.
cx.new(|cx| Root::new(view, window, cx))
})?;
Ok::<_, anyhow::Error>(())
})
.detach();
});
}
Still early and experimental; there are a lot of limitations.
GPUI Component has a WebView element based on Wry. This is an optional feature, which you can enable with a feature flag.
gpui-component = { version = "0.4.0", features = ["webview"] }
wry = { version = "0.53.3, package = "lb-wry" }
More usage examples can be found in the story directory.
GPUI Component has an Icon element, but it does not include SVG files by default.
The example uses Lucide icons, but you can use any icons you like. Just name the SVG files as defined in IconName. You can add any icons you need to your project.
We have a gallery of applications built with GPUI Component.
cargo run
More examples can be found in the examples directory. You can run them with cargo run --example <example_name>.
Check out CONTRIBUTING.md for more details.
| Features | GPUI Component | Iced | egui | Qt 6 |
|---|---|---|---|---|
| Language | Rust | Rust | Rust | C++/QML |
| Core Render | GPUI | wgpu | wgpu | QT |
| License | Apache 2.0 | MIT | MIT/Apache 2.0 | Commercial/LGPL |
| Min Binary Size 1 | 12MB | 11MB | 5M | 20MB 2 |
| Cross-Platform | Yes | Yes | Yes | Yes |
| Documentation | Simple | Simple | Simple | Good |
| Web | No | Yes | Yes | Yes |
| UI Style | Modern | Basic | Basic | Basic |
| CJK Support | Yes | Yes | Bad | Yes |
| Chart | Yes | No | No | Yes |
| Table (Large dataset) | Yes (Virtual Rows, Columns) |
No | Yes (Virtual Rows) |
Yes (Virtual Rows, Columns) |
| Table Column Resize | Yes | No | Yes | Yes |
| Text base | Rope | COSMIC Text 3 | trait TextBuffer 4 | QTextDocument |
| CodeEditor | Simple | Simple | Simple | Basic API |
| Dock Layout | Yes | Yes | Yes | Yes |
| Syntax Highlight | Tree Sitter | Syntect | Syntect | QSyntaxHighlighter |
| Markdown Rendering | Yes | Yes | Basic | No |
| Markdown mix HTML | Yes | No | No | No |
| HTML Rendering | Basic | No | No | Basic |
| Text Selection | TextView | No | Any Label | Yes |
| Custom Theme | Yes | Yes | Yes | Yes |
| Built Themes | Yes | No | No | No |
| I18n | Yes | Yes | Yes | Yes |
Please submit an issue or PR if any mistakes or outdated are found.
Apache-2.0
Release builds by use simple hello world example. ↩
Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68 ↩
egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20 ↩