Zero CPU when idle
If nothing changes on screen, nothing runs. Idle windows draw no frames and stay off the battery.
A GPU-accelerated GUI framework for native desktop apps, in Rust or TypeScript. Familiar layout, real text, built-in accessibility — and zero CPU while your app is idle.
If nothing changes on screen, nothing runs. Idle windows draw no frames and stay off the battery.
Rendering happens on the GPU, and only the part of the window that changed is redrawn.
Flexbox and CSS Grid, with Tailwind-style shorthands. If you can lay out a web page, you can lay out a window.
A large collection of accessible, unstyled components — menus, dialogs, popovers, selects, comboboxes, tabs, tables, trees — ready to make yours.
Selection, editing, undo, input methods, emoji, and right-to-left scripts behave like they do in every native app.
Screen readers see real buttons, lists, and text — no extra code required.
Tables and lists with a million rows scroll without dropping frames.
Real windows with native menus, dialogs, tray icons, and notifications — not a browser in a costume.
quickgui dev runs your app and reloads as you edit; quickgui build hands you a signed, installable release.
Use whichever you like — both produce the same native app, with no webview.
struct Counter {
count: usize,
}
impl View for Counter {
fn render(
&mut self,
cx: &mut ViewContext<'_, Self>,
) -> impl IntoElement {
let increment = cx.listener("increment", |this, cx| {
this.count += 1;
cx.invalidate();
});
div()
.size_full()
.flex_col()
.items_center()
.justify_center()
.gap_3()
.child(text(format!("Count: {}", self.count)))
.child(
div()
.on_click(increment)
.px_4()
.py_2()
.rounded_lg()
.bg(Color::rgb8(24, 24, 27))
.text_color(Color::rgb8(250, 250, 250))
.hover(|s| s.bg(Color::rgb8(63, 63, 70)))
.child("Increment"),
)
}
}cargo add quickguiThe counter above is a complete main.rs — copy it in.
cargo run --releasebunx @quickgui/cli init my-app
cd my-app
bun run devquickgui build --target darwin-arm64 \
--sign "Developer ID Application: Example (TEAMID)" \
--notarize quickgui-notaryYou get a real, signed, self-contained app — installer included.
Write a view, ship a real app — and let idle windows actually idle.