版本发布

发布说明

GPUI Kit 每个已发布版本,以及它在 GitHub Release 中的说明,最新版本在最前。说明保留 GitHub 上的英文原文。

v0.6.4

GitHub

GPUI Kit v0.6.4

GPUI Kit v0.6.4 is a patch release on top of v0.6.2. It fixes popup placement on tiled Linux windows, where a menu opened near the window edge no longer lined up with its trigger, and closes two pie chart rendering issues.

Components

  • Popup: on a client-decorated window the edge clamp now honors the window’s tiling. A tiled edge draws no shadow, so a Popover, PopupMenu, DropdownMenu, Select, or tooltip opened near the left or right edge of a tiled window (every window on Hyprland and other tiling compositors) keeps only the popup’s own margin and stays aligned with its trigger instead of being pushed 20px inward; an untiled edge still keeps the client inset. (#3130)
  • Chart: a PieChart without an explicit outer_radius paints and hit-tests with its laid-out radius again instead of rendering nothing, and a hovered slice’s leader line starts at the lifted slice edge so it no longer cuts into the fill. The gallery’s “Revenue by Region” labels fit their card. (#3123, #3121)

Thank you to everyone who contributed code, documentation, testing, and feedback!

What’s Changed

Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.2…v0.6.4

v0.6.2

GitHub

GPUI Kit v0.6.2

GPUI Kit v0.6.2 brings mobile application support for iOS and Android, three new components (Carousel, Empty, and InputGroup), a public editor search API, Markdown inline plugins, and motion sequencing. This release also cuts per-frame work in TextView, List, Plot, and Chart, and removes the dock’s tiles canvas.

Mobile Applications

GPUI Kit applications can now be hosted by an external iOS or Android platform. Mobile builds keep GPUI and component initialization while leaving the desktop platform selector out, and gpui_kit::is_mobile() exposes the target check. On mobile, tooltips stay hidden and HoverCard opens and closes on tap. New mobile guides cover simulator setup, Swift UIView embedding, lifecycle and keyboard layout, and touch interactions. (#3045)

  • Touch text selection: a long press in Input, Textarea, Editor, or a selectable TextView selects the word under the finger and shows draggable selection handles with an iOS-style edit menu (Cut, Copy, Paste, Select All). Double tap selects a word in editable text, Select All reaches past the viewport, and the menu returns after a scroll. (#3058, #3073, #3076, #3075, #3077)
  • iOS-like scroll bounce through the new ScrollBounce wrapper in gpui-base, covering lists, scrollable divs, touch release, momentum, and reduced motion. (#3067)
  • Scrollbars support touch dragging with a smaller resting thumb on mobile. (#3060, #3111)
  • A long press opens a plot’s tooltip on mobile. (#3078)

New Components

  • Carousel: horizontal and vertical snapping, pointer and trackpad gestures, keyboard navigation, controlled selection, looping, optional pagination, and reduced motion. (#2867)
  • Empty: composable empty states built from Empty, EmptyHeader, EmptyMedia, EmptyTitle, EmptyDescription, and EmptyContent, imported from gpui_kit::component::empty. (#3030)
  • InputGroup: inline addons, block toolbars, and textareas sharing one input frame through InputGroup, InputGroupInput, InputGroupTextarea, InputGroupAddon, InputGroupButton, and InputGroupText. (#3042)

Editor and Text Input

  • Editor search API is now public on the editor state: set_search_query, close_search, next_search_match, previous_search_match, the replace methods, and search_session(), so an application can draw its own search bar. Match highlights show without the panel, and the search shortcut reaches the host view. (#2533)
  • Wrapped search matches stay visible with surrounding context. (#3013)
  • Added on_paste to Input, Textarea, and Editor so applications can handle images and files from the clipboard instead of dropping them. (#3087)
  • Languages can register runtime parser factories through LanguageRegistry::register_parser_factory, so a Tree-sitter grammar no longer has to be linked into the binary. (#3039)
  • Fixed text descender clipping. (#3023)

Markdown and Text Rendering

  • Inline plugins through MarkdownPlugin and .plugin(...). Inline math parses by default, and the example adds [@user](mention:user) profile cards. Inline objects inherit surrounding formatting and links and participate in table column sizing. (#3031, #3070)
  • Streamed text fades in with TextView::stream_fade(true), or with custom timing and a word-by-word reveal through TextViewMotion. (#3082)
  • A Markdown image’s data: URL is decoded instead of fetched. (#3088)
  • Faster rendering: fewer and cheaper elements per Markdown frame, and a paragraph’s shaped text and highlights are kept across frames. (#3090, #3115)
  • Fixed inline-code layout in headings, list alignment, and inline-code fragments wrapping twice. (#3038, #3046)

Motion

  • Sequence chains transitions so a step starts when the previous one ends, each with its own duration, easing, and delay. (#3092)
  • gpui_base::init reads the operating system’s reduced-motion preference into App::reduce_motion, which every Base motion primitive already honors. (#3094)

Dock

  • Removed the tiles canvas. Split and Tabs are now the only container shapes; a freeform canvas is a panel the host implements. gpui_component::dock::Panel::title_bar lets a panel that carries its own chrome opt out of the tab group’s title bar. See Breaking Changes below. (#3036)
  • Added DockArea::select_panel to display a tab by PanelId wherever it sits, without moving it. (#3063)

Components

  • Button: a ghost button hovers with accent and presses with button_active, matching the outline button and other low-emphasis controls. (#3100)
  • Dialog: a dialog stays inside the window it opens in, and its own controls route to that dialog. (#3093, #3097)
  • Menu: a submenu opens from a scrollable PopupMenu, and shortcut hints paint on the frame the menu opens. (#3095, #3096)
  • Tab: fixed explicit scrolling to newly added tabs, and flex_1() tabs fill the tab bar again. (#3021, #3032)
  • List and Table: dropped the outline from the selected item, row, and cell; keyboard row navigation stops when row_selectable is off. (#3108, #3033)
  • Select: the search query clears when the menu closes. (#3050)
  • Setting: fixed number step and clamping in the delegate, and preserved the selected page while searching. (#3099, #3104)
  • Avatar: the initials fallback draws from an even OkLCH hue ring. (#3026)
  • ColorPicker: fixed duplicate accessibility node IDs. (#3028)
  • Chart and Plot: the hover animates, heavy geometry is cached, grids paint as quads, and tessellated line and area paths are cached. The chart gallery cards were reworked. (#3112, #3071)
  • List: trimmed the per-frame cost of a scrolling list. (#3085)
  • FPS: the readout leaves its own frame out of the readings, grades against the panel, and stops the clock while hidden. (#3025, #3029)

Documentation and Website

Added mobile guides, notification placement docs, and certified AI-facing consumer recipes. The website lets the browser draw emoji and CJK text the bundled fonts lack, skips the system font probe when no font is installed, and fixes the docs sidebar hover background. (#3062, #3109, #3057, #3106, #3044)

Thank you to everyone who contributed code, documentation, testing, and feedback!

What’s Changed

New Contributors

Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.1…v0.6.2

v0.6.1

GitHub

GPUI Kit v0.6.1

GPUI Kit v0.6.1 brings multi-cursor editing, automatic bracket pairing, smart indentation, and headless UI testing. This release also improves Markdown rendering, text selection, accessibility, and everyday component behavior.

Editor and Text Input

  • Multi-cursor editing with Alt-click to add cursors and Shift-Alt-drag for column selection. Column selections now preserve their width across short lines. (#2837, #2987)
  • Automatic bracket pairing and smart indentation on Enter, with configurable language rules and independent auto_close and smart_indent preferences. (#3018)
  • Improved search behavior: reopening search restores focus, preserves the active match, and reveals matches after manual scrolling. (#2932, #2953, #2955)
  • Fixed cursor movement across CRLF boundaries and pending syntax highlighting when switching languages. (#2986, #2994)
  • Fixed selection drag-autoscroll in virtualized lists and ensured scrolling stops when the selection gesture ends. (#2948, #2941)
  • Reduced unnecessary updates when scroll and paint state remain unchanged. (#2988)

Headless UI Testing

Applications can now test interactions and layout through gpui_kit::test, enabled by the test-support feature. The testing API supports scoped queries, native input events, state snapshots, and waiting for deferred updates.

This release also expands integration coverage across core controls, menus, dialogs, tables, and dock layouts, with separate Metal rendering checks on macOS. (#3005, #3019)

Markdown and Text Rendering

  • Added opt-in YAML frontmatter rendering through MarkdownExtensions::frontmatter() and FrontmatterPlugin. Supported mappings render as structured metadata; unsupported content falls back to a YAML code block. (#2850)
  • Corrected hard and soft line-break rendering. (#2945, #2947)
  • Improved inline code styling with rounded backgrounds and a monospace font. (#2949)
  • Fixed stale measurements when replacing a document with another containing the same number of blocks. (#2946)

Components and Accessibility

  • Button: added preferred tooltip placement and restored the selected background for ghost buttons. (#2971, #2938)
  • Select: exposed committed values, improved accessible activation, and made on_dismiss run consistently regardless of how the popup closes. (#2973, #2984)
  • Sidebar: added Styled support and label_style to SidebarMenuItem. (#2957)
  • Icons: added SVG byte support in component icon slots and shared Lucide icon names while preserving default icons. (#2980, #3020)
  • Fixed panel resizing flicker and list measurement when the configured measurement row is absent. (#2907, #2975)
  • Improved accessibility for dialog close buttons and calendar items. (#2969, #2996)
  • Added fallback to an installed monospace font when the default is unavailable. (#3009)

Runtime and Platform Improvements

  • Refined FPS reporting using frame cost and the display’s refresh rate, with sustained frames enabled by default. (#2944, #2954, #2956)
  • Restricted Windows native-menu uxtheme loading to System32. (#2974)
  • Updated Tree-sitter and removed the previous workaround. (#2990)

Documentation

The documentation website now uses Astro, with improved App Stories browsing and preserved sidebar scroll position. Component API documentation is separated from shared Kit guides, with expanded coverage of fonts, editor search, UI testing, and AI-assisted development.

Thank you to everyone who contributed code, documentation, testing, and feedback!

What’s Changed

New Contributors

Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.0…v0.6.1

v0.6.0

GitHub

GPUI Kit v0.6.0

v0.6.0 is a major expansion of the project since v0.5.0. The project is now GPUI Kit: a layered toolkit for building desktop applications with GPUI. This release introduces an unstyled foundation crate, a single-dependency facade, a scriptable application runtime, a substantially expanded component set, richer text editing and rendering, motion, accessibility, and new developer tooling.

This release note focuses on user-visible additions, improvements, API changes, and deprecations. It intentionally omits fixes made while the new v0.6.0 features were being developed.

GPUI Kit and the new crate architecture

The repository and ecosystem are now named GPUI Kit, and the documentation has moved to gpui-kit.com. GPUI Component remains the styled component layer within the toolkit. (#2927)

The new architecture separates reusable behavior from presentation:

  • gpui-kit is the recommended facade for applications. It re-exports GPUI and the enabled Kit layers, provides application(), init(), and an actions! macro, and keeps matching GPUI dependencies together.
  • gpui-base provides unstyled behavior, state, interaction, and infrastructure primitives. It includes text editing and rich text, selection, dock layout, virtual lists, dialogs, popovers, controls, motion, history, and navigation foundations.
  • gpui-component remains the complete styled UI system and builds on gpui-base.
  • gpui-shell is a new scriptable application runtime that lets a Rust host expose GPUI capabilities to JavaScript. (#2821)
  • gpui-fps adds a real-time FPS and resource HUD, including CPU, memory, GPU, and frame-tail reporting. (#2704)
  • gpui-wry is now the standalone WebView integration crate.

Applications may continue depending directly on gpui-component, or adopt the new facade:

[dependencies]
gpui-kit = "0.6"
use gpui_kit::*;
use gpui_kit::component::Root;

fn main() {
    gpui_kit::application().run(|cx| {
        gpui_kit::init(cx);
        // Open windows and build the application here.
    });
}

New components and application building blocks

The styled component library has grown well beyond the v0.5.0 surface:

  • Application structure: Command palette, NativeMenu, StatusBar, Pagination, Stepper, HoverCard, AlertDialog, FocusTrap, and a redesigned declarative Dialog API.
  • Data entry and display: Combobox, Rating, ProgressCircle, a new lightweight declarative Table, and multi-row headers, cell selection, custom row heights, resizing constraints, and batched export for DataTable.
  • Communication UI: composable Message, MessageScroller, Bubble, Attachment, and Marker components for chat and assistant-style interfaces. (#2832)
  • Loading and feedback: Shimmer, animated progress states, configurable notification placement and width, dismiss callbacks, and optional OS notification-center delivery.
  • Navigation: NavStack provides browser-style push, back, and forward navigation with animated transitions. (#2922)

Existing controls received broader composition and interaction APIs, including context menus for sidebar and tree items, async submenus, collapsible sidebar modes, animated tabs and tooltips, programmatic resizable panels, reverse sliders, configurable calendar week starts, accessible labels and control IDs, and drag-and-drop support for list items.

Text editing, rich text, and selection

Text editing is now split into purpose-built controls:

  • Input / InputState for single-line text, masks, validation, and number entry.
  • Textarea / TextareaState for multiline text, rows, soft wrapping, auto-grow, and chat-style submit behavior.
  • Editor / EditorState for code editing, highlighting, line numbers, folding, decorations, diagnostics, search, replacement, and LSP integration. (#2691)

The editor adds transaction-based undo, code folding, inline completions, semantic tokens, document colors, configurable wrapping indent, selection APIs, readonly mode, replace/replace-all actions, and broader syntax highlighting. Tree-sitter language support is now split into per-language Cargo features, so applications can select only the grammars they need.

TextView now lives in gpui-base, with the existing gpui_component::text API retained as a compatibility facade. Rich text gains incremental Markdown parsing, inline and local images, Markdown extensions/plugins, math blocks, table actions and horizontal scrolling, source-preserving copy, link-click handling, multi-click selection, drag auto-scroll, and max_lines. A new SelectableText element participates in window-level selection without requiring a rich-text document. (#2881)

Window-level TextSelection can combine selection across multiple TextView and SelectableText regions, enabling document-like selection and copying across independently rendered elements.

Docking, layout, and scrolling

Docking now has a reusable pure-data layout foundation in gpui-base. It supports serializable tiles, tab groups, split resizing, drag/drop placement reporting, undo/redo, animated drop placeholders, snapping neighboring panel edges, and LayoutChanged events. This makes dock layout state usable independently of the styled dock UI.

Scrolling behavior has been revised for better interoperability between nested scroll containers. Highlights include explicit Scrollable identity, axis locking for trackpad gestures, improved scrollbar visibility transitions, responsive Markdown tables, and width-aware virtual-list measurement.

Motion and visual system

gpui-base::motion introduces a layered animation system with keyframes, timing functions, spring motion, presence transitions, staggered animation, reveal helpers, and interpolation. Components now use spring transitions where targets can change during an active animation. (#2866)

The theme system adds gradient backgrounds, global radius consistency, configurable focus rings, selection and Markdown-table semantic colors, custom primary-button and switch colors, and improved dark-mode syntax highlighting. Form controls, popovers, tabs, sliders, and scrollbars have been visually refined for clearer interaction states.

Charts and visualization

Charts gain:

  • SankeyChart and RadarChart.
  • Candlestick charts.
  • Interactive hover tooltips.
  • Negative bar values and a value axis.
  • Arbitrary fills such as gradients, per-bar corner radii, grid and x-axis options.
  • Pie-chart leader-line labels and Radar-chart element labels.
  • More efficient Sankey topology and deduplicated, value-indexed band scales.

Accessibility and platform integration

Accessibility information is now exposed across the component set, including roles, labels, values, toggle state, and stable control IDs. Buttons and checkboxes support role overrides and presentational roles, while editable controls expose their values to accessibility clients.

Native integration expands with OS-native application and context menus, menu item images, improved Linux client-side decorations, window-manager-aware title-bar controls, notification-center bridging, and an owned raw Wry WebView handle.

Performance and developer experience

  • Large editor documents now use a SumTree-based wrapping cache, incremental foreground parsing, bounded syntax injections, and cheaper rewrapping and outdent paths.
  • Large TextView replacements are parsed off the UI thread, while Markdown blocks are shared instead of cloned each frame.
  • Dock, input, notification, color-picker, chart tooltip, and shell rendering paths avoid redundant work and unnecessary rerenders.
  • The new gpui-fps HUD reports presented frames and process resource use for profiling live applications.
  • The documentation site now includes English and Chinese references for GPUI Base, GPUI Shell, the component library, design guidance, coding guidance, and runnable examples.
  • A distributable GPUI Kit skill bundles the design and coding guides for coding agents.

Breaking API changes and migration

Input, Textarea, and Editor are separate APIs

InputState is now single-line only. Migrate multiline inputs to TextareaState and code editors to EditorState:

- use gpui_component::input::{Input, InputState};
+ use gpui_component::input::{Textarea, TextareaState};

- InputState::new(window, cx).multi_line(true).auto_grow(3, 8)
+ TextareaState::new(window, cx).auto_grow(3, 8)
- InputState::new(window, cx).code_editor("rust")
- Input::new(&state)
+ EditorState::new("rust", window, cx)
+ Editor::new(&state)

Input-only adornments such as prefix, suffix, the mask toggle, and the clear button are not properties of Textarea or Editor; compose those actions around the control instead.

Table names

The former stateful Table is now DataTable. Table names the new declarative table element. (#2075)

- use gpui_component::table::Table;
+ use gpui_component::table::DataTable;

The selector-column option was renamed from row_selector to row_header. (#2366)

Divider is now Separator

The module, types, and DescriptionList method were renamed. (#2335)

- gpui_component::divider::Divider
+ gpui_component::separator::Separator

- DescriptionList::divider()
+ DescriptionList::separator()
List and table pagination delegates

ListDelegate::is_eof and TableDelegate::is_eof were renamed to has_more, with the semantics made explicit and the default set to false. (#1757)

WebView moved to gpui-wry

The gpui-component webview feature was removed. Depend on the standalone gpui-wry crate instead. (#1759)

History is split by purpose

The former undo-oriented History<T: HistoryItem> API and HistoryItem trait were removed. Use:

  • History<T> for browser-style navigation with back/forward semantics.
  • UndoHistory<T> for grouped undo/redo transactions. (#2923)
Dock construction and extension APIs were redesigned

Dock persistence keeps the v0.5.0 JSON shape, but the Rust construction and extension APIs changed as the dock was split into an unstyled data/behavior layer and a styled renderer. (#2772)

  • DockItem was replaced by the pure-data DockLayout builder.
  • Styled applications should wrap panels with panel_handle and use the panel_view, tile_view, add_panel_view, and add_tile_view entry points.
  • The old Panel trait is split between gpui_base::dock::Panel for behavior and gpui_component::dock::Panel for presentation.
  • The entity formerly named TabPanel is now gpui_base::dock::TabGroup; styled TabPanel is a renderer.
  • The tiles entity is now TilesState; Tiles is its renderer.
  • StackPanel and the public Dock entity were removed. Manage layouts through DockArea and DockPlacement.
  • Placement-specific accessors such as left_dock() and setters such as set_left_dock() were replaced by layout(placement), set_dock, set_dock_size, is_dock_open, and remove_dock.
  • DockEvent::DragDrop(item) is now DockEvent::DragDrop { item, target }, exposing where a host drag item landed. (#2661)
Dialog and chart tooltip construction
  • Dialog::new(window, cx) is now Dialog::new(cx). The declarative dialog API uses trigger, content, DialogHeader, DialogTitle, DialogDescription, and DialogFooter. (#2067)
  • Low-level chart tooltip construction now uses Tooltip::new(cursor, bounds); Tooltip::position() and TooltipPosition were removed. TooltipState::new no longer takes a position argument, and CrossLine is dashed by default. (#2500)
Smaller source-level changes
  • popover_style moved from the StyledExt trait to ThemeStyled. (#2726)
  • ScaleBand categorical domains now require Eq + Hash rather than PartialEq; the bound also applies to the band type used by BarChart and CandlestickChart. (#2885)
  • Boolean readers were normalized: can_go_to_definition() is now has_definition(), while dock readers such as can_zoom() and can_close() are now is_zoomable() and is_closable(). (#2810)
  • The default wrapping indent for multiline editors is now WrappingIndent::Same.
  • Editor now defaults to the theme’s monospace font and derives row height from its configured font size. Explicit .font_family() and .text_size() overrides still take precedence. (#2794)
Public seam structs now use builders and accessors

Several public context and snapshot structs now have private fields so they can evolve compatibly. Replace struct literals and direct field reads with their constructors, builders, and accessors. (#2706)

Affected APIs include:

  • InputContextMenuCapabilities
  • InputPresentation
  • CalendarItemState
  • ComboboxTriggerCtx, renamed to ComboboxTriggerContext
  • setting::RenderOptions

For example:

- capabilities.disabled
- capabilities.selection
+ capabilities.is_disabled()
+ capabilities.has_selection()

- CalendarItemState { kind, active, .. }
+ CalendarItemState::new(kind).active(active)
GPUI and package names
  • The workspace now targets the gpui-pre 0.3.x family rather than GPUI 0.2.x, bringing the corresponding upstream GPUI API changes.
  • The assets package is now gpui-kit-assets (Rust path gpui_kit_assets) instead of gpui-component-assets.
  • The project uses Rust edition 2024.

Deprecated APIs

  • animation::Transition is retained as a deprecated alias; use animation::EffectTransition. This is distinct from the new motion::Transition timing policy.
  • EasingError::InvalidBezierX is retained for source compatibility; use EasingError::InvalidBezierControlPoint.
  • AlertDialog::overlay_closable is deprecated because alert dialogs intentionally cannot be dismissed by pressing the backdrop.
  • Root::clear_text_selection and the window text-selection extension methods selected_text, has_text_selection, clear_text_selection, and end_text_selection are deprecated; use the corresponding gpui_base::TextSelection APIs.
  • SearchableListDelegate::section is deprecated; implement render_section_header to receive Window and App access.

Thanks to all contributors

@zanmato @FlyingYu-Z @duanebester @stayhydated @CherryWorm @Moulberry @stippi

And thanks to all our first-time contributors:

Thank you for helping make GPUI Kit better! ❤️

v0.5.1

GitHub
  • chore: Fix compilation errors on macOS caused by core-text dependency.

v0.5.0

GitHub

ColorPicker

ContextMenu

Divider

image

Dock

Editor

https://github.com/user-attachments/assets/8e437f1e-9792-4417-b070-0a1dd8de6024

  • editor: Improve scroll to support position at the edge of the editor on click by @huacnlee in #1672
  • editor: Fix cursor direction not resetting after mouseup by @FlyingYu-Z in #1708

Input

image
  • input: Fix resetting highlighting for single line code editor by @zanmato in #1742
  • input: Fix wrong font being used in Input by @zanmato in #1706

List

Menu

  • menu: Use defer to avoid race conditions with click listeners by @zanmato in #1651
  • menu: Add check_side to PopupMenu to support display check at right side by @huacnlee in #1677

Chat

SCR-20251126-puzm image

Scrollbar

Refactor Scrollbar API to easy to use, and tidy scrollbar position in entire of components.

image
  • scrollbar: Remove Scrollbar::uniform_scroll, use Scrollbar::vertical instead by @huacnlee in #1659
  • scrollbar: Manage ScrollbarState in Scrollbar internal by @huacnlee in #1690
  • scrollbar: Introduce overflow_scrollbar to adds Scrollbars to elements by @huacnlee in #1694

Setting

https://github.com/user-attachments/assets/3c6315d9-1183-419c-bb17-a8f7ac0cf25c

Sidebar

Table

  • table: Refactor TableDelegate to easy to access delegate by @huacnlee in #1712
  • table: Add render_header method to support custom table header by @huacnlee in #1746

Tab

  • tab: Allow tab item to fill remaining space by @obito-t in #1654

TextView

  • text_view: Adding optional code block actions to the TextView by @duanebester in #1725 Screenshot 2025-12-01 at 8 38 22 PM

Theme

TitleBar

  • title_bar: Improve Styled support to TitleBar by @huacnlee in #1693
  • title_bar: Fix TitleBar drag area on macOS, and only handle show window menu when it supports by @huacnlee in #1710
  • title_bar: Remove window control bg color in normal mode by @huacnlee in #1720

Webview

Others

Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.4.2…v0.5.0

v0.4.2

GitHub
  • menu: Use defer to avoid race conditions with click listeners by @zanmato in #1651
  • input: Fix scroll to offset to support soft wrap mode. by @huacnlee in #1671
  • editor: Improve scroll to support position at the edge of the editor on click. by @huacnlee in #1672
  • tab: Allow tab item to fill remaining space. by @obito in #1654
  • chore: Upgrade tracing-subscriber to fix CVE-2025-58160 @orbisai0security by in #1678

v0.4.1

GitHub

Button

  • button: Add dropdown_caret option to show a caret icon to end of button. by @huacnlee in #1637

Chart

Dock

  • dock: Don’t close tab via action when it can’t be closed via context menu by @CherryWorm in #1581
  • dock: Add a way for Panels to track the tab bar they belong to by @CherryWorm in #1580

DropdownButton

  • dropdown_button: Add more button option methods to DropdownButton. by @huacnlee in #1633

Editor

  • editor: Fix may crash on render indent guides. by @huacnlee in #1619

Icon

Input

List

Menu

Notification

  • notification: Fix close animation not working when closed from content by @Moulberry in #1578

NumberInput

Resizable

  • resizable: Improve to avoid panels from improperly resizing on container resizing. by @CherryWorm in #1560

Resizable & Dock

  • resizable, dock: Improve Panel adjust size logic on layout changed. by @CherryWorm in #1588

Root

  • root: Improve new method argument to use into <AnyView>. by @huacnlee in #1594

Select

  • select: Add render prop to customize item title display. by @obito-t in #1638

Sidebar

  • sidebar: Improve Sidebar to allows caret icon to expand submenu. by @huacnlee in #1642
  • sidebar: Add to support disable state to sidebar item. by @adriano-tumino in #1645

Slider

Table

Theme

Tiles

  • tiles: Add auto-snap support for tiles panel to top and left edges by @ihavecoke in #1577

New Contributors

Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.4.0…v0.4.1

v0.4.0

GitHub

Break Change

In this version we have make a lot of breaking changes to improve the overall API consistency and usability.

If you are upgrading from v0.3.x, please check the changelog carefully and adjust your code accordingly, the PR links are provided for more details of each change.

  • breadcrumb: Rename item to child and add children method. by @huacnlee in #1519
  • clipboard: Removed content method from Clipboard. by @huacnlee in #1520
  • dialog: Rename Modal to Dialog. by @huacnlee in #1538
  • form: Renamed column to columns. by @huacnlee in #1522
  • form: Rename FormField to Field. by @huacnlee in #1539
  • input, select, date_picker: Refactor cleanable to have argument and default to false. by @Moulberry in #1506
  • list, table: Refactor List, Table to have ListState, TableState. by @huacnlee in #1468
  • notification: Add &mut Self to content and action method. by @huacnlee in #1569
  • radio: Rename on_change to on_click for RadioGroup. by @huacnlee in #1517
  • resizable: Simplify Resizable API. by @huacnlee in #1459
  • select, list: Update searchable default to false. by @huacnlee in #1504
  • sheet: Rename Drawer to Sheet. by @huacnlee in #1527
  • spinner: Rename Indicator to Spinner. by @huacnlee in #1526
  • tab: Refactor creation to use builder pattern by @madcodelife in #1553
  • table: Change context_menu method in TableDelegate to mutable window and cx. by @huacnlee in #1487
  • toggle: Refactor Toggle, ToggleGroup API. by @huacnlee in #1515

What’s New

Assets
Button
Chart
Collapsible
ContextMenu
  • context_menu: Fix ContextMenu to cover parent element area. by @huacnlee in #1566
Input & Editor
Field
Label
  • label: Fix Label highlight may crash of not a char boundary. by @huacnlee in #1574
List
  • list: Fix incorrect next selection when select index is none by @madcodelife in #1498
  • list: Add searchable, search_placeholder option to List and Select. by @huacnlee in #1503
  • list: Avoid select item when selectable(false). by @huacnlee in #1508
Menu
  • menu: Add item and export PopupMenuItem with builder methods to PopupMenu. by @huacnlee in #1445
  • menu: Fix #1545 Popover change broken submenu click in dropdown menu. by @huacnlee in #1563
Modal
  • modal, drawer: Block background interaction when Modal, Drawer is active. by @FlyingYu-Z in #1483
  • modal: Adjust close button position. by @huacnlee in #1532
NumberInput
Popover
Progress
Select
Slider
Tab
  • tab: Use on_click instead of action for TabBar dropdown menu. by @huacnlee in #1454
Table
Theme
  • theme: Export more theme options for schema. by @huacnlee in #1442
  • theme: Allows to use alpha color for active_border but at least 0.3. by @obito-t in #1531
Tiles
  • tiles: Add tile_radius theme option and default 0px. by @huacnlee in #1441
  • tiles: Add scrollbar_show option to Tiles by @ihavecoke in #1496
  • tiles: Add to support panel auto-snap while drag movement by @ihavecoke in #1552
WebView
  • webview: Add inspector feature to enable WebView developer tools by @ihavecoke in #1564

Other Changes

New Contributors

Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.3.1…v0.4.0

v0.3.1

GitHub

What’s Changed

Input
Editor
List
Tiles
Theme
Example
Others

New Contributors

Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.3.0…v0.3.1

v0.3.0

GitHub

New features

Button

Checkbox

Dropdown

  • dropdown: Use display_title for item title if present by @stippi in #1410

Editor

Highlighter

  • highlighter: Make SyntaxHighlighter::styles method public for external use by @huacnlee in #1415

Input

  • input: impl Selectable for TextInput that allow it as trigger for popover by @richerfu in #1353
  • input: Fix set_value when Input is disabled by @huacnlee in #1362
  • input: Grouping input history to avoid IME placeholder by @huacnlee in #1375
  • input: Fix Input panics when masked have non-ASCII characters by @huacnlee in #1382
  • input: Stop propagation on scroll wheel by @huacnlee in #1406
  • input: Hide scrollbar when not overflow in auto grow mode by @huacnlee in #1407
  • input: Fix Input to prepare text wrapper by @huacnlee in #1417

Markdown

  • markdown: Use list for Markdown render and add scrollbar by @huacnlee in #1357

Menu

  • menu: Fix submenu item selection when multiple submenus exist by @ihavecoke in #1342
  • menu: Fix trigger action with context by @huacnlee in #1372

Plot

Scrollbar

  • scrollbar: Fix scroll to show mode by @huacnlee in #1381
  • scrollbar: Update scrollbar background color to transparent for all themes by @huacnlee #1421

VirtualList

  • virtual_list: Fix VirtualList to limit only allow 1 direction scrollable by @huacnlee in #1386
  • virtual_list: Fix VirtualList by measure item to get correct content_size to avoid scroll overflow by @huacnlee in #1388

Docs

Documentation website is online: https://longbridge.github.io/gpui-component

Others

New Contributors

v0.2.0

GitHub

🚀 First release version to crates.io.

Improvements

Input & Text
Editor
TextView & Highlight
  • Refactor TextView/SyntaxHighlighter with async parsing to improve performance by @sunli829 (#1299)
  • Support custom code block style by @huacnlee (#1288)
Theme & Style
Menu & Context

Bug Fixes

Chores & Internal

New Contributors

Full Changelog: https://github.com/longbridge/gpui-component/compare/v20250925…v0.2.0