Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

GPUI Component

English | 简体中文

Build StatusDocsCrates.io

UI components for building fantastic desktop applications using GPUI.

Features

  • Richness: 60+ cross-platform desktop UI components.
  • Native: Inspired by macOS and Windows controls, combined with shadcn/ui design for a modern experience.
  • Ease of Use: Stateless RenderOnce components, simple and user-friendly.
  • Customizable: Built-in Theme and ThemeColor, supporting multi-theme and variable-based configurations.
  • Versatile: Supports sizes like xs, sm, md, and lg.
  • Flexible Layout: Dock layout for panel arrangements, resizing, and freeform (Tiles) layouts.
  • High Performance: Virtualized Table and List components for smooth large-data rendering.
  • Content Rendering: Native support for Markdown and simple HTML.
  • Charting: Built-in charts for visualizing your data.
  • Editor: High performance code editor (Up to 200K lines for stable performance) with LSP (diagnostics, completion, hover, etc).
  • Syntax Highlighting: Syntax highlighting for editor and markdown components using Tree Sitter.

Showcase

https://longbridge.github.io/gpui-component/gallery/

Here is the first application: Longbridge Pro, built using GPUI Component.

Image

Usage

gpui = { git = "https://github.com/zed-industries/zed" }
gpui_platform = { git = "https://github.com/zed-industries/zed", features = ["font-kit"] }
gpui-component = { git = "https://github.com/longbridge/gpui-component" }

Basic Example

use gpui::*;use gpui_component::{button::*,*};pubstructHelloWorld;implRenderforHelloWorld{fnrender(&mutself, _:&mutWindow, _:&mutContext<Self>) -> implIntoElement{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!")),)}}fnmain(){
gpui_platform::application().run(move |cx| {// This must be called before using any GPUI Component features.
gpui_component::init(cx);
cx.spawn(asyncmove |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))}).expect("Failed to open window");}).detach();});}

Icons

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.

Development

Desktop Gallery (Story)

The story crate is a gallery application that showcases all available components. Run it with:

cargo run

Examples

Some important examples are built into the story crate and can be run directly:

# Code editor with LSP support and syntax highlighting
cargo run --example editor
# Dock layout system (panels, split views, tabs)
cargo run --example dock
# Markdown rendering
cargo run --example markdown
# HTML rendering
cargo run --example html

The examples directory also contains standalone examples, each focused on a single feature. Each example is a separate crate, run them with cargo run -p <name>:

# Basic hello world
cargo run -p hello_world
# System monitor (real-time charts with CPU/memory data)
cargo run -p system_monitor
# Window title customization
cargo run -p window_title

Web Gallery (WASM)

You can also run the gallery in a web browser using WASM:

cd crates/story-web
# Install dependencies (first time only)
make install
# Build and run development server
make dev

The gallery will be available at http://localhost:3000

For more details, see crates/story-web/README.md.

Check out CONTRIBUTING.md for more details.

Compare to others

FeaturesGPUI ComponentIcedeguiQt 6
LanguageRustRustRustC++/QML
Core RenderGPUIwgpuwgpuQT
LicenseApache 2.0MITMIT/Apache 2.0Commercial/LGPL
Min Binary Size 112MB11MB5M20MB 2
Cross-PlatformYesYesYesYes
DocumentationSimpleSimpleSimpleGood
WebYes (WASM)YesYesYes
UI StyleModernBasicBasicBasic
CJK SupportYesYesBadYes
ChartYesNoNoYes
Table (Large dataset)Yes
(Virtual Rows, Columns)
NoYes
(Virtual Rows)
Yes
(Virtual Rows, Columns)
Table Column ResizeYesNoYesYes
Text baseRopeCOSMIC Text3trait TextBuffer 4QTextDocument
CodeEditorSimpleSimpleSimpleBasic API
Dock LayoutYesYesYesYes
Syntax HighlightTree SitterSyntectSyntectQSyntaxHighlighter
Markdown RenderingYesYesBasicNo
Markdown mix HTMLYesNoNoNo
HTML RenderingBasicNoNoBasic
Text SelectionTextViewNoAny LabelYes
Custom ThemeYesYesYesYes
Built ThemesYesNoNoNo
I18nYesYesYesYes

Please submit an issue or PR if any mistakes or outdated are found.

License

Apache-2.0

Footnotes

  1. Release builds by use simple hello world example.

  2. Reducing Binary Size of Qt Applications

  3. Iced Editor: https://github.com/iced-rs/iced/blob/db5a1f6353b9f8520c4f9633d1cdc90242c2afe1/graphics/src/text/editor.rs#L65-L68

  4. egui TextBuffer: https://github.com/emilk/egui/blob/0a81372cfd3a4deda640acdecbbaf24bf78bb6a2/crates/egui/src/widgets/text_edit/text_buffer.rs#L20

About

Rust GUI components for building fantastic cross-platform desktop application by using GPUI.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages