Přejít k navigační liště

Zdroják » Různé » GPUI Component: moderní Rust GUI komponenty pro cross-platform desktop aplikace

GPUI Component: moderní Rust GUI komponenty pro cross-platform desktop aplikace

Články ‐ ‐ Různé ‐

GPUI Component je open-source Rust knihovna rozšiřující framework GPUI o více než 60 moderních, nativních a multiplatformních UI komponent. Staví na deklarativním přístupu, stateless renderování a jednoduchém API inspirovaném Reactem či Yew. Díky optimalizovanému výkonu, podpoře témat a flexibilním layoutům umožňuje rychlý vývoj desktopových aplikací, jako je například trading nástroj Longbridge Pro. Knihovna je licencována pod Apache 2.0 a dostupná na GitHubu.

GPUI Component je open-source knihovna napsaná v jazyce Rust, která rozšiřuje framework GPUI o sadu více než 60 moderních UI komponent. Vznikla v rámci projektu Longbridge, který ji využívá pro vlastní aplikaci Longbridge Pro. Je licencována pod Apache 2.0 a dostupná na GitHubu.

Knihovna staví na deklarativním přístupu – komponenty jsou stateless a implementují rozhraní RenderOnce. UI se popisuje podobně jako v Reactu nebo v Yew (pro web). Vše je optimalizováno pro výkon a jednoduchost integrace s GPUI jádrem.

Základní návrhové principy:

  • Stateless renderování: komponenty implementují RenderOnce, čímž se eliminuje potřeba spravovat vnitřní stav.
  • Konzistence a jednoduchost: API se snaží zůstat jednoduché, srozumitelné a snadno rozšiřitelné.
  • Cross-platform: všechny komponenty fungují na Windows, macOS i Linuxu.

Hlavní klíčové funkce

  • Bohatost: Více než 60 cross-platform desktopových UI komponent.
  • Nativní: Inspirováno ovládacími prvky macOS a Windows, kombinováno s designem shadcn/ui pro moderní vzhled.
  • Snadné použití: Stateless komponenty RenderOnce, jednoduché a uživatelsky přívětivé.
  • Přizpůsobitelné: Vestavěný systém Theme a ThemeColor, podpora více motivů a konfigurací založených na proměnných.
  • Všestranné: Podpora velikostí xs, sm, md a lg.
  • Flexibilní layout: Dock layout pro uspořádání panelů, změnu velikosti a volné (Tiles) layouty.
  • Vysoký výkon: Virtualizované komponenty Table a List pro plynulé vykreslování velkých datasetů.
  • Rendering obsahu: Nativní podpora Markdownu a jednoduchého HTML.
  • Grafy: Vestavěné grafy pro vizualizaci dat.
  • Editor: Vysoce výkonný kódový editor (podpora až 200 000 řádků) s LSP (diagnostika, doplňování, hover atd.).
  • Zvýraznění syntaxe: Zvýraznění syntaxe pro editor a Markdown komponenty pomocí Tree-Sitter.

Ukázka použití

Základní aplikace s tlačítkem:

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.into(), window, cx))
            })?;

            Ok::<_, anyhow::Error>(())
        })
        .detach();
    });
}Code language: Rust (rust)

Integrace

Projekt je stále ve vývoji, takže se zatím přidává přímo z GitHubu.

gpui = "0.2.2"
gpui-component = "0.3.1"Code language: Rust (rust)

Pro build vyžaduje Rust 1.77+ a závisí na jádru GPUI. Podporuje integraci se souborem flake.nix pro jednotné prostředí a reprodukovatelné buildy.

Ukázková aplikace

První reálná aplikace postavená na gpui-component je Longbridge Pro – desktopový trading nástroj. Využívá multi-theme systém, panely a virtualizované tabulky.

Výhody

  • Silný výkon díky Rustu a nativnímu renderingu.
  • Konzistentní, moderní design bez potřeby webového enginu (bez Electronu).
  • Dobře navržené API a srozumitelný systém témat.
  • Vhodné pro aplikace typu IDE, analytické dashboardy nebo editory.

Nevýhody

  • Projekt je stále aktivně vyvíjen, API se může měnit.
  • Menší komunita než u zavedených GUI frameworků (např. egui, iced).
  • Dokumentace je zatím stručná, většina příkladů v repozitáři.

Shrnutí

GPUI Component je ambiciózní knihovna, která ukazuje, že Rust GUI může být moderní, rychlé a vizuálně atraktivní. Pro vývojáře, kteří chtějí tvořit nativní multiplatformní desktopové aplikace bez Electronu, představuje jednu z nejkomplexnějších sad komponent v Rust ekosystému.

Pro více informací: github.com/longbridge/gpui-component

Komentáře

Odebírat
Upozornit na
guest
0 Komentářů
Nejstarší
Nejnovější Nejvíce hlasů
Dev

… reposted this!

Začal jako projekt studentů Matfyzu. Český BIRD dnes pomáhá řídit provoz na největších internetových uzlech

Internet drží pohromadě i díky místům, kde se propojují sítě poskytovatelů připojení, cloudů nebo videoslužeb. S předáváním informací o tom, kudy jsou jednotlivé sítě dostupné, jim ve Frankfurtu, Londýně i Amsterdamu pomáhá český BIRD. Začal jako studentský projekt, po první verzi z roku 2000 léta spíš dřímal a soustavný vývoj obnovil až CZ.NIC. Ve své úloze uspěl tak výrazně, že největší uzly nakonec začaly platit vývoj konkurenčního softwaru, aby nebyly závislé jen na něm.

WebSocket: Jak dostat webovou aplikaci do reálného času

Chat, živé notifikace, společná úprava dokumentu nebo průběžně aktualizované kurzy. Uživatelé dnes čekají, že se webová aplikace změní ve chvíli, kdy se změní data, a ne až po stisknutí klávesy F5. Protokol WebSocket je nejrozšířenější způsob, jak mezi prohlížečem a serverem vytvořit trvalý obousměrný kanál. V článku se podíváme, jak funguje pod kapotou, jak ho použít v prohlížeči i na serveru a na co si dát pozor při nasazení do produkce.