Build beautiful desktop apps with Rust
A comprehensive UI component library for GPUI. 70+ polished, accessible components inspired by shadcn/ui for building professional desktop applications.
Built with adabraka-ui
Real applications showcasing the power and flexibility of the library
Desktop Music Player
A beautiful desktop music player with offline playing capabilities. Features smooth animations, responsive UI, and a polished user experience built entirely with adabraka-ui components.
Project Task Manager
A powerful task management application used to track the development of this UI library. Features drag-and-drop task organization with smooth animations, showcasing the library's advanced interaction capabilities and animation system.
Why adabraka-ui?
Everything you need to build professional desktop applications
Complete Theme System
Built-in light/dark themes with semantic color tokens. Easily customizable to match your brand.
70+ Components
From basic buttons to complex data tables and code editors. Everything you need in one library.
Accessible by Default
Full keyboard navigation, ARIA labels, and screen reader support built into every component.
Type-Safe
Leverages Rust's type system for compile-time guarantees and better developer experience.
High Performance
Optimized for GPUI's retained-mode rendering with virtual scrolling and efficient updates.
Well Documented
Extensive examples and comprehensive API documentation to get you started quickly.
Installation
Add to your Cargo.toml and start building
[dependencies]
adabraka-ui = "0.1.1"
gpui = "0.2.0"
Quick Start
Get up and running in minutes
use adabraka_ui::prelude::*;
use gpui::*;
fn main() {
Application::new().run(|cx| {
// Initialize the UI library
adabraka_ui::init(cx);
install_theme(cx, Theme::dark());
cx.open_window(
WindowOptions {
titlebar: Some(TitlebarOptions {
title: Some("My App".into()),
..Default::default()
}),
..Default::default()
},
|_, cx| cx.new(|_| MyApp::new()),
).unwrap();
});
}
Component Examples
Simple, elegant APIs inspired by modern UI frameworks
use adabraka_ui::components::button::*;
Button::new("Click me")
.variant(ButtonVariant::Default)
.size(ButtonSize::Md)
.on_click(|_event, _window, _cx| {
println!("Button clicked!");
})
use adabraka_ui::layout::*;
VStack::new()
.p(px(32.0))
.gap(px(16.0))
.child(h1("Welcome"))
.child(
HStack::new()
.gap(px(12.0))
.child(Button::new("Cancel"))
.child(Button::new("Save").variant(ButtonVariant::Default))
)
use adabraka_ui::theme::*;
fn render(&mut self, _: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
let theme = use_theme();
div()
.bg(theme.tokens.background)
.text_color(theme.tokens.foreground)
.border_1()
.border_color(theme.tokens.border)
.child("Themed content")
}
use adabraka_ui::components::table::*;
let columns = vec![
Column::new("name", "Name").sortable(true),
Column::new("email", "Email").sortable(true),
Column::new("role", "Role"),
];
DataTable::new(data, columns, cx)
.sortable(true)
.on_row_select(|item, _window, _cx| {
println!("Selected: {:?}", item);
})
70+ Components
Comprehensive library covering all your UI needs
Input & Forms
- Button & IconButton
- Input & Textarea
- Checkbox & Toggle
- Select & SearchInput
- Editor (Code/SQL)
- Radio & RadioGroup
Navigation
- Sidebar & MenuBar
- Tabs & Breadcrumbs
- Tree Navigation
- Toolbar & StatusBar
- Command Palette
- Context Menu
Data Display
- Table & DataTable
- Card & Badge
- Accordion
- Progress & Spinner
- Text Component
- Avatar & AvatarGroup
Overlays
- Dialog & Modal
- Popover & Tooltip
- Toast Notifications
- Alert & AlertDialog
Layout
- VStack & HStack
- Grid Layout
- Scrollable
- Resizable Panels