Product-neutral components and interaction primitives for GPUI.
Components read [gpui_kit_theme::Theme] from the application context and
caller-owned data. They do not know about transports, databases,
credentials, or application hosts. Anything that has to survive a frame —
a text field, a menu, a dialog — is a Render view; everything else is a
RenderOnce builder.
Modules
- [
foundation] — the contracts every component implements:Ident,Disableable,Sizable,Selectable, and the one focus ring,FocusRing. - [
content] — rendered Markdown and a conversation, the two surfaces that draw text nobody in this crate wrote. Nothing here executes HTML, opens a link, or fetches an image. - [
controls] — actions and editable fields. - [
display] — status, grouping, and waiting vocabulary. - [
navigation] — tabs, accordions, trails, rails, and pages. - [
data] — list, table, and tree. - [
datetime] — calendar, date field, range, and time, over a host-suppliedDateAdapter. This crate owns no calendar. - [
layout] — split panes, scroll areas, and toolbars. - [
media] — an audio player, a video player, and a bounded 3D model viewer, over aMediaTransportthis crate does not implement and a glTF reader that refuses more than it accepts. - [
overlay] — anchored and modal surfaces, menus, notifications. - [
interaction] — drag and drop, the one gesture that starts in one component and finishes in another. - [
motion] — token-driven animation. - [
state] — the explicit async states a truthful surface distinguishes. - [
strings] — every word this library shows, and the host's right to replace any of them without losing the English behind the rest. - [
scenes] — one canonical rendering per component, shared by the gallery, the capture task, and the headless audit.
Documentation
docs/components.md— every component and the rules it keeps.docs/coverage.md— what is provided, and what is deliberately not.docs/truthful-ui.md— why a refusal is never rendered as an absence.docs/semantic-automation.md— the semantic tree and what a node reports.docs/token-model.md— where visible values come from.docs/interaction.md— the drag contract: what a drop reports, what a drag publishes, and what the host has to do with it.docs/content.md— what a rendered document is not allowed to do, and what a conversation's five delivery states mean.
# use gpui_kit::prelude::*;
# fn example() -> impl gpui::IntoElement {
Button::new("settings.save")
.label("Save")
.primary()
.on_click(|_window, _cx| {})
# }