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.

70+ Components Complete Theme System Fully Accessible Type-Safe MIT Licensed
70+
Components
50+
Examples
100%
Type-Safe
0.1
Version

Built with adabraka-ui

Real applications showcasing the power and flexibility of the library

Music Player App

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.

Task Manager App

Project Task Manager

A powerful task management application used to track the development of this UI library. Demonstrates data tables, forms, and complex layouts working together seamlessly.

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

Cargo.toml
[dependencies]
adabraka-ui = "0.1.0"
gpui = "0.2.0"

Quick Start

Get up and running in minutes

main.rs
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

Creating a Button
use adabraka_ui::components::button::*;

Button::new("Click me")
    .variant(ButtonVariant::Default)
    .size(ButtonSize::Md)
    .on_click(|_event, _window, _cx| {
        println!("Button clicked!");
    })
Building Layouts
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))
    )
Using the Theme System
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")
}
Data Tables
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

Navigation

Data Display

Overlays

Layout