GPUI
Last updated: Jul 1, 2026
Rationale
GPUI is the desktop UI technology we use to build native applications in our Rust-first stack. It is a GPU-accelerated UI framework developed and battle-tested by Zed Industries as the foundation of the Zed code editor.
The main reasons why we chose it over other alternatives are:
- It is open source.
- It is pure Rust end to end, the same language we use for the application's domain logic, so the whole app (both the UI and the core) is a single type-checked codebase with no language boundary, no JavaScript bridge, and no inter-process serialization between the view and the engine.
- It renders on the GPU using an immediate-mode model, which keeps interactions fast and the UI code straightforward to reason about.
- A single Rust toolchain produces a self-contained binary, which keeps building, linting, and distribution simple.
- It lets us enforce a functional-core/imperative-shell architecture,
where the pure domain crate is
no_std(the compiler proves it cannot reach the filesystem, network, or clock) and the GPUI shell is the only place doing input/output. - It pairs with a component library (gpui-component by Longbridge) that provides ready-made widgets, reducing the amount of UI we build from scratch.
Alternatives
We use more than one desktop UI technology. Qt (through PyQt) powers our existing Python desktop tooling, and we built and shipped a working version of an internal tool on Tauri before replacing it. GPUI is the technology we standardize on for new desktop work in the Rust-first stack; the others remain valid in the contexts where we already rely on them.
Qt (PyQt)
- It is a mature, cross-platform, native desktop toolkit, used through the PyQt bindings.
- We currently use it for
signals, our security-assessment desktop tool written in Python, and it remains a solid choice there. - It is the right tool for a Python desktop application, but it does not fit the Rust-first stack as well as GPUI: it spans two languages across a C++/Python binding layer, ships a large C++ runtime rather than a single Rust binary, and its licensing (GPL/LGPL or commercial) is heavier than the permissive license GPUI carries.
Tauri
- It is open source.
- We built, shipped, and tested a real version of an internal tool on Tauri before moving to GPUI, so this is a tested alternative rather than a theoretical one.
- It pairs a Rust backend with a web frontend (HTML/CSS/JavaScript) rendered in the operating system's WebView. That split means two languages and a serialization boundary between the UI and the Rust core, which adds glue code and a class of runtime errors the compiler cannot catch.
- The web frontend cannot be type-checked together with the Rust domain, so a change to a shared shape has to be kept in sync by hand.
- Rendering and behavior depend on the platform's WebView, which varies across operating systems and versions.
- It is a strong option when a team already has a web frontend or web skills to reuse, and wants native packaging around it.
egui
- It is open source and pure Rust, with a simple immediate-mode model.
- Its visual style is geared toward tools and debug UIs, which makes pixel-accurate, polished native chrome harder to achieve than with GPUI.
- Its component ecosystem is smaller.
Iced
- It is open source and pure Rust, with an Elm-style architecture.
- It is promising but less proven at the scale of a full application than GPUI, which powers the Zed editor in production, and it has a smaller component ecosystem.
Usage
We use GPUI for:
mrq, our merge-request review companion, a macOS menu-bar desktop client written entirely in Rust.