Release notes
Every published version of GPUI Kit, with the notes from its GitHub release. The newest version comes first.
- Latest GPUI Kit v0.7.3
- 17 releases
- All releases on GitHub
GPUI Kit v0.7.3
GPUI Kit v0.7.3
GPUI Kit v0.7.3 replaces v0.7.2, which is yanked: it contains every v0.7.2 change and moves GPUI to the gpui-pre 0.3.9 snapshot. Upgrade from v0.7.1 or v0.7.2 directly to v0.7.3.
This release adds a readonly Diff viewer with a Git history example, an optional GPUI Fast backend, and configurable dialog entrances. It refreshes TextView typography and improves text selection, Editor completions, tables, menus, tooltips and accessibility, and stops several per-frame state writes that made long scrolling views rebuild.
New components and runtime
- Diff: display application-supplied unified or Git patches with the virtualized, readonly
Diffview.DiffFile::parseprepares each file and oneDiffStateshows them all, with Unified or Split layout (DiffMode), syntax highlighting, folding, change navigation, inline word or character emphasis, soft wrapping, annotations, and two-way or diff3 conflict display. Applications own patch loading, review comments and saving. (#3378) - Git history example:
examples/tigis a desktop Git history browser built on Diff, with a resizable commit and file sidebar, Split layout and a settings menu; the Diff review APIs it needed are complete. (#3388) - GPUI snapshot: exact snapshot dependencies are updated to
=0.3.9(zed@93d7456), and the optional GPUI Fast backend requiresgpui-fast0.1.7 on the same snapshot. (#3459) - GPUI Fast backend: enable the optional
gpui-fastfeature (gpui-kit = { version = "0.7", features = ["gpui-fast"] }) to run on GPUI Fast instead of the default gpui-pre backend. Imports and macros are unchanged, and Windows applications embed a single manifest. (#3375, #3380) - Fewer rebuilds: selectable text, the text selection layer,
Root, inputs,TextViewStateand resizable panels no longer write state on frames where nothing changed, so retained views under GPUI Fast stay on their scroll layer. (#3407, #3418)
Editor and text input
- On-demand completions: dispatch the Editor-only
ShowCompletionsaction or callshow_completionsto request suggestions from a command, menu or application shortcut; no default shortcut is bound. (#3411) - Programmatic multi-cursor:
InputState::add_selectionadds a selection while keeping the existing ones, enabling features such as select all occurrences. (#3403) - Context menus: an input keeps its selection and focus ring while its context menu is open, and submenus inherit the parent menu’s
action_context, so actions such as Select All reach the source Textarea. Customon_context_menubuilders now run after the input is released and can read its cursor and text. (#3382, #3433) - Fixed completion and code-action popups lagging one frame behind the caret, and auto-grow Textareas collapsing to
min_rowsafterset_auto_growchanges the limits. (#3412, #3430)
Markdown and text rendering
- Typography: TextView headings build hierarchy with weight, sizes and spacing scale with the inherited font size, and lists, code, links and tables are more restrained. See Behavior changes. (#3371)
- Selection: mouse selections include block
MarkdownPlugincontent as whole blocks, completed selections survive style, zoom and width changes, and the selection paints under the glyphs so opaque selection colors keep text readable. (#3373, #3390, #3421, #3439) - Tables: narrow columns size from measured text width and stay on one line, and rounded table frames keep clean corners at any horizontal scroll offset.
RoundedFrameCoveris available for application frames with their own rounded scroll viewports. (#3399, #3309, #3400) - Fixed inline
<mark>highlights in Markdown, includingcolorandbackground-colorattributes. (#3425)
Components
- Dialog: choose an entrance with
entrance(DialogEntrance::Fade),FadeSlide,Noneor the defaultSlideDownonDialogandAlertDialog;AlertDialog::margin_topmoves an alert off the default top offset. (#3405, #3404) - Tooltip: install
TooltipDefaultsto set the application-wide show delay and grace period, or override one trigger withtooltip_show_delay. (#3376) - DataTable:
header_row_heightsets header rows apart from body rows; the sort icon is a labelled button;visible_rows_changedreports one-row and empty tables; a right-clicked cell’s outline clears on the next click, exposed throughTableState::right_clicked_cell. (#3420, #3396, #3397, #3413) - ContextMenu: a long press opens the menu on touch devices, and the menu takes focus before its first frame, avoiding a debug-build abort with accessibility active. (#3393, #3422)
- TabBar: clicking a clipped tab scrolls it into view with the next tab peeking. (#3419)
- Dock: closing the focused tab hands focus to the tab that replaces it. (#3409)
- DropdownButton:
menu_accessibility_labelnames the caret-only menu trigger, with a localized “More options” default. (#3410) - Settings: focus rings stay inside the list viewport. (#3394)
- UI tests:
Progress,ProgressCircleandTitleBarcan be found withTestWindowExt::find. (#3383)
Documentation
- Focus and dialogs: the guides explain recovering focus when the focused element stops rendering, and the
open_dialogbuilder and footer contracts. (#3386, #3406)
Behavior changes
TextView renders with new default typography. Heading sizes follow the inherited font size, the paragraph gap is 0.75rem (was 1rem), and list, inline code, link and table cell styling change. The paragraph gap, headings and code blocks can be restored through the existing style hooks. (#3371)
TextViewStyle::default()
+ .paragraph_gap(rems(1.))
Table column widths in the default wrap layout change for most Markdown tables. A drag that starts and ends inside the same block plugin no longer selects it. (#3399, #3390)
While a context menu is open, focus that the application moves elsewhere is no longer pulled back to the menu. (#3422)
TableDelegate::visible_rows_changed now fires with 0..1 for a one-row table and 0..0 when the rows drop to none, and its end never passes rows_count. (#3397)
TooltipRequest::placement is deprecated in favor of with_placement. (#3376)
- TooltipRequest::new(bounds, build).placement(Placement::Right)
+ TooltipRequest::new(bounds, build).with_placement(Placement::Right)
Thank you to everyone who contributed code, documentation, testing, and feedback!
What’s Changed
- text_view: Improve default typography by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3371
- text_view: Include block plugins in mouse selections by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3373
- kit: Add optional gpui-fast backend by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3375
- tooltip: Make show delay and grace period configurable with
TooltipDefaultsby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3376 - docs: Explain recovering focus when the focused element stops rendering by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3386
- diff: Add readonly patch viewer by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3378
- kit: Use one Windows manifest with GPUI Fast by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3380
- test: Make Progress and TitleBar findable in UI tests by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3383
- input: Preserve selection, focus ring and context menu actions by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3382
- diff: Add a Git history example and complete review APIs by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3388
- text_view: Ignore gestures that stay inside one block plugin by @ylinwind in https://github.com/longbridge/gpui-kit/pull/3390
- text_view: Round the first and last table rows to the frame radius by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3309
- menu: Open a context menu with a long press on touch by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3393
- text_view: Keep narrow table columns on one line by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3399
- settings: Keep focus rings inside the list viewport by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3394
- scrollable_mask: Keep rounded scroll-table corners clean at any scroll offset by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3400
- dialog: Add margin_top to AlertDialog by @xxww0098 in https://github.com/longbridge/gpui-kit/pull/3404
- input: Add InputState::add_selection for programmatic multi-cursor by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3403
- text_selection: Stop writing selection state on every frame by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3407
- table: Make the sort icon a labelled button by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3396
- table: Report visible row ranges of one row or none by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3397
- dialog: Support configurable entrance animations by @xxww0098 in https://github.com/longbridge/gpui-kit/pull/3405
- docs: Explain the open_dialog builder and footer contracts by @xxww0098 in https://github.com/longbridge/gpui-kit/pull/3406
- dock: Hand the focus to the tab that replaces a closed one by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3409
- dropdown_button: Add A11y names for the menu trigger by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3410
- text, resizable: Stop notifying state that did not change by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3418
- editor: Add on-demand completion commands by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3411
- table: Clear a right-clicked cell’s outline on the next click by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3413
- tab: Scroll a clicked tab into view with the next one peeking by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3419
- table: Allow a header row height separate from the body by @xhofe in https://github.com/longbridge/gpui-kit/pull/3420
- menu: Focus a context menu before its first frame by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3422
- text: Preserve logical selection across presentation changes by @TomiXRM in https://github.com/longbridge/gpui-kit/pull/3421
- text: Keep inline HTML mark highlights in Markdown by @henrikogaard in https://github.com/longbridge/gpui-kit/pull/3425
- input: Anchor completion/code-action popups to the current frame’s caret by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3412
- input: Run custom context menu builders after releasing the input by @costajohnt in https://github.com/longbridge/gpui-kit/pull/3433
- input: Keep auto-grow rows fitted when the limits change by @sneffets in https://github.com/longbridge/gpui-kit/pull/3430
- text: Paint TextView selection under the glyphs by @cesartalen in https://github.com/longbridge/gpui-kit/pull/3439
- kit: Prepare v0.7.2 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3458
- kit: Update GPUI to gpui-pre 0.3.9 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3459
- kit: Update GPUI to gpui-pre 0.3.9 and prepare v0.7.3 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3460
New Contributors
- @xxww0098 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3404
- @sola-ryu made their first contribution in https://github.com/longbridge/gpui-kit/pull/3403
- @xhofe made their first contribution in https://github.com/longbridge/gpui-kit/pull/3420
- @TomiXRM made their first contribution in https://github.com/longbridge/gpui-kit/pull/3421
- @henrikogaard made their first contribution in https://github.com/longbridge/gpui-kit/pull/3425
- @costajohnt made their first contribution in https://github.com/longbridge/gpui-kit/pull/3433
- @sneffets made their first contribution in https://github.com/longbridge/gpui-kit/pull/3430
- @cesartalen made their first contribution in https://github.com/longbridge/gpui-kit/pull/3439
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.7.1…v0.7.3
v0.7.2
[!WARNING] v0.7.2 is yanked from crates.io and replaced by v0.7.3, which contains every change below and moves GPUI to the gpui-pre 0.3.9 snapshot. Upgrade to v0.7.3.
GPUI Kit v0.7.2 adds a readonly Diff viewer with a Git history example, an optional GPUI Fast backend, and configurable dialog entrances. It refreshes TextView typography and improves text selection, Editor completions, tables, menus, tooltips and accessibility, and stops several per-frame state writes that made long scrolling views rebuild.
New components and runtime
- Diff: display application-supplied unified or Git patches with the virtualized, readonly
Diffview.DiffFile::parseprepares each file and oneDiffStateshows them all, with Unified or Split layout (DiffMode), syntax highlighting, folding, change navigation, inline word or character emphasis, soft wrapping, annotations, and two-way or diff3 conflict display. Applications own patch loading, review comments and saving. (#3378) - Git history example:
examples/tigis a desktop Git history browser built on Diff, with a resizable commit and file sidebar, Split layout and a settings menu; the Diff review APIs it needed are complete. (#3388) - GPUI Fast backend: enable the optional
gpui-fastfeature (gpui-kit = { version = "0.7", features = ["gpui-fast"] }) to run on GPUI Fast instead of the default gpui-pre backend. Imports and macros are unchanged, and Windows applications embed a single manifest. (#3375, #3380) - Fewer rebuilds: selectable text, the text selection layer,
Root, inputs,TextViewStateand resizable panels no longer write state on frames where nothing changed, so retained views under GPUI Fast stay on their scroll layer. (#3407, #3418)
Editor and text input
- On-demand completions: dispatch the Editor-only
ShowCompletionsaction or callshow_completionsto request suggestions from a command, menu or application shortcut; no default shortcut is bound. (#3411) - Programmatic multi-cursor:
InputState::add_selectionadds a selection while keeping the existing ones, enabling features such as select all occurrences. (#3403) - Context menus: an input keeps its selection and focus ring while its context menu is open, and submenus inherit the parent menu’s
action_context, so actions such as Select All reach the source Textarea. Customon_context_menubuilders now run after the input is released and can read its cursor and text. (#3382, #3433) - Fixed completion and code-action popups lagging one frame behind the caret, and auto-grow Textareas collapsing to
min_rowsafterset_auto_growchanges the limits. (#3412, #3430)
Markdown and text rendering
- Typography: TextView headings build hierarchy with weight, sizes and spacing scale with the inherited font size, and lists, code, links and tables are more restrained. See Behavior changes. (#3371)
- Selection: mouse selections include block
MarkdownPlugincontent as whole blocks, completed selections survive style, zoom and width changes, and the selection paints under the glyphs so opaque selection colors keep text readable. (#3373, #3390, #3421, #3439) - Tables: narrow columns size from measured text width and stay on one line, and rounded table frames keep clean corners at any horizontal scroll offset.
RoundedFrameCoveris available for application frames with their own rounded scroll viewports. (#3399, #3309, #3400) - Fixed inline
<mark>highlights in Markdown, includingcolorandbackground-colorattributes. (#3425)
Components
- Dialog: choose an entrance with
entrance(DialogEntrance::Fade),FadeSlide,Noneor the defaultSlideDownonDialogandAlertDialog;AlertDialog::margin_topmoves an alert off the default top offset. (#3405, #3404) - Tooltip: install
TooltipDefaultsto set the application-wide show delay and grace period, or override one trigger withtooltip_show_delay. (#3376) - DataTable:
header_row_heightsets header rows apart from body rows; the sort icon is a labelled button;visible_rows_changedreports one-row and empty tables; a right-clicked cell’s outline clears on the next click, exposed throughTableState::right_clicked_cell. (#3420, #3396, #3397, #3413) - ContextMenu: a long press opens the menu on touch devices, and the menu takes focus before its first frame, avoiding a debug-build abort with accessibility active. (#3393, #3422)
- TabBar: clicking a clipped tab scrolls it into view with the next tab peeking. (#3419)
- Dock: closing the focused tab hands focus to the tab that replaces it. (#3409)
- DropdownButton:
menu_accessibility_labelnames the caret-only menu trigger, with a localized “More options” default. (#3410) - Settings: focus rings stay inside the list viewport. (#3394)
- UI tests:
Progress,ProgressCircleandTitleBarcan be found withTestWindowExt::find. (#3383)
Documentation
- Focus and dialogs: the guides explain recovering focus when the focused element stops rendering, and the
open_dialogbuilder and footer contracts. (#3386, #3406)
Behavior changes
TextView renders with new default typography. Heading sizes follow the inherited font size, the paragraph gap is 0.75rem (was 1rem), and list, inline code, link and table cell styling change. The paragraph gap, headings and code blocks can be restored through the existing style hooks. (#3371)
TextViewStyle::default()
+ .paragraph_gap(rems(1.))
Table column widths in the default wrap layout change for most Markdown tables. A drag that starts and ends inside the same block plugin no longer selects it. (#3399, #3390)
While a context menu is open, focus that the application moves elsewhere is no longer pulled back to the menu. (#3422)
TableDelegate::visible_rows_changed now fires with 0..1 for a one-row table and 0..0 when the rows drop to none, and its end never passes rows_count. (#3397)
TooltipRequest::placement is deprecated in favor of with_placement. (#3376)
- TooltipRequest::new(bounds, build).placement(Placement::Right)
+ TooltipRequest::new(bounds, build).with_placement(Placement::Right)
Thank you to everyone who contributed code, documentation, testing, and feedback!
What’s Changed
- text_view: Improve default typography by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3371
- text_view: Include block plugins in mouse selections by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3373
- kit: Add optional gpui-fast backend by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3375
- tooltip: Make show delay and grace period configurable with
TooltipDefaultsby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3376 - docs: Explain recovering focus when the focused element stops rendering by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3386
- diff: Add readonly patch viewer by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3378
- kit: Use one Windows manifest with GPUI Fast by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3380
- test: Make Progress and TitleBar findable in UI tests by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3383
- input: Preserve selection, focus ring and context menu actions by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3382
- diff: Add a Git history example and complete review APIs by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3388
- text_view: Ignore gestures that stay inside one block plugin by @ylinwind in https://github.com/longbridge/gpui-kit/pull/3390
- text_view: Round the first and last table rows to the frame radius by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3309
- menu: Open a context menu with a long press on touch by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3393
- text_view: Keep narrow table columns on one line by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3399
- settings: Keep focus rings inside the list viewport by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3394
- scrollable_mask: Keep rounded scroll-table corners clean at any scroll offset by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3400
- dialog: Add margin_top to AlertDialog by @xxww0098 in https://github.com/longbridge/gpui-kit/pull/3404
- input: Add InputState::add_selection for programmatic multi-cursor by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3403
- text_selection: Stop writing selection state on every frame by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3407
- table: Make the sort icon a labelled button by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3396
- table: Report visible row ranges of one row or none by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3397
- dialog: Support configurable entrance animations by @xxww0098 in https://github.com/longbridge/gpui-kit/pull/3405
- docs: Explain the open_dialog builder and footer contracts by @xxww0098 in https://github.com/longbridge/gpui-kit/pull/3406
- dock: Hand the focus to the tab that replaces a closed one by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3409
- dropdown_button: Add A11y names for the menu trigger by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3410
- text, resizable: Stop notifying state that did not change by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3418
- editor: Add on-demand completion commands by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3411
- table: Clear a right-clicked cell’s outline on the next click by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3413
- tab: Scroll a clicked tab into view with the next one peeking by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3419
- table: Allow a header row height separate from the body by @xhofe in https://github.com/longbridge/gpui-kit/pull/3420
- menu: Focus a context menu before its first frame by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3422
- text: Preserve logical selection across presentation changes by @TomiXRM in https://github.com/longbridge/gpui-kit/pull/3421
- text: Keep inline HTML mark highlights in Markdown by @henrikogaard in https://github.com/longbridge/gpui-kit/pull/3425
- input: Anchor completion/code-action popups to the current frame’s caret by @sola-ryu in https://github.com/longbridge/gpui-kit/pull/3412
- input: Run custom context menu builders after releasing the input by @costajohnt in https://github.com/longbridge/gpui-kit/pull/3433
- input: Keep auto-grow rows fitted when the limits change by @sneffets in https://github.com/longbridge/gpui-kit/pull/3430
- text: Paint TextView selection under the glyphs by @cesartalen in https://github.com/longbridge/gpui-kit/pull/3439
- kit: Prepare v0.7.2 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3458
New Contributors
- @xxww0098 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3404
- @sola-ryu made their first contribution in https://github.com/longbridge/gpui-kit/pull/3403
- @xhofe made their first contribution in https://github.com/longbridge/gpui-kit/pull/3420
- @TomiXRM made their first contribution in https://github.com/longbridge/gpui-kit/pull/3421
- @henrikogaard made their first contribution in https://github.com/longbridge/gpui-kit/pull/3425
- @costajohnt made their first contribution in https://github.com/longbridge/gpui-kit/pull/3433
- @sneffets made their first contribution in https://github.com/longbridge/gpui-kit/pull/3430
- @cesartalen made their first contribution in https://github.com/longbridge/gpui-kit/pull/3439
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.7.1…v0.7.2
v0.7.1
v0.7.1
GPUI Kit v0.7.1 adds speech input and ColorSelect, and gives charts an initial draw-in animation. It improves IME editing, inline-token interactions, Markdown source mapping and streaming, keyboard focus, and table rendering. This release pins the GPUI snapshot dependencies to 0.3.8.
New components and charts
- Speech input: enable the
speechfeature to capture audio withSpeechState, start and stop sessions withSpeechButton, and display levels withSpeechWaveform. Applications can supply aSpeechRecognizerandAudioInput; native system recognition is available on supported macOS and Windows configurations, while Linux needs an application recognizer. (#3333) - Speech waveform: levels are sampled once per 80 ms, and the waveform starts empty and scrolls smoothly from the trailing edge using its own playhead. (#3352)
- ColorSelect: use a framed color field with a swatch, hex value and caret in forms.
ColorSelect::newsharesColorPickerStatewith the compact picker, and supports placeholder and accessible-name overrides.ColorPickernow applies its root style refinements. (#3289) - Chart appear motion: built-in charts draw their data in on first paint, with reduced-motion support. Use
.appear(false)to opt out or.appear_key(...)to replay;PlotAppearScoperemembers completed animations across virtual-list remounts while the scope remains painted. Existing custom plots retain their behavior unless they opt in. (#3296, #3308)
Editor and text input
- Inline-token hover:
Input::on_token_hoverandTextarea::on_token_hoverreport token entry and exit withInlineTokenHoverEvent, so applications can anchor tooltips or previews without changing selection. JavaScript bindings expose the same interaction. (#3346) - Fixed IME candidate positioning before repaint and grouped rewrites of a typed character, including Korean IME input, into the typing undo step. (#3297, #3341)
- Fixed Textarea row-based height, text clipping in short single-line frames, and consistency between soft wrapping and horizontal scrolling. (#3330, #3343, #3358)
- Fixed completion-prefix measurement and stale trigger offsets, Kotlin syntax-query compilation, and stale syntax-injection ranges. (#3363, #3367, #3317)
- Fixed mask validation for non-ASCII characters, including Chinese literal separators and characters matched by
*. (#3369)
Markdown and text rendering
- Source-based highlights:
RenderedText::sourceexposes the source of the rendered snapshot, andrange_for_sourceconverts Markdown source byte ranges into rendered ranges forRangeHighlight. (#3281) - Scrollable code blocks: a code-block style with vertical scrolling and a height cap now provides its own scrollbar, handles nested wheel scrolling and keeps code actions pinned. (#3322)
- Improved streaming through incremental prefix updates in
TextViewState::set_textand by committing valid background parse results overtaken by newer chunks. (#3294, #3344) - Fixed CJK punctuation wrapping, inherited text colors in filled containers, and ragged GFM table rows; scroll-table column measurements are reused. (#3293, #3329, #3365, #3318)
Dock and controls
- Dock:
DockArea::set_split_sizesrestores a split’s proportions in place, without rebuilding panels, and reports one layout change. (#3314) - Questionnaire: choosing a single-choice answer now confirms the item and advances or submits after a brief feedback pause.
QuestionnaireState::chooseexposes that activation path;activate_choicecontinues to change the answer without confirming. Arrow-key selection, multiple-choice toggles and freeform typing do not auto-advance. (#3350) - Keyboard focus: borderless buttons show a legible focus line, DataTable shows keyboard focus, and popup menus preserve a single keyboard highlight. (#3299, #3300, #3307)
- Control sizing: control text follows the Input/Select size ladder, OtpInput follows interface zoom, and Large Switch uses a larger track. (#3287)
- Clipboard: buttons have a localized accessible name by default;
accessibility_labelprovides a contextual override. (#3354) - Slider: touch drags on the track move the thumb. (#3313)
- Radio: disabled controls stay disabled inside RadioGroup. (#3331)
- Shimmer: the default highlight remains visible on foreground text in dark mode. (#3328)
- Command: item-row corners stay concentric with the frame. (#3285)
Runtime, platform and documentation
-
GPUI snapshot: exact snapshot dependencies are updated to
=0.3.8, with continuation-indent API adaptation preserving the previous wrapping behavior. (#3370) -
Web runtime: target-specific Instant handling avoids a touch-related wasm panic. (#3271)
-
Scrolling: phaseless mouse wheels continue scrolling after an edge bounce. (#3316)
-
Shell: QuickJS JIT is updated to 0.12.11. (#3338)
-
Kit macros: the hidden GPUI re-export points at Kit, keeping generated paths consistent. (#3306)
-
Documentation: release snapshots drive onboarding dependency versions; setup documents the macOS font-kit requirement, and skill examples correct app startup, async and Select re-entrancy usage. (#3284, #3356, #3339, #3345, #3351)
Behavior changes
Charts animate on first paint by default; disable this with .appear(false). Non-interactive built-in charts now retain an element ID for animation and caches, while remaining non-interactive. (#3296)
let chart = LineChart::new(data).interactive(false);
- assert!(Plot::id(&chart).is_none());
+ assert!(Plot::id(&chart).is_some());
+ assert!(!Plot::interactive(&chart));
Single-choice Questionnaire activation now confirms by default. Applications that need to change an answer without confirmation can continue to call activate_choice. (#3350)
Thank you to everyone who contributed code, documentation, testing, and feedback!
What’s Changed
- command: Keep item row radius concentric with the frame by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3285
- website: Follow release versions and highlight diffs by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3284
- base: Gate GlobalState’s Instant by target to fix a wasm touch panic by @yoyo930021 in https://github.com/longbridge/gpui-kit/pull/3271
- color_picker: Add ColorSelect, a framed field that opens the picker by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3289
- text: Keep inline flow lines within the wrap width for CJK punctuation by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3293
- button: Show keyboard focus on borderless variants when
focus_ringis off by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3299 - chart: Add appear motion to
Plotand every chart by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3296 - text: parse prefix extensions incrementally in TextViewState::set_text (#3291) by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3294
- button: Keep the focus line off text and legible on fills by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3300
- website: Fit StatusBar demo sections to narrow windows by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3301
- docs: Update gpui-kit dependency version to 0.7 in READMEs by @obito-t in https://github.com/longbridge/gpui-kit/pull/3304
- website: Keep box-drawing glyphs in the gallery font subsets by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3305
- table, menu: Show keyboard focus on
DataTableand keep menu highlights on key presses by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3307 - plot: Keep finished appears across remounts with
PlotAppearScopeby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3308 - kit: Point the hidden gpui re-export at the Kit itself by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3306
- dock: Add
DockArea::set_split_sizesto restore a split’s slot sizes by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3314 - component: Align control text sizes with Input and Select by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3287
- scroll_bounce: Let phaseless wheels scroll again after bouncing at an edge by @ylinwind in https://github.com/longbridge/gpui-kit/pull/3316
- highlighter: Clip stale injection ranges to char boundaries before slicing by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3317
- slider: Let a touch drag on the track move the thumb by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3313
- chore: upgrade notify to 8.2 and harden theme watching by @orielhaim in https://github.com/longbridge/gpui-kit/pull/3320
- shell: update QuickJS JIT to 0.12.11 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3338
- docs: Document macOS font-kit requirement by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3339
- text: Avoid remeasuring scroll-table column widths by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3318
- markdown: add source & range_for_source by @tidely in https://github.com/longbridge/gpui-kit/pull/3281
- text_view: Let fenced code blocks scroll inside a height cap by @jarviisha in https://github.com/longbridge/gpui-kit/pull/3322
- shimmer: Keep the default highlight visible on foreground text in dark mode by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3328
- text_view: Follow the container’s text color so rich text reads in filled bubbles by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3329
- input: Make rows set the height of a plain Textarea again by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3330
- radio: Keep a disabled Radio disabled inside a RadioGroup by @Bombatomica64 in https://github.com/longbridge/gpui-kit/pull/3331
- input: Keep a single-line Input’s text from being clipped in a short frame by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3343
- website: Fix bold labels in Chinese numbered lists by @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3342
- skills: Fix async and app startup examples that don’t compile by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3345
- questionnaire: Confirm a single-choice item when a choice is chosen by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3350
- skills: Fix the Select re-entrancy test examples by @AncientPixel in https://github.com/longbridge/gpui-kit/pull/3351
- speech: Add speech input by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3333
- input: Group IME rewrites of the typed character into one undo step by @insd47 in https://github.com/longbridge/gpui-kit/pull/3341
- text: Commit background parses that a newer streamed chunk overtook by @FenjuFu in https://github.com/longbridge/gpui-kit/pull/3344
- input: fall back to last caret for IME candidate bounds before repaint (#3286) by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3297
- website: Fail a docs test on a hand-written GPUI Kit version by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3353
- website: Match onboarding dependencies to release snapshots by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3356
- clipboard: Add accessibility_label to name the icon button by @counterbeing in https://github.com/longbridge/gpui-kit/pull/3354
- input: report inline token hover for tooltips and previews by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3346
- input: Keep horizontal scrolling and soft wrapping consistent by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3358
- editor: Measure the completion prefix from the typed text and drop stale trigger offsets by @abderbejaoui in https://github.com/longbridge/gpui-kit/pull/3363
- highlighter: Make the Kotlin query compile against its grammar by @PieWhite in https://github.com/longbridge/gpui-kit/pull/3367
- text_view: normalize GFM table rows to the header column count by @kossoy in https://github.com/longbridge/gpui-kit/pull/3365
- input: Count characters, not bytes, when validating a mask pattern by @kevin9327 in https://github.com/longbridge/gpui-kit/pull/3369
- speech: Pace
SpeechWaveformat one bar per 80 ms and scroll it smoothly by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3352 - kit: Update GPUI to gpui-pre 0.3.8 and prepare v0.7.1 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3370
New Contributors
- @yoyo930021 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3271
- @Bombatomica64 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3313
- @orielhaim made their first contribution in https://github.com/longbridge/gpui-kit/pull/3320
- @AncientPixel made their first contribution in https://github.com/longbridge/gpui-kit/pull/3345
- @insd47 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3341
- @FenjuFu made their first contribution in https://github.com/longbridge/gpui-kit/pull/3344
- @counterbeing made their first contribution in https://github.com/longbridge/gpui-kit/pull/3354
- @abderbejaoui made their first contribution in https://github.com/longbridge/gpui-kit/pull/3363
- @PieWhite made their first contribution in https://github.com/longbridge/gpui-kit/pull/3367
- @kevin9327 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3369
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.7.0…v0.7.1
v0.7.0
GPUI Kit v0.7.0 adds Toolbar, Questionnaire and TimeField, and makes window startup and overlay hosting consistent through a Base-owned Root. Plot primitives are now available without the styled component layer, while Input, TextView and charts gain richer editing, search, date/time and data-visualization APIs. This release also improves Dock interactions, accessibility, streaming and large-data performance; review the Breaking Changes below before upgrading.
New components
-
Toolbar and ToolbarGroup: compose application command rows with source-order controls, semantic groups, separators and flexible spacers. Left/Right moves focus through enabled controls with wrapping. The styled toolbar propagates its density to hosted controls and gives Buttons compact ghost presentation;
child/childrenaccept sized controls, whilecontent/contentsaccept labels, separators and custom content. The default size is Small; XSmall and Medium are supported, and Large uses Medium. Disabling toolbar navigation does not disable its controls automatically. (#3128) -
Questionnaire: build single-choice, multiple-choice and freeform questionnaires around
QuestionnaireState, with composable question, choice, input, progress and action parts. The component handles validation, optional skipping, keyboard shortcuts, focus, navigation and submission, using existing Radio, Checkbox, Input and Button controls. (#2878) -
TimeField and date/time picking: edit segmented hours and minutes, optionally seconds, using
TimeFieldState,TimePrecision::{Minute, Second}andHourCycle::{H23, H12}. A styled TimeField works independently in forms, and DatePicker enables time editing throughtime_precision,hour_cycleanddefault_time.date_time/set_date_timeexpose the combined value; date/time presets useDateRangePreset::date_time. In time-enabled single mode, each edit emits Change while the popup stays open; range mode remains date-only. DatePicker Change payloads require migration below. (#3206)
Window hosting and framework boundaries
-
One window entry point:
gpui_kit::open_window(options, cx, build)returns(AnyWindowHandle, Entity<V>)and always wraps application content ingpui_base::Root, independent of Cargo feature unification. Callgpui_kit::init(cx)first, return content from the builder, and retain the returned entity when you need application state. In async work, invoke the helper insidecx.update; quit/close actions and keybindings remain application-owned. (#3152) -
Automatic overlay hosting: Root owns content, overlay hosting, keyboard traversal and selection copying;
gpui_component::Rootre-exports the Base type. Component initialization registers per-window presentation for dialogs, sheets, notifications, menus, tooltips, touch selection and window chrome. Manual layer-rendering APIs are removed; application operations remain onWindowExt. (#3152) -
Root plugins: design systems can register typed
RootPluginimplementations withRoot::register_plugin, retrieve them withRoot::plugin, and use preparation, styling and decoration hooks. Plugins are instantiated per window in registration order. Register them before creating windows; replacing a factory affects future windows, and existing roots are not retrofitted. (#3152) -
Plot primitives in Base: scales, shapes, axes, grids, labels, the
Plottrait, path caches and hover tracking move togpui_kit::base::plot, enabling custom charts without a Component dependency. Existinggpui_kit::component::plotimports remain available through re-exports.PlotElement<P>is the element behind custom plots and#[derive(IntoPlot)];PlotMotionandPlotThemeprovide theme-projected pointer and hover motion. Base defaults to no motion, styled charts now acceptf32, and Component forwards itsdecimalfeature to Base. Custom primitive APIs require migration below. (#3258)
Simplified window startup
gpui_kit::init(cx) and gpui_kit::open_window provide a compact, standard startup sequence. The builder creates application content, and Kit supplies the Root and automatically hosts dialogs, sheets and notifications. Use WindowExt for Component operations, gpui_base::TextSelection for selection, and WindowOptions with window_border() for window decoration. (#3152)
gpui_kit::init(cx);
let (window_handle, content) =
gpui_kit::open_window(options, cx, |window, cx| {
build_content(window, cx)
})?;
Updating existing window code
The following examples show how existing startup, overlay and window-operation code maps to the simplified APIs.
- cx.open_window(options, |window, cx| {
- let content = build_content(window, cx);
- cx.new(|cx| Root::new(content, window, cx))
- })
+ let (window_handle, content) =
+ gpui_kit::open_window(options, cx, |window, cx| {
+ build_content(window, cx)
+ })?;
- let sheet_layer = Root::render_sheet_layer(window, cx);
- let dialog_layer = Root::render_dialog_layer(window, cx);
- let notification_layer = Root::render_notification_layer(window, cx);
-
div()
.child(content)
- .children(sheet_layer)
- .children(dialog_layer.map(|layer| deferred(layer).with_priority(1)))
- .children(notification_layer)
- Root::bordered
- Root::window_shadow_size
+ window_border()
- window.selected_text(cx)
+ TextSelection::selected_text(window, cx)
- window.has_text_selection(cx)
+ TextSelection::has_selection(window, cx)
- root.clear_text_selection(window, cx)
- window.clear_text_selection(cx)
+ TextSelection::clear(window, cx)
- window.end_text_selection(cx)
+ TextSelection::end(window, cx)
- root.open_dialog(build, window, cx)
+ window.open_dialog(cx, build)
- root.close_dialog(window, cx)
+ window.close_dialog(cx)
- root.close_all_dialogs(window, cx)
+ window.close_all_dialogs(cx)
- root.open_sheet_at(placement, build, window, cx)
+ window.open_sheet_at(placement, cx, build)
- root.close_sheet(window, cx)
+ window.close_sheet(cx)
- root.push_notification(notification, window, cx)
+ window.push_notification(notification, cx)
- root.remove_notification::<T>(window, cx)
+ window.remove_notification::<T>(cx)
- root.remove_notification1::<T>(key, window, cx)
+ window.remove_notification1::<T>(key, cx)
- root.clear_notifications(window, cx)
+ window.clear_notifications(cx)
Editor and text input
-
Atomic inline tokens: Input and Textarea can represent mentions, commands and resource references as
InlineTokenannotations. Usereplace_with_token/replace_range_with_tokento insert them,InputContent::with_tokento restore validated ranges, andcontent()to save a draft. Caret movement, selection, deletion and undo treat each token as one unit, while values and clipboard content remain plain text. Customize presentation withtokenand activation withon_token_clickorActivateToken. Tokens are opt-in and unavailable in Editor, NumberInput, password and formatted-mask modes. (#3113) -
Editor range decorations: independent consumers can create edit-tracked
RangeDecorationCollectionhandles throughEditorState::create_range_decorations_collection.RangeDecorationsupportsRangeDecorationStyle::{Fill, Frame}with optional color; collections can set, append, clear, read tracked ranges or dispose. Decorations use UTF-8 byte ranges and paint only visible spans, including soft wraps, CRLF and folded text.InputExtras::range_decorationshas a default empty implementation, so existing implementers continue to compile. (#3040) -
Textarea sizing and editor gutters: Textarea supports the standard size system like Input, and the line-number gutter adapts between three and seven digits instead of reserving an unsuitable fixed width. (#3191, #3205)
-
Focus, selection and asynchronous editing: corrected disabled-input pointer focus, preferred columns and vertical selection affinity, drag-selection autoscroll, stale completion/inline responses, IME selection direction and undo boundaries, replacement-field focus and explicit GoToDefinition requests. Accessibility Focus refuses disabled inputs; SetValue is advertised and applied only when editable. Re-requesting code actions refreshes an already-open menu, including empty results. (#3254, #3256, #3274)
-
Caret lifecycle and navigation: programmatic updates no longer start permanent blink/repaint loops on unfocused inputs; blur clears stale blink state so refocusing restores a blinking caret. Editing scrolls directly to a distant caret rather than animating through the whole document. (#3139, #3140, #3150)
-
Web clipboard paste: Input context menus offer Paste whenever the input is editable, and fall back to asynchronous clipboard reading when synchronous reading is unavailable. The paste request starts from the user action and rechecks editability when it resolves. (#3244)
-
Editor performance and Unicode safety: reduce diagnostic/definition-hover repaints, debounce transient hover requests, avoid inactive search rescans and query only visible search highlights. Syntax classification reuses Rope-backed parse results and injection trees. Tree-sitter receives bytes, preventing aborts when a read begins inside a multibyte character. (#3260, #3263, #3238)
-
Input context menus: documentation now makes clear that
InputState::context_menu(false)disables the entire right-click menu, including a custom Input/Textarea/Editor menu. Keep the state menu enabled when supplying a custom builder; the builder replaces the built-in items. (#3275)
Markdown and text rendering
-
Source-aware selection:
TextViewState::selected_source_range()returns the original Markdown byte range for the actual rendered selection, distinguishing repeated occurrences instead of guessing from selected text. (#3136) -
Search highlights and reveal: search
TextViewState::rendered_text()and applyRangeHighlightvalues withset_range_highlights;clear_range_highlightsremoves them. Ranges refer to UTF-8 bytes in rendered copy text, so searches can cross Markdown formatting. Highlights preserve layout, selection and copy behavior, and survive unchanged content and append-only streaming.reveal_rangemakes the starting line visible in a scrollable TextView or an application list;TextView::on_revealsupplies window-space bounds for custom scroll containers. Reveal is best effort, and highlights are currently Markdown-only. (#3215, #3216) -
Heading refinements: Base
TextViewStyle::with_headingaccepts a level-awareStyleRefinementcallback for typography, spacing, color and borders, layered over built-in heading defaults. Component keeps its existing compatibility heading fields and builders. (#3129) -
Markdown correctness: preserve ordered-list starting numbers and prose in unclaimed math spans, pair inline HTML tags correctly, and keep lines containing inline code as tall as equivalent plain-text lines. (#3204, #3178, #3240)
-
Streaming and large documents:
stream_fadestaggers by word and skips oversized chunks, with throttled repaints. Reuse inline layout and paragraph render caches, avoid unnecessary hover/selection work, and remove quadratic source-mapping and table-highlight reconciliation paths. Text selection in a cached dock view stays registered instead of flickering and keeping the window repainting. (#3153, #3226, #3180, #3261, #3247, #3273, #3193)
Charts and plot motion
-
Stable live-series geometry: LineChart and AreaChart support
y_domain(min, max)for a fixed value range andpoint_count(count)for reserved x-axis slots, so arriving data keeps its position. Values outside the fixed domain are clipped. BarChart addsband_countfor the equivalent fixed-band layout. (#3209, #3220) -
Axes, grids and reference lines: LineChart/AreaChart add
y_axis,y_axis_label_placement,y_tick_count,y_tick_format,x_tick_count,grid_columns,grid_dashed, repeatablereference_lineandy_padding. BarChart addsvalue_axis_label_placement,value_tick_format,band_tick_countandgrid_dashed.AxisLabelPlacement::{Outside, Inside}controls value-label placement.chart.grid/ThemeColor::chart_gridseparate grids from axis borders, with a 60%-opacity border fallback for themes that omit the token. (#3220, #3236) -
Bar labels and spacing:
label_colorcolors labels per datum,padding_inner/padding_outerexpose band spacing, andmin_lengthkeeps zero or small bars visible. Vertical charts reserve space for labels. BarChart and CandlestickChart exposemax_band_width, retaining their default 30px maximum while Base ScaleBand no longer imposes one. (#3217, #3258) -
Tooltip customization: LineChart, AreaChart, BarChart, RadarChart and CandlestickChart add
tooltip_title,tooltip_value,tooltip_value_colorandtooltip_content. Multivalue chart callbacks also receive a row index. PieChart and SankeyChart addtooltip_name/tooltip_valueindependently of labels painted on the chart.Tooltip::value_colorcolors the latest row andplain_rowadds totals without a swatch; a bar tooltip swatch follows the bar color. (#3228, #3176) -
Interaction and motion: chart IDs default to their construction site so hover works without an explicit ID; provide distinct IDs when multiple charts share a construction site.
interactive(false)removes hitboxes, hover emphasis, tooltips and path caches for placeholders or covered charts. Tooltip glides its own crosshair/dots and grows dot halos with hover progress;Tooltip::glide(false)disables that spring. Custom plots can usePlotHover::glideand the Base hover-motion helpers. (#3173, #3176, #3222, #3258) -
Painting performance: LineChart and AreaChart use index-based point placement to avoid quadratic value lookups and correctly position duplicate x values at their own indices. Candlestick wicks avoid per-candle path tessellation, and chart hover/painting avoids redundant work. (#3262)
Dock and resizing
-
Nested docks and tab closing: moving a panel from a dock that does not own it no longer creates duplicate or ghost tabs.
DockSkin::set_close_button_visibleenables built-in close buttons, hidden by default;TabGroupContext::is_panel_closablerespects both dock and panel constraints. Custom tab renderers retain control over presentation and frame geometry. (#3197) -
Continuous bottom-dock resizing: drag a collapsible bottom dock below its minimum, through the closed strip and back open in one motion. Release snaps to the nearer closed or minimum-open state; transient sizes below the minimum are not persisted. Custom resize drivers finish with
DockContext::end_resize. (#3229) -
Resize indicators: dividers grow their indicator as the pointer engages, hugging handles paint their hairline on the seam, and dock hairlines no longer draw over popovers. (#3175, #3200, #3221)
Theme synchronization
- Theme updates:
Theme::update(cx, |theme| ...)edits the global theme, reconciles solid colors and gradient tokens, updates the Base projection, resolves changed fonts and refreshes all windows. Use it for palette, mode, typography and other theme edits instead of manually synchronizing each representation.Theme::global_mutandTheme::sync_baseremain available for callers that manage synchronization themselves. (#3122)
Components and accessibility
-
Popover trigger styling:
Popover::trigger_stylenow applies to the actual trigger container, so width/flex refinements affect both parent layout and popup anchoring. Base Popover implements Styled; DropdownMenu keeps Button styling on the Button instead of applying it twice. (#3245) -
Attachment: composer attachments include
on_remove,on_retry,progress(percent)andtooltip; interactive controls and tooltips requireid. Progress is 0–100 and clamped. Media receives correctly rounded corners and upload/failure treatments, including retry when a failed image has no source.AttachmentGroup::track_scrolllets the application drive scrolling andwith_edge_fadesignals clipped attachments. Default chip geometry and failure styling change to the composer presentation. (#3195, #3233) -
Settings and GroupBox:
GroupBox::footer/SettingGroup::footerplace supporting content outside the group surface.SettingGroup::variantoverrides theSettings::with_group_variantdefault for one group;GroupBoxVariant::Normalpresents items without a card surface. Selecting a group on another settings page now scrolls to the intended group. (#3133, #3203, #3219) -
Table:
TableSelection::{None, Row, Column, Cell}withTableState::selection/set_selectionmodels the active selection as one value. Positional getters return only the active selection type; stale row appearance and accessibility selection state are corrected. Filler rows and cell rendering avoid redundant work. (#3143, #3264) -
Popover:
offsetsets the trigger gap andarrow(true)adds an arrow for all eight anchors. Horizontal-center anchor placement is corrected. Popover/AppMenu triggers use the new defaultSelectable::open/is_openmethods to distinguish an open popup from application selection; existing Selectable implementations retain the default compatibility behavior. (#3145, #3125) -
Dialog:
button_propsmerges explicitly supplied fields, preserving existing Cancel visibility and callbacks. AlertDialog addsok_text,ok_variant,cancel_textandcancel_variant. Oversized dialogs reclaim the upper window space while normal and stacked dialogs retain their preferred placement. (#3126, #3188) -
Select: closing an open menu emits
DismissEvent, including after Confirm; the popup aligns with the trigger at the right edge. Long option labels truncate with an ellipsis while keeping the checkmark visible. Custom full-row renderers receive a shrinkable container and should apply text truncation themselves. (#3144, #3218, #3280) -
Menus: context-menu actions fire once on the row actually pressed even when rows share a construction site. PopupMenu, DropdownMenu and Popover release their entities and subscriptions when their host disappears, preventing leaks and stale popup registrations from suppressing later Input context menus. (#3135, #3224, #3267, #3279)
-
Switch: the track shows a keyboard focus ring, with
focus_ring(false),tab_stopandtab_indexcontrols. Long labels no longer shrink the track. (#3120, #3154) -
Sidebar and List: SidebarMenuItem exposes its visible label, TreeItem role and selected state to assistive technology. SidebarMenuItem, ListItem and SidebarToggleButton accept
accessibility_label. The focused ListState container carries the List role, and a right-clicked list item retains its outline. (#3160, #3249, #3155) -
Chat composition:
Marker::alignment(MarkerAlignment::{Start, Center, End})controls row and wrapped-text alignment across variants.Message::id/roleprovide stable accessibility identity; Message content inherits caller/bubble typography. Ghost Bubble children are no longer clipped. (#3151, #3171, #3172) -
Form: caller styling such as padding, gaps and background takes effect, and
Field::visible(false)actually hides fields without leaving empty grid rows. Hidden fields are not built or laid out. (#3248, #3269)
Performance and resource use
-
Command: unchanged command models retain their measured rows and search results across parent rerenders, while new callbacks and selection updates still apply. Models with custom child closures or changed layout continue to remeasure. (#3268)
-
Tree and SearchableVec: visible tree rows avoid deep subtree clones and defer context-menu entry cloning until the menu opens. SearchableVec filters by indices instead of cloning matching items or entire groups, evaluating each match once. (#3265, #3279)
-
Carousel and Rating: ancestor scrolling no longer rebuilds Carousel geometry or interrupts a running snap animation. Rating repaints on real hover-value changes rather than every pointer movement. (#3266, #3270)
-
Pagination, ColorPicker, Accordion and Notification: ellipsis menus show at most the 100 hidden pages nearest the current page; closed ColorPicker popups defer their bodies; Accordion content unmounts after the closing spring settles; persistent notifications stop lifecycle ticking once transitions finish. See the Accordion state-lifetime note below. (#3279)
Shell, runtime and platform
-
GPUI snapshot: Kit now pins the complete
gpui-pre-*snapshot family to=0.3.7, including the newly published bench-metrics package. All 25 snapshot packages resolve together; the independentgpui-pre-reqwestfork remains at 0.12.15. (#3283) -
Shell inline tokens and TimeField: JavaScript InputState/TextareaState mirror token insertion, draft content, token slots and token click callbacks. JavaScript ranges use UTF-16 offsets, while Rust uses UTF-8 bytes; validation failures expose
error.code. Shell also exposes TimeField state/elements. Host integration adds optional retained-state methods viaStateMethodDescriptor/StateDescriptor::with_methodsand frame-owned interactive token subtrees. (#3113, #3206) -
Script image policy: HTML/Markdown TextView document images obey the creating script’s HTTP GET capabilities, including intrinsic-size measurement and every redirect. Loading is asynchronous, view-owned and canceled on disposal, with timeout/body/redirect limits and no HTTPS downgrade. Non-HTTP(S) document images, including data URLs, are refused; the application-asset
image(path)API is unchanged. Base adds a narrow document-image source override for embedders. (#3230) -
Base controls: Base Dialog centers a normal-flow popup by default and blocks popup presses from reaching its backdrop; Base AlertDialog implements Styled. Base single-line Input vertically centers its text within its frame, while multiline layout is unchanged. These defaults do not alter styled Component Dialog/Input placement. (#3277, #3278)
-
Web and touch: Base WASM examples bundle IBM Plex Sans so
.SystemUIFontresolves and canvases render. Centered notification stacks work reliably on the web. A short touch drag that catches an active ScrollBounce no longer produces a reverse fling; intentional longer flings and edge bounce are preserved. (#3235, #3149, #3207)
Documentation and website
-
Versioned documentation: the latest release is served at
/, development docs at/versions/main, and release snapshots at/versions/<tag>. Snapshot isolation and version-local links prevent newer pages or navigation from leaking into older docs; shared WASM examples load from the site root, and historical versions without component pages still build. (#3159, #3189, #3243, #3165, #3196) -
Framework manual: expanded bilingual guides cover Entity, Window, Context, Render, RenderOnce, Element, Action/Event, ownership, focus, tasks, painting, text, accessibility, animation and WebAssembly, with runnable exercises and troubleshooting. New Packaging, Auto Update and Images guides cover distribution, user-level Linux installation, embedded assets,
img,svgand HTTP caching. Menu-bar guidance documents binding keys beforeset_menus, and focus guidance explains explicit Tab stops. (#3179, #3181, #3225, #3232, #3239, #3124) -
Website themes and navigation: the theme palette reads theme JSON directly, previews and confirms with keyboard navigation, restores on cancel, and synchronizes the chosen JSON with embedded WASM examples.
Cmd+K/Ctrl+Kopens theme selection;/opens docs search. Text selection usesselection.background, falling back toprimary.background, and active sidebar entries are easier to identify. Custom website themes and design-guide illustrations are refined. (#3198, #3241, #3242, #3237, #3211, #3212) -
Documentation licensing: eligible documentation prose and original illustrations carry CC BY 4.0 attribution; software and code examples retain Apache-2.0 permissions. (#3225)
Breaking Changes
Custom Plot primitives
Component plot import paths remain re-exported, but custom plots must migrate primitive APIs. StrokeStyle/stroke_style are removed in favor of Curve/curve; scale ranges become arrays, domains accept iterators, and PlotValue replaces the hidden Sealed bound. least_index becomes nearest_index; least_index_with_domain is removed. Arc paints/contains use the radii configured on the Arc, and Grid x/y accept iterators. ScaleBand has no implicit 30px cap: set max_band_width if needed. TooltipState, AxisText, label::Text, ArcData, StackPoint, StackSeries, SankeyLink, SankeyNodeLayout, SankeyLinkLayout and SankeyGraph are non-exhaustive and should use their constructors. PlotAxis::default() now equals new() with its x-axis line visible. IntoPlot derives use PlotElement<Self> rather than implementing Element directly; the hidden plot::tooltip::track_hover is removed. Base Theme struct literals need plot. Deprecated aliases remain this release for AXIS_GAP, dot_fill_color, dot_stroke_color, PlotHover::focus and Tooltip::focus; prefer axis_gutter, dot_fill, dot_stroke and progress. Existing chart curve builders remain unchanged. (#3258)
- use gpui_kit::base::plot::StrokeStyle;
+ use gpui_kit::base::plot::Curve;
- Line::new().stroke_style(StrokeStyle::StepAfter)
+ Line::new().curve(Curve::StepAfter)
- Area::new().stroke_style(StrokeStyle::Linear)
+ Area::new().curve(Curve::Linear)
- let y = ScaleLinear::new(values.collect(), vec![height, 0.]);
+ let y = ScaleLinear::new(values, [height, 0.]);
- where Y: Copy + PartialOrd + Num + ToPrimitive + Sealed
+ where Y: PlotValue
- let ix = scale.least_index(tick);
+ let ix = scale.nearest_index(tick);
- arc.paint(&data, color, None, Some(radius), &bounds, window);
+ Arc::new().outer_radius(radius).paint(&data, color, &bounds, window);
- Grid::new().y(ticks.collect())
+ Grid::new().y(ticks)
gpui_base::Theme {
appearance,
tokens,
scrollbar,
resizable,
+ plot: gpui_base::PlotTheme::default(),
}
DatePicker event values
DatePickerEvent::Change now carries DateTime, not Date. Date-only consumers can use value.date(); format keeps its signature. Exhaustive matches on DateRangePresetValue must handle the new DateTime variant. (#3206)
cx.subscribe(&picker, |this, _, event, _| match event {
- DatePickerEvent::Change(date) => match date {
+ DatePickerEvent::Change(value) => match value.date() {
Date::Single(Some(date)) => { /* … */ }
_ => {}
},
});
Base heading styling
Base TextViewStyle removes with_heading_base_font_size, heading_base_font_size, with_heading_font_size and heading_font_size. Use with_heading/heading and a StyleRefinement callback. The Component compatibility facade retains its old fields and builders. (#3129)
-TextViewStyle::default()
- .with_heading_base_font_size(px(14.))
- .with_heading_font_size(|level, base| resolve_size(level, base))
+TextViewStyle::default().with_heading(|level| {
+ StyleRefinement::default().text_size(resolve_size(level))
+})
Table selection getters
Each positional getter reports only its active selection type. To obtain the row of a selected cell, map selected_cell() or match selection(); keep inactive-selection history in the application if required. (#3143)
table.set_selected_cell(5, 3, cx);
-let row = table.selected_row();
+let row = table.selected_cell().map(|(row_ix, _)| row_ix);
table.set_selected_row(2, cx);
-assert_eq!(table.selected_cell(), Some((5, 3)));
+assert_eq!(table.selected_cell(), None);
+assert_eq!(table.selection(), TableSelection::Row(2));
BarChart tick counts
value_tick_count(n) now means n ticks, not n intervals. Add one to an explicit old count to preserve its appearance. The default changes from four intervals to five ticks, preserving the default chart layout. (#3209)
- BarChart::new(data).value_axis(true).value_tick_count(6)
+ BarChart::new(data).value_axis(true).value_tick_count(7)
Custom tooltip motion
Tooltip now springs its own crosshair/dots. Remove a custom spring or use Tooltip::glide(false) to avoid applying motion twice. Pass full Dot halo sizes; Tooltip applies hover progress itself. (#3222)
- let center = self.band_center.unwrap_or(state.cross_line.x);
- Tooltip::new(cursor, bounds.size)
- .cross_line(CrossLine::new(point(center, state.cross_line.y)))
+ Tooltip::new(cursor, bounds.size)
+ .cross_line(CrossLine::new(state.cross_line))
- Dot::new(p).halo(px(20. * hover.focus()))
+ Dot::new(p).halo(px(20.))
Shell document image permissions
Script TextView signatures are unchanged, but remote document images now need explicit GET grants for their URL and every redirect target. Non-HTTP(S) sources, including data URLs, are refused; image(path) application assets are unaffected. (#3230)
- Policy::new()
+ Policy::new().with_capabilities(Capabilities::new().http_requests([
+ HttpRequestGrant::new("images.example", ["GET"], ["/image.png"], [] as [&str; 0]),
+ ]))
Select dismissal ordering
Existing DismissEvent subscribers now run when an open menu closes. Confirm emits SelectEvent::Confirm followed by DismissEvent; opening or closing an already-closed menu does not dismiss. (#3144)
// An existing SelectState DismissEvent subscription after Escape:
-// No callback.
+// One callback after the menu transitions to closed.
// After confirming an item:
-// SelectEvent::Confirm only.
+// SelectEvent::Confirm, then DismissEvent.
Popover horizontal-center anchors
LeftCenter places the popup to the right of the trigger; RightCenter places it to the left, both vertically centered. These no longer fall back to top-left positioning. Top/bottom anchors keep their default placement and do not flip when clamped. (#3145)
- .anchor(Anchor::LeftCenter) // Legacy top-left fallback
+ .anchor(Anchor::LeftCenter) // Right of the trigger, vertically centered
- .anchor(Anchor::RightCenter) // Legacy top-left fallback
+ .anchor(Anchor::RightCenter) // Left of the trigger, vertically centered
Individually disabled Accordion items
An item marked disabled stays disabled instead of being accidentally enabled by its parent. Explicitly enable it if expansion is intended; builder signatures are unchanged. (#3141)
Accordion::new("settings").item(|item| item.title("Advanced").disabled(true))
-// Clicking Advanced can expand it.
+// Clicking Advanced leaves it closed.
Message typography inheritance
Message no longer imposes text_sm and a 1.25 line height on its subtree. Header/footer typography remains local; bare MessageContent inherits the surrounding style, so explicitly style content that depended on the previous row defaults. (#3171)
- Message::new().content(MessageContent::new().child("plain text")) // rendered text_sm / 1.25
+ Message::new().content(MessageContent::new().child("plain text")) // inherits the caller's text style
Base Dialog placement and pointer occlusion
Normal-flow Base popups center by default; style the host to recover top-left placement. Popup presses no longer reach the backdrop, so size popup parts to their content instead of using a full-window popup wrapper. Styled Component Dialog positioning is unchanged. (#3277)
- Dialog::new(cx).popup(popup)
+ Dialog::new(cx).items_start().justify_start().popup(popup)
Base single-line Input alignment
A Base single-line input fills its frame and vertically centers its line. If a tall frame relied on top placement, use a one-line-height frame for the previous appearance. Multiline and styled Component input layout is unchanged. (#3278)
Accordion content lifetime and pagination limits
Closed Accordion content unmounts after its close spring settles, dropping element/keyed state held inside the panel. Preserve durable state in entities. Under reduced motion this optimization keeps content mounted. Pagination ellipsis menus cap hidden-page choices at the nearest 100; use successive menus to reach farther pages. (#3279)
Form visibility and attachment presentation
Field::visible(false) now hides the field instead of being ignored. Attachment has new default chip sizing, radius, status overlays and failure colors; review applications that depended on its former content-sized geometry. (#3269, #3195)
Chart labels and duplicate x values
LineChart/AreaChart position duplicate x values at their individual indices, matching hover. Vertical BarChart with labels reserves slightly more top space (bars draw 2px shorter); PieChart tooltip labels are configured separately from leader-line labels. (#3262, #3217, #3176)
Thank you to everyone who contributed code, documentation, testing, and feedback!
What’s Changed
- chore: Add a /release-notes command by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3117
- chart: Start a pie leader line at the lifted slice edge by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3121
- chore: Move the tested consumer crate into the workspace by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3118
- chart: Fix the pie radius fallback and fit the gallery’s region labels by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3123
- docs: Bind keys before the menu bar, and say what makes a handle a Tab stop by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3124
- input: Add atomic inline tokens to Input and Textarea by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3113
- switch: Draw the focus ring when the switch is focused by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3120
- theme: Add
Theme::updateto keep colors, tokens and the Base projection in step by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3122 - popover: Tell the trigger it is open instead of selected by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3125
- popup: Keep the client inset only on untiled window edges by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3130
- dialog: Merge
button_propsinstead of replacing them by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3126 - questionnaire: Add a Questionnaire component by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/2878
- menu: Draw a context menu only from the trigger that was pressed by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3135
- input: Clear the blink state when the cursor stops by @novakduc in https://github.com/longbridge/gpui-kit/pull/3139
- input: Do not start the blink cursor on an unfocused input by @novakduc in https://github.com/longbridge/gpui-kit/pull/3140
- table: Read and write the selection as one
TableSelectionvalue by @violetpurpleish in https://github.com/longbridge/gpui-kit/pull/3143 - label: Skip highlights while masked by @violetpurpleish in https://github.com/longbridge/gpui-kit/pull/3142
- setting: Add optional footers outside group surfaces by @AprilNEA in https://github.com/longbridge/gpui-kit/pull/3133
- accordion: Preserve disabled state of individual items by @violetpurpleish in https://github.com/longbridge/gpui-kit/pull/3141
- select: Emit dismissal when an open menu closes by @violetpurpleish in https://github.com/longbridge/gpui-kit/pull/3144
- popover: Add offset and optional anchor-aligned arrows by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3145
- gpui-pre: Inject staged crates as git dependencies in the kit check by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3146
- gpui-pre: Publish even when gpui-kit fails the compatibility check by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3148
- kit: Update GPUI to gpui-pre 0.3.6 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3147
- marker: Add
alignmentfor centered and trailing rows by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3151 - text: Stagger
stream_fadeby word, dropping it for oversized chunks by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3153 - list: Restore the outline on the right-clicked item by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3155
- notification: Fix center notification stacks reliably on web by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3149
- kit: Pin gpui-pre to the exact snapshot each release is built against by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3163
- website: Publish versioned website builds by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3159
- text_view: Add
TextViewState::selected_source_rangeby @tidely in https://github.com/longbridge/gpui-kit/pull/3136 - input: Scroll straight to a far-off caret after an edit by @Tryanks in https://github.com/longbridge/gpui-kit/pull/3150
- website: Load shared WASM examples from root by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3165
- message: Add
idandrole, stop setting the row’s typography by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3171 - bubble: Do not clip the children of a
Ghostbubble by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3172 - chart: Default a chart’s id to its construction site by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3173
- story: Keep a chart card’s legend inside the card by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3174
- root: Add Base window hosting and a single Kit startup entry point by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3152
- resizable: Grow an indicator as the pointer engages a divider by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3175
- markdown: Keep prose inside unclaimed math spans and pair inline HTML tags by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3178
- chart: Let a chart stand down, and let its tooltip say what it means by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3176
- website: Add docs for GPUI action, event by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3179
- toolbar: Add Toolbar and ToolbarGroup components by @bipinnatus2k in https://github.com/longbridge/gpui-kit/pull/3128
- switch: Preserve track width with long labels by @violetpurpleish in https://github.com/longbridge/gpui-kit/pull/3154
- website: add GPUI core concept guides by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3181
- text: Refine heading styles by level by @wweziza in https://github.com/longbridge/gpui-kit/pull/3129
- text_view: Lay an inline flow out once, not every frame by @stippi in https://github.com/longbridge/gpui-kit/pull/3180
- website: isolate versioned documentation snapshots by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3189
- dialog: Reclaim top space for oversized content by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3188
- text_selection: Keep a participant whose cached view replayed its frame by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3193
- website: Fix historical website builds without component pages by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3196
- resizable: Draw a hugging handle’s hairline on the seam by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3200
- website: add JSON-backed theme command palette by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3198
- dock: fix nested moves and add opt-in tab close controls by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3197
- input: Add collection-owned geometric range decorations by @feigeCode in https://github.com/longbridge/gpui-kit/pull/3040
- editor: Size line-number gutter between three and seven digits by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3205
- input: Let Textarea take a size, like Input by @Alanaktion in https://github.com/longbridge/gpui-kit/pull/3191
- highlighter: Remove deprecated usize import by @akeit0 in https://github.com/longbridge/gpui-kit/pull/3186
- a11y: accessible names for SidebarMenuItem, ListItem and SidebarToggleButton by @noosxe in https://github.com/longbridge/gpui-kit/pull/3160
- setting: let SettingGroup override the settings-level group variant by @ayangweb in https://github.com/longbridge/gpui-kit/pull/3203
- mobile: stop reverse fling after short ScrollBounce catch by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3207
- website: Refine design guides and restore custom website themes by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3211
- chart: Pin the y axis and reserve points in line and area charts, count ticks in
value_tick_countby @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3209 - website: Pace radius hierarchy animation in distinct phases by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3212
- story: Show slider scales through Story composition by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3213
- markdown: Fix Markdown ordered-list starting numbers by @wabzqem in https://github.com/longbridge/gpui-kit/pull/3204
- select: Stop the popup from overhanging the trigger on the right by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3218
- setting: Scroll to a group selected from another page by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3219
- chart: Color a bar chart’s labels per bar, set its band padding, and keep empty bars visible by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3217
- resizable: Stop a dock handle’s hairline from painting over popovers by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3221
- date_picker: Support editing the time of day with
TimeFieldby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3206 - chart: Label the value axis, lay out the grid and mark reference lines in line, area and bar charts by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3220
- plot: Glide the tooltip’s crosshair and dots in
Tooltipitself by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3222 - text_view: Add range highlights by @white07S in https://github.com/longbridge/gpui-kit/pull/3215
- menu: Break Rc cycle that leaked PopupMenu entity on window close by @lysci in https://github.com/longbridge/gpui-kit/pull/3224
- text: Throttle streamed-fade repaints to reduce CPU use by @Astro-Han in https://github.com/longbridge/gpui-kit/pull/3226
- docs: expand GPUI core guides and improve documentation UI by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3225
- chart: Customize series chart tooltips by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3228
- dock: Drag a bottom dock shut and back open in one continuous motion by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3229
- attachment: Adopt the composer design with built-in remove, retry and progress by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3195
- docs: deepen GPUI manual and add release guides by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3232
- base: Bundle IBM Plex Sans so the web examples resolve
.SystemUIFontby @ihavecoke in https://github.com/longbridge/gpui-kit/pull/3235 - text_view: Add
TextViewState::reveal_rangeby @white07S in https://github.com/longbridge/gpui-kit/pull/3216 - highlighter: Read tree-sitter input as bytes to avoid aborting inside multi-byte chars by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3238
- website: Make the active sidebar item stand out by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3237
- chart: Add
chart.gridtheme color for grid lines by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3236 - text: Keep a line with inline code as tall as a plain line by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3240
- docs: add an Images guide covering img, svg and HTTP caching by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3239
- website: fix text selection theme token by @yuuzhou5 in https://github.com/longbridge/gpui-kit/pull/3241
- shell: Enforce script network policy for TextView images by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3230
- website: Fall back to
primary.backgroundfor themes withoutselection.backgroundby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3242 - attachment: Show retry control when failed media has no source by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3233
- website: Keep versioned docs links inside their version by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3243
- docs: Share repository instructions across coding agents by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3251
- input: Fix accessibility focus and SetValue by @steipete in https://github.com/longbridge/gpui-kit/pull/3246
- text: Avoid quadratic table highlight remapping by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3247
- form: Apply Styled refinements to Form by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3248
- list: Paint Role::List on focusable ListState container by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3249
- input: Revert #3246 to restore reverse tab traversal by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3253
- input: Restore guarded accessibility actions without changing tab order by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3254
- input: Cover UI workflows and fix disabled focus and vertical selection by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3256
- docs: base manual UI review checks on test coverage by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3257
- perf(input): reduce redundant work in the code editor by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3260
- perf(chart): speed up painting and hover by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3262
- perf(text): reduce streaming, hover and selection work in TextView by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3261
- perf(table): speed up cell rendering by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3264
- perf(carousel): stop relayout on ancestor scroll by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3266
- perf(highlighter): reuse injection trees by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3263
- perf(tree): avoid cloning subtrees by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3265
- perf(form): skip rendering hidden fields by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3269
- perf(rating): skip redundant hover repaints by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3270
- input: Refresh an open code action menu on a new request by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3274
- perf(command): skip remeasuring unchanged rows by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3268
- perf(menu): fix DropdownMenu memory leak by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3267
- text_view: Avoid quadratic Markdown source mapping by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3273
- docs(input): context_menu(false) also turns off a custom menu by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3275
- input: Paste from the context menu on the wasm by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3244
- base: Center the Dialog popup by default and keep presses on it by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3277
- base: Center a single-line Input in its frame by default by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3278
- perf: reduce redundant work in six components by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3279
- select: Truncate overflowing option labels with an ellipsis by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3280
- plot: Move plot primitives to gpui-base by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3258
- release: Skip Kit compatibility checks when publishing GPUI by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3282
- popover: Apply trigger_style to the trigger container by @Yi-111-a in https://github.com/longbridge/gpui-kit/pull/3245
- kit: Update GPUI to gpui-pre 0.3.7 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3283
New Contributors
- @novakduc made their first contribution in https://github.com/longbridge/gpui-kit/pull/3139
- @violetpurpleish made their first contribution in https://github.com/longbridge/gpui-kit/pull/3143
- @AprilNEA made their first contribution in https://github.com/longbridge/gpui-kit/pull/3133
- @tidely made their first contribution in https://github.com/longbridge/gpui-kit/pull/3136
- @bipinnatus2k made their first contribution in https://github.com/longbridge/gpui-kit/pull/3128
- @wweziza made their first contribution in https://github.com/longbridge/gpui-kit/pull/3129
- @Alanaktion made their first contribution in https://github.com/longbridge/gpui-kit/pull/3191
- @akeit0 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3186
- @noosxe made their first contribution in https://github.com/longbridge/gpui-kit/pull/3160
- @ayangweb made their first contribution in https://github.com/longbridge/gpui-kit/pull/3203
- @white07S made their first contribution in https://github.com/longbridge/gpui-kit/pull/3215
- @lysci made their first contribution in https://github.com/longbridge/gpui-kit/pull/3224
- @Astro-Han made their first contribution in https://github.com/longbridge/gpui-kit/pull/3226
- @yuuzhou5 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3241
- @steipete made their first contribution in https://github.com/longbridge/gpui-kit/pull/3246
- @Yi-111-a made their first contribution in https://github.com/longbridge/gpui-kit/pull/3248
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.6…v0.7.0
v0.6.6
- label: Skip highlights while masked (https://github.com/longbridge/gpui-kit/pull/3142) by @violetpurpleish
- kit: Pin gpui-pre to the exact snapshot each release is built against (https://github.com/longbridge/gpui-kit/pull/3163) by @huacnlee
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.4…v0.6.6
v0.6.4
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
PieChartwithout an explicitouter_radiuspaints 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
- chart: Start a pie leader line at the lifted slice edge by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3121
- chart: Fix the pie radius fallback and fit the gallery’s region labels by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3123
- popup: Keep the client inset only on untiled window edges by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3130
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.2…v0.6.4
v0.6.2
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 selectableTextViewselects 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
ScrollBouncewrapper ingpui-base, covering lists, scrollabledivs, 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, andEmptyContent, imported fromgpui_kit::component::empty. (#3030) - InputGroup: inline addons, block toolbars, and textareas sharing one input frame through
InputGroup,InputGroupInput,InputGroupTextarea,InputGroupAddon,InputGroupButton, andInputGroupText. (#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, andsearch_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_pastetoInput,Textarea, andEditorso 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
MarkdownPluginand.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 throughTextViewMotion. (#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
Sequencechains transitions so a step starts when the previous one ends, each with its own duration, easing, and delay. (#3092)gpui_base::initreads the operating system’s reduced-motion preference intoApp::reduce_motion, which every Base motion primitive already honors. (#3094)
Dock
- Removed the tiles canvas.
SplitandTabsare now the only container shapes; a freeform canvas is a panel the host implements.gpui_component::dock::Panel::title_barlets a panel that carries its own chrome opt out of the tab group’s title bar. See Breaking Changes below. (#3036) - Added
DockArea::select_panelto display a tab byPanelIdwherever it sits, without moving it. (#3063)
Components
- Button: a ghost button hovers with
accentand presses withbutton_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_selectableis 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
- chore: Refresh the recipes lock for the
0.6.1version bump by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3024 - carousel: Add a Carousel component by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/2867
- shell: switch to quickjs-jit 0.12.7 with upstream compatibility facade by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2903
- fps: Leave the readout clock’s own frame out of the readings by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3025
- component: Fix text descender clipping by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3023
- avatar: Draw the initials fallback from an even OkLCH hue ring by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3026
- tab: Fix explicit scrolling to newly added tabs by @BeratHundurel in https://github.com/longbridge/gpui-kit/pull/3021
- editor: keep wrapped search matches visible with context by @hlcfan in https://github.com/longbridge/gpui-kit/pull/3013
- color_picker: Fix prevent duplicate accessibility node IDs by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3028
- fps: Grade against the panel, and stop the clock while hidden by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3029
- tab: Let
flex_1()tabs fill the tab bar again by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3032 - table: Stop keyboard row navigation when
row_selectableis off by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3033 - text_view: Add Inline plugin by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3031
- chore: Fix inline flow lint. by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3034
- empty: Add composable empty states by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3030
- text: Fix inline-code heading layout and list alignment by @wabzqem in https://github.com/longbridge/gpui-kit/pull/3038
- dock: Remove the tiles canvas by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3036
- website: fix docs sidebar hover background clipped on left edge by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3044
- highlighter: allow languages to register runtime parser factories by @feigeCode in https://github.com/longbridge/gpui-kit/pull/3039
- text: prevent inline-code fragments from wrapping twice by @wabzqem in https://github.com/longbridge/gpui-kit/pull/3046
- kit: Add support mobile applications in GPUI Kit by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3045
- select: Clear the search query when the menu closes by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3050
- shell: validate default TextView link URLs by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/3048
- chore: Relax exact gpui-pre dependency pins when staging by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3059
- mobile: Support mobile text selection and scrollbar dragging by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3058
- scrollbar: Preserve thumb alignment and drag throttling for mobile support by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3060
- docs: document notification placement by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3062
- test: adapt TextView settle check for GPUI 0.3.5 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3064
- chore: Fix release gpui scope staged GPUI clippy warnings by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3065
- chroe: Allow upstream deprecations in GPUI release check by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3066
- dock: Add
DockArea::select_panelto display a tab by panel identity by @kameron1979 in https://github.com/longbridge/gpui-kit/pull/3063 - website: Let the browser draw emoji and CJK text the bundled fonts lack by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3057
- base: Add iOS like ScrollBounce by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3067
- ci: Split checks into parallel jobs and stop recompiling GPUI per step by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3068
- base: Walk rows, not characters, for Inline text line bounds by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3070
- plot: Paint grids as quads and cache tessellated line and area paths by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3071
- mobile: Add touch selection handles and an edit menu to Input and TextView by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3073
- base: Give a double tap handles, and let Select All reach past the viewport by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3076
- base: Bring the edit menu back after a scroll the container swallowed by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3075
- base: Keep a finger’s double tap out of read-only text by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3077
- plot: Open a plot’s tooltip with a long press on mobile by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3078
- mobile: Size the dock title bar’s buttons and Clipboard for a finger by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3079
- dock: Revert the mobile title bar sizing by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3080
- list: Trim what a scrolling list pays per frame outside GPUI by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3085
- input: Add on_paste to handle images from clipboard instead of silently dropping them by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3087
- text: Fade streamed text in with
TextView::stream_fadeby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3082 - text_view: Decode a Markdown image’s
data:URL instead of fetching it by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3088 - text_view: Build fewer, cheaper elements per Markdown frame by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3090
- dialog: Keep a dialog inside the window it opens in by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3093
- menu: Let a submenu open from a scrollable PopupMenu by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3095
- menu: Paint a menu’s shortcut hints on the frame it opens by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3096
- base: Read the operating system’s reduced-motion preference at init by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3094
- motion: Chain transitions with
Sequenceso a step starts when the last one ends by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3092 - button: Hover a ghost button with
accent, press it withbutton_activeby @madcodelife in https://github.com/longbridge/gpui-kit/pull/3100 - dialog: Route a dialog’s own controls to that dialog by @IHadACookie in https://github.com/longbridge/gpui-kit/pull/3097
- setting: Fix delegate number step and clamp to InputState by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3099
- website: Skip the system font probe while no font is installed by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3106
- setting: Preserve selected page identity when searching by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3104
- input: Expose editor search API by @calmondev in https://github.com/longbridge/gpui-kit/pull/2533
- list, table: Drop the outline from the selected item, row and cell by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3108
- docs: Certify AI-facing consumer recipes by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3109
- input_group: Add InputGroup by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/3042
- scrollbar: Shrink the resting thumb on mobile by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3111
- chart: Animate the hover, cache heavy geometry and rework the gallery cards by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3112
- shell: update QuickJS JIT to 0.12.9 by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3116
- text_view: Keep a paragraph’s shaped text and rendered highlights across frames by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3115
New Contributors
- @feigeCode made their first contribution in https://github.com/longbridge/gpui-kit/pull/3039
- @kameron1979 made their first contribution in https://github.com/longbridge/gpui-kit/pull/3063
- @calmondev made their first contribution in https://github.com/longbridge/gpui-kit/pull/2533
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.1…v0.6.2
v0.6.1
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_closeandsmart_indentpreferences. (#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()andFrontmatterPlugin. 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_dismissrun consistently regardless of how the popup closes. (#2973, #2984) - Sidebar: added
Styledsupport andlabel_styletoSidebarMenuItem. (#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
uxthemeloading 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
- website: Bundle IBM Plex Sans so
.SystemUIFontresolves on the web by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2933 - gpui-pre: Audit licenses before publishing and state GPUI’s origin by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2936
- chore: Let the doctests written for gpui-kit users compile by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2937
- website: Add a release notes page and keep page titles off the toolbar by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2935
- button: Select a ghost button with
secondary_activeagain by @madcodelife in https://github.com/longbridge/gpui-kit/pull/2938 - shell: Improve application compatibility by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2939
- chroe: Drop the unused reqwest_client dependency by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2940
- base: Stop auto scroll once the text selection gesture has ended by @madcodelife in https://github.com/longbridge/gpui-kit/pull/2941
- skills: Quote gpui-kit skill description by @prabirshrestha in https://github.com/longbridge/gpui-kit/pull/2943
- fps: Sustain frames by default, and stop grading the rate by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2944
- website: migrate from VitePress to Astro by @endless-bot in https://github.com/longbridge/gpui-kit/pull/2926
- story: Draw the chart gallery through a virtual list by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2950
- markdown: render hard line breaks instead of concatenating lines by @kossoy in https://github.com/longbridge/gpui-kit/pull/2945
- editor: Refocus the search bar when search is invoked again by @hlcfan in https://github.com/longbridge/gpui-kit/pull/2932
- markdown: reflow soft line breaks instead of rendering them as hard breaks by @kossoy in https://github.com/longbridge/gpui-kit/pull/2947
- text: remeasure list items when a document is replaced with an equal block count by @kossoy in https://github.com/longbridge/gpui-kit/pull/2946
- website: Add five apps to the app stories page by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2951
- resizable: Fix panel resizing flickering by @hlcfan in https://github.com/longbridge/gpui-kit/pull/2907
- shell: Expose GPUI’s list and uniform_list to scripts by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2952
- fps: Derive the headline rate from frame cost instead of driving the frame loop by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2954
- fps: Cap the headline by asking the platform what the panel runs at by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2956
- sidebar: make SidebarMenuItem implement Styled and add label_style by @ItsCacia in https://github.com/longbridge/gpui-kit/pull/2957
- website: Fix Showcase lockfile installation in docs releases by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2958
- website: Refine App Stories layout and browsing by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2960
- website: Remove two Vue components orphaned by the Astro migration by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2965
- editor: Reveal search match after manual scroll by @hlcfan in https://github.com/longbridge/gpui-kit/pull/2955
- chore: Forward platform test support and profiling by @grishy in https://github.com/longbridge/gpui-kit/pull/2966
- base: move the native examples into their own package by @Tryanks in https://github.com/longbridge/gpui-kit/pull/2963
- editor: Preserve active search match on panel open by @hlcfan in https://github.com/longbridge/gpui-kit/pull/2953
- dialog: make the close button accessible by @grishy in https://github.com/longbridge/gpui-kit/pull/2969
- button: expose preferred tooltip placement by @grishy in https://github.com/longbridge/gpui-kit/pull/2971
- docs: welcome AI-assisted contributions by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2981
- ci: enable weekly gpui-pre releases by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2982
- native_menu: Constrain uxtheme loading to System32 by @lurenjia534 in https://github.com/longbridge/gpui-kit/pull/2974
- select: expose committed values and accessible activation by @grishy in https://github.com/longbridge/gpui-kit/pull/2973
- list: measure an existing row when the configured item is absent by @grishy in https://github.com/longbridge/gpui-kit/pull/2975
- story: replace List search results without duplicating rows by @grishy in https://github.com/longbridge/gpui-kit/pull/2976
- icon: Support SVG bytes in component icon slots by @suxiaoshao in https://github.com/longbridge/gpui-kit/pull/2980
- select: run on_dismiss however the popup closes by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2984
- chore: isolate story examples from test-support by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2985
- input: Multi cursors by @zanmato in https://github.com/longbridge/gpui-kit/pull/2837
- input: Keep column selection width over short rows by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2987
- input: preserve CRLF cursor boundaries and document shortcuts by @kossoy in https://github.com/longbridge/gpui-kit/pull/2986
- chore: Fix the CI metadata parse and skip unchanged snapshots by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2992
- fix(base): name calendar items for accessibility by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2996
- chore: improve component conventions for AI-assisted development by @huacnlee in https://github.com/longbridge/gpui-kit/pull/2993
- highlighter: Update tree-sitter to remove workaround by @zanmato in https://github.com/longbridge/gpui-kit/pull/2990
- input: trigger pending re-highlight when switching editor language by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/2994
- input: Avoid notifying unchanged scroll and paint state by @jlucaso1 in https://github.com/longbridge/gpui-kit/pull/2988
- docs: document editor search panel and searchable API by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3002
- chore: Expand CONTRIBUTING.md with GPUI and GPUI Kit details by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3004
- docs: separate Component API docs from shared Kit guides by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3006
- theme: Fall back to an installed monospace font when the default is missing by @madcodelife in https://github.com/longbridge/gpui-kit/pull/3009
- docs: document fonts - system, theme, custom bundling, and WASM by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3010
- kit: Add headless UI testing to gpui-kit by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3005
- docs: migrate root/theme/dock from docs to component section by @endless-bot in https://github.com/longbridge/gpui-kit/pull/3014
- website: Preserve docs sidebar scroll position across navigation by @loosheng in https://github.com/longbridge/gpui-kit/pull/3007
- kit: expand core UI integration coverage by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3019
- markdown: Add Frontmatter plugin as structured metadata by @BeratHundurel in https://github.com/longbridge/gpui-kit/pull/2850
- assets: share Lucide icon names and preserve default icons by @huacnlee in https://github.com/longbridge/gpui-kit/pull/3020
- text_view: Improve inline code render with rounded style and mono font by @kossoy in https://github.com/longbridge/gpui-kit/pull/2949
- text_selection: drag-autoscroll never moved a virtualized list by @kossoy in https://github.com/longbridge/gpui-kit/pull/2948
- editor: auto-close brackets and smart indent on Enter by @Muhammad-Owais-Warsi in https://github.com/longbridge/gpui-kit/pull/3018
New Contributors
- @prabirshrestha made their first contribution in https://github.com/longbridge/gpui-kit/pull/2943
- @endless-bot made their first contribution in https://github.com/longbridge/gpui-kit/pull/2926
- @kossoy made their first contribution in https://github.com/longbridge/gpui-kit/pull/2945
- @grishy made their first contribution in https://github.com/longbridge/gpui-kit/pull/2966
- @Tryanks made their first contribution in https://github.com/longbridge/gpui-kit/pull/2963
- @Muhammad-Owais-Warsi made their first contribution in https://github.com/longbridge/gpui-kit/pull/2994
- @loosheng made their first contribution in https://github.com/longbridge/gpui-kit/pull/3007
Full Changelog: https://github.com/longbridge/gpui-kit/compare/v0.6.0…v0.6.1
v0.6.0
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-kitis the recommended facade for applications. It re-exports GPUI and the enabled Kit layers, providesapplication(),init(), and anactions!macro, and keeps matching GPUI dependencies together.gpui-baseprovides 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-componentremains the complete styled UI system and builds ongpui-base.gpui-shellis a new scriptable application runtime that lets a Rust host expose GPUI capabilities to JavaScript. (#2821)gpui-fpsadds a real-time FPS and resource HUD, including CPU, memory, GPU, and frame-tail reporting. (#2704)gpui-wryis 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:
Commandpalette,NativeMenu,StatusBar,Pagination,Stepper,HoverCard,AlertDialog,FocusTrap, and a redesigned declarativeDialogAPI. - Data entry and display:
Combobox,Rating,ProgressCircle, a new lightweight declarativeTable, and multi-row headers, cell selection, custom row heights, resizing constraints, and batched export forDataTable. - Communication UI: composable
Message,MessageScroller,Bubble,Attachment, andMarkercomponents 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:
NavStackprovides 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/InputStatefor single-line text, masks, validation, and number entry.Textarea/TextareaStatefor multiline text, rows, soft wrapping, auto-grow, and chat-style submit behavior.Editor/EditorStatefor 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:
SankeyChartandRadarChart.- 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
TextViewreplacements 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-fpsHUD 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)
DockItemwas replaced by the pure-dataDockLayoutbuilder.- Styled applications should wrap panels with
panel_handleand use thepanel_view,tile_view,add_panel_view, andadd_tile_viewentry points. - The old
Paneltrait is split betweengpui_base::dock::Panelfor behavior andgpui_component::dock::Panelfor presentation. - The entity formerly named
TabPanelis nowgpui_base::dock::TabGroup; styledTabPanelis a renderer. - The tiles entity is now
TilesState;Tilesis its renderer. StackPaneland the publicDockentity were removed. Manage layouts throughDockAreaandDockPlacement.- Placement-specific accessors such as
left_dock()and setters such asset_left_dock()were replaced bylayout(placement),set_dock,set_dock_size,is_dock_open, andremove_dock. DockEvent::DragDrop(item)is nowDockEvent::DragDrop { item, target }, exposing where a host drag item landed. (#2661)
Dialog and chart tooltip construction
Dialog::new(window, cx)is nowDialog::new(cx). The declarative dialog API usestrigger,content,DialogHeader,DialogTitle,DialogDescription, andDialogFooter. (#2067)- Low-level chart tooltip construction now uses
Tooltip::new(cursor, bounds);Tooltip::position()andTooltipPositionwere removed.TooltipState::newno longer takes a position argument, andCrossLineis dashed by default. (#2500)
Smaller source-level changes
popover_stylemoved from theStyledExttrait toThemeStyled. (#2726)ScaleBandcategorical domains now requireEq + Hashrather thanPartialEq; the bound also applies to the band type used byBarChartandCandlestickChart. (#2885)- Boolean readers were normalized:
can_go_to_definition()is nowhas_definition(), while dock readers such ascan_zoom()andcan_close()are nowis_zoomable()andis_closable(). (#2810) - The default wrapping indent for multiline editors is now
WrappingIndent::Same. Editornow 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:
InputContextMenuCapabilitiesInputPresentationCalendarItemStateComboboxTriggerCtx, renamed toComboboxTriggerContextsetting::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-pre0.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 pathgpui_kit_assets) instead ofgpui-component-assets. - The project uses Rust edition 2024.
Deprecated APIs
animation::Transitionis retained as a deprecated alias; useanimation::EffectTransition. This is distinct from the newmotion::Transitiontiming policy.EasingError::InvalidBezierXis retained for source compatibility; useEasingError::InvalidBezierControlPoint.AlertDialog::overlay_closableis deprecated because alert dialogs intentionally cannot be dismissed by pressing the backdrop.Root::clear_text_selectionand the window text-selection extension methodsselected_text,has_text_selection,clear_text_selection, andend_text_selectionare deprecated; use the correspondinggpui_base::TextSelectionAPIs.SearchableListDelegate::sectionis deprecated; implementrender_section_headerto receiveWindowandAppaccess.
Thanks to all contributors
@zanmato @FlyingYu-Z @duanebester @stayhydated @CherryWorm @Moulberry @stippi
And thanks to all our first-time contributors:
- @orbisai0security made their first contribution in https://github.com/longbridge/gpui-kit/pull/1678
- @amiyzku made their first contribution in https://github.com/longbridge/gpui-kit/pull/1749
- @18o made their first contribution in https://github.com/longbridge/gpui-kit/pull/1753
- @TajangSec made their first contribution in https://github.com/longbridge/gpui-kit/pull/1772
- @gjfei made their first contribution in https://github.com/longbridge/gpui-kit/pull/1783
- @PleaseDont made their first contribution in https://github.com/longbridge/gpui-kit/pull/1797
- @vdualb made their first contribution in https://github.com/longbridge/gpui-kit/pull/1799
- @Nareshix made their first contribution in https://github.com/longbridge/gpui-kit/pull/1831
- @doubo6sir made their first contribution in https://github.com/longbridge/gpui-kit/pull/1848
- @yoogoc made their first contribution in https://github.com/longbridge/gpui-kit/pull/1871
- @elliottminns made their first contribution in https://github.com/longbridge/gpui-kit/pull/1917
- @fhluo made their first contribution in https://github.com/longbridge/gpui-kit/pull/1949
- @leoliu0605 made their first contribution in https://github.com/longbridge/gpui-kit/pull/1946
- @z-jxy made their first contribution in https://github.com/longbridge/gpui-kit/pull/1984
- @scottcg made their first contribution in https://github.com/longbridge/gpui-kit/pull/1985
- @PRRPCHT made their first contribution in https://github.com/longbridge/gpui-kit/pull/1970
- @Hizome made their first contribution in https://github.com/longbridge/gpui-kit/pull/1916
- @joris-gallot made their first contribution in https://github.com/longbridge/gpui-kit/pull/2041
- @suxiaoshao made their first contribution in https://github.com/longbridge/gpui-kit/pull/2084
- @tristanpoland made their first contribution in https://github.com/longbridge/gpui-kit/pull/2085
- @mengh04 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2096
- @lockedmutex made their first contribution in https://github.com/longbridge/gpui-kit/pull/2052
- @sassman made their first contribution in https://github.com/longbridge/gpui-kit/pull/2093
- @jacobtread made their first contribution in https://github.com/longbridge/gpui-kit/pull/2103
- @RivTian made their first contribution in https://github.com/longbridge/gpui-kit/pull/2104
- @ruri4 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2142
- @niteshbalusu11 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2154
- @KlausUllrich made their first contribution in https://github.com/longbridge/gpui-kit/pull/2144
- @jstnd made their first contribution in https://github.com/longbridge/gpui-kit/pull/2204
- @dunkmann00 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2206
- @xrtxn made their first contribution in https://github.com/longbridge/gpui-kit/pull/2210
- @nihalar made their first contribution in https://github.com/longbridge/gpui-kit/pull/2218
- @boboshan made their first contribution in https://github.com/longbridge/gpui-kit/pull/2230
- @ScottCUSA made their first contribution in https://github.com/longbridge/gpui-kit/pull/2239
- @lizhuangs made their first contribution in https://github.com/longbridge/gpui-kit/pull/2244
- @VOID404 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2212
- @lurenjia534 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2265
- @elcoosp made their first contribution in https://github.com/longbridge/gpui-kit/pull/2274
- @glani made their first contribution in https://github.com/longbridge/gpui-kit/pull/2278
- @BeratHundurel made their first contribution in https://github.com/longbridge/gpui-kit/pull/2286
- @regexident made their first contribution in https://github.com/longbridge/gpui-kit/pull/2310
- @Third-Thing made their first contribution in https://github.com/longbridge/gpui-kit/pull/2321
- @laojianzi made their first contribution in https://github.com/longbridge/gpui-kit/pull/2329
- @hewigovens made their first contribution in https://github.com/longbridge/gpui-kit/pull/2327
- @HuaGu-Dragon made their first contribution in https://github.com/longbridge/gpui-kit/pull/2354
- @Libadoxon made their first contribution in https://github.com/longbridge/gpui-kit/pull/2383
- @gaoyia made their first contribution in https://github.com/longbridge/gpui-kit/pull/2396
- @hlcfan made their first contribution in https://github.com/longbridge/gpui-kit/pull/2417
- @PeterDaveHello made their first contribution in https://github.com/longbridge/gpui-kit/pull/2427
- @mike-marcacci made their first contribution in https://github.com/longbridge/gpui-kit/pull/2414
- @panzhifu made their first contribution in https://github.com/longbridge/gpui-kit/pull/2433
- @jayson-saavylab made their first contribution in https://github.com/longbridge/gpui-kit/pull/2454
- @linyisu made their first contribution in https://github.com/longbridge/gpui-kit/pull/2455
- @Xemorr made their first contribution in https://github.com/longbridge/gpui-kit/pull/2485
- @Vanuan made their first contribution in https://github.com/longbridge/gpui-kit/pull/2504
- @berestadev made their first contribution in https://github.com/longbridge/gpui-kit/pull/2519
- @cyfung1031 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2509
- @gintsgints made their first contribution in https://github.com/longbridge/gpui-kit/pull/2545
- @MSIsunny made their first contribution in https://github.com/longbridge/gpui-kit/pull/2540
- @amos-aios made their first contribution in https://github.com/longbridge/gpui-kit/pull/2554
- @MuNeNiCK made their first contribution in https://github.com/longbridge/gpui-kit/pull/2570
- @sh4den made their first contribution in https://github.com/longbridge/gpui-kit/pull/2574
- @LumenLib made their first contribution in https://github.com/longbridge/gpui-kit/pull/2587
- @nuskey8 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2601
- @Ziqi-Yang made their first contribution in https://github.com/longbridge/gpui-kit/pull/2592
- @wabzqem made their first contribution in https://github.com/longbridge/gpui-kit/pull/2585
- @zzfn made their first contribution in https://github.com/longbridge/gpui-kit/pull/2613
- @railapex made their first contribution in https://github.com/longbridge/gpui-kit/pull/2638
- @bws428 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2641
- @cdbkk made their first contribution in https://github.com/longbridge/gpui-kit/pull/2645
- @ItsCacia made their first contribution in https://github.com/longbridge/gpui-kit/pull/2655
- @sagarkarn made their first contribution in https://github.com/longbridge/gpui-kit/pull/2662
- @narma made their first contribution in https://github.com/longbridge/gpui-kit/pull/2369
- @Camork made their first contribution in https://github.com/longbridge/gpui-kit/pull/2746
- @MohamedAffes0 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2736
- @jarviisha made their first contribution in https://github.com/longbridge/gpui-kit/pull/2775
- @Oluwasetemi made their first contribution in https://github.com/longbridge/gpui-kit/pull/2786
- @Lay523 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2791
- @thedavidweng made their first contribution in https://github.com/longbridge/gpui-kit/pull/2805
- @geoffbeier made their first contribution in https://github.com/longbridge/gpui-kit/pull/2806
- @Butch78 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2823
- @duo made their first contribution in https://github.com/longbridge/gpui-kit/pull/2827
- @setsun made their first contribution in https://github.com/longbridge/gpui-kit/pull/2851
- @jlucaso1 made their first contribution in https://github.com/longbridge/gpui-kit/pull/2884
- @timty made their first contribution in https://github.com/longbridge/gpui-kit/pull/2876
- @emmanuel-defreitas made their first contribution in https://github.com/longbridge/gpui-kit/pull/2872
- @wyhaya made their first contribution in https://github.com/longbridge/gpui-kit/pull/2880
Thank you for helping make GPUI Kit better! ❤️
v0.5.1
- chore: Fix compilation errors on macOS caused by
core-textdependency.
v0.5.0
ColorPicker
- color_picker: Add radius on focus border by @madcodelife in #1652
- color_picker: Only change value when it’s confirmed by @madcodelife in #1682
ContextMenu
- context_menu: Prevent mouse events when menu popped out by @madcodelife in #1750
Divider
- divider: Add support for dashed divider by @madcodelife in #1730
Dock
- dock: Render title bar based on visible panels by @madcodelife in #1697
- dock: Use
visible_panelsmethod by @madcodelife in #1698 - dock: Refactor Panel trait to has
&mut selfand&mut Context<Self>by @huacnlee in #1716 - dock: Fix title method missed thing in PR #1716 by @huacnlee in #1718
- dock: Improve Panel trait changed
titleto returnimpl IntoElementby @huacnlee in #1719 - dock: Fix tab panel first tab left border overlap issue by @madcodelife in #1734
- dock: Simplify DockItem API by @huacnlee in #1732
Editor
- editor: Add InlineCompletion LSP support by @duanebester in #1736
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
- input: Fix scroll to offset to support soft wrap mode by @huacnlee in #1671
- input: Change to input text size to smaller by @huacnlee in #1703
- input: Adjust blink cursor height by @huacnlee in #1704
- input: Add to support CodeEditor as single line mode by @zanmato in #1696
- 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
- list: Refactor ListDelegate to easy access delegate by @huacnlee in #1713
- list: Fix list item may overflow by @huacnlee in #1726
Menu
- menu: Use defer to avoid race conditions with click listeners by @zanmato in #1651
- menu: Add
check_sideto PopupMenu to support display check at right side by @huacnlee in #1677
Chat
- plot: Add support for stacked chart by @madcodelife in #1681
- chart: Add candlestick chart by @amiyzku in #1749
Scrollbar
Refactor Scrollbar API to easy to use, and tidy scrollbar position in entire of components.
- scrollbar: Remove
Scrollbar::uniform_scroll, useScrollbar::verticalinstead by @huacnlee in #1659 - scrollbar: Manage ScrollbarState in Scrollbar internal by @huacnlee in #1690
- scrollbar: Introduce
overflow_scrollbarto adds Scrollbars to elements by @huacnlee in #1694
Setting
https://github.com/user-attachments/assets/3c6315d9-1183-419c-bb17-a8f7ac0cf25c
Sidebar
- sidebar: Refactor Sidebar to support
Styledby @huacnlee in #1658 - sidebar: Fix Sidebar group and items gap by @huacnlee in #1705
Table
- table: Refactor TableDelegate to easy to access delegate by @huacnlee in #1712
- table: Add
render_headermethod to support custom table header by @huacnlee in #1746
Tab
TextView
- text_view: Adding optional code block actions to the TextView by @duanebester in #1725
Theme
- theme: Update macos-classic list even color and improved details by @obito-t in #1679, #1699, #1702
- theme: Add
switch.thumb.backgroundtheme config support by @han1548772930 in #1685 - theme: Use difference color like the window background for TitleBar by @huacnlee in #1686
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
- webview: Public the raw wry webview handle by @madcodelife in #1739
Others
- chore: Update to use Rust edition 2024 by @huacnlee in #1669
- chore: Fix dialog scroll by #1694 change by @huacnlee in #1695
- docs: Fix minor docs issues by @zanmato in #1656
- docs: Remove outdated note on README by @huacnlee in #1700
- docs: Add icons for page background to website by @huacnlee in #1701
- docs: Fix typo in notifications doc by @huacnlee in #1747
Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.4.2…v0.5.0
v0.4.2
- 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
Button
Chart
- chart: Add support to set stroke color on LineChart by @madcodelife in #1629
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
Editor
Icon
- icon: Rework icons to make use of the
IconNamedtrait by @andreaskrath in #1640
Input
- input: Avoid blocking vertical scroll events in single-line mode (#1562) by @chulingera2025 in #1572
- input: Fix x offset resetting for single line inputs by @zanmato in #1591
List
- list: Fix incorrect selected item background color by @madcodelife in #1648
Menu
- menu: Fix icon width to tidy indent in
PopupMenuItem. by @madcodelife in #1620
Notification
- notification: Fix close animation not working when closed from content by @Moulberry in #1578
NumberInput
- number_input: Improve style details by @madcodelife in #1606
- number_input: Use input border on the buttons by @madcodelife in #1634
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
Select
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
- slider: Remove thumb tooltip by @CherryWorm in #1582
Table
- table: Split TableState to state.rs by @huacnlee in #1599
- table: Use click event instead of mouse down event by @madcodelife in #1622
Theme
- theme: Use
font_familyfor all elements. by @huacnlee in #1618 - theme: Fix
Flexoki Lightfocus color. by @huacnlee in #1647
Tiles
- tiles: Add auto-snap support for tiles panel to top and left edges by @ihavecoke in #1577
New Contributors
- @chulingera2025 made their first contribution in https://github.com/longbridge/gpui-component/pull/1572
- @zanmato made their first contribution in https://github.com/longbridge/gpui-component/pull/1591
- @adriano-tumino made their first contribution in https://github.com/longbridge/gpui-component/pull/1645
- @andreaskrath made their first contribution in https://github.com/longbridge/gpui-component/pull/1640
Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.4.0…v0.4.1
v0.4.0
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
itemtochildand addchildrenmethod. by @huacnlee in #1519 - clipboard: Removed
contentmethod from Clipboard. by @huacnlee in #1520 - dialog: Rename Modal to Dialog. by @huacnlee in #1538
- form: Renamed
columntocolumns. by @huacnlee in #1522 - form: Rename FormField to
Field. by @huacnlee in #1539 - input, select, date_picker: Refactor
cleanableto 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 Selftocontentandactionmethod. by @huacnlee in #1569 - radio: Rename
on_changetoon_clickfor RadioGroup. by @huacnlee in #1517 - resizable: Simplify Resizable API. by @huacnlee in #1459
- select, list: Update
searchabledefault to false. by @huacnlee in #1504 - sheet: Rename
DrawertoSheet. 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_menumethod in TableDelegate to mutablewindowandcx. by @huacnlee in #1487 - toggle: Refactor Toggle, ToggleGroup API. by @huacnlee in #1515
What’s New
Assets
- Add gpui-component-assets crate by @huacnlee in #1601 See Icon & Assets for how to use.
Button
- button: Remove duplicate disabled style by @madcodelife in #1529
- button_group: Add vertical by @Moulberry in #1537
- button_group: Fix overriding button click when no on_click by @Moulberry in #1546
Chart
- chart(pie): Support dynamic inner and outer radius by @madcodelife in #1444
- chart(bar): Fix the label is not centered by @madcodelife in #1448
Collapsible
ContextMenu
Input & Editor
- editor: Fix indent guides render position. by @huacnlee in #1524
- input: Improve double-click for word selection by @FlyingYu-Z in #1491
- input: Delete selected text with modifier keys by @Moulberry in #1497
- input: Avoid blocking vertical scroll events in single-line mode by @chulingera2025 in #1572
- input: Fix x offset resetting for single line inputs by @zanmato in #1591
Field
- form(field): Fix label line break not working by @madcodelife in #1558
Label
List
- list: Fix incorrect next selection when select index is none by @madcodelife in #1498
- list: Add
searchable,search_placeholderoption to List and Select. by @huacnlee in #1503 - list: Avoid select item when selectable(false). by @huacnlee in #1508
Menu
- menu: Add
itemand exportPopupMenuItemwith 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
- number_input: Improve style details by @madcodelife in #1606
Popover
- popover: Renamed
no_styletoappearancelike the Input. by @huacnlee in #1523 - popover: Improve Popover API. by @huacnlee in #1545
- popover: Fix #1545 incorrect to sync on_open_change to state. by @huacnlee in #1557
- popover: Fix click trigger to close popover. by @huacnlee in #1559
- popover: Revert defer_to focus on Popover open. by @huacnlee in #1571
Progress
- progress: Fix incorrect border radius by @madcodelife in #1555
Select
- select: Impl SelectItem for
&'static str. by @huacnlee in #1451 - select: Avoid reopen menu when clearing selection by @madcodelife in #1484
- select: Restore the selection when canceling by @madcodelife in #1501
Slider
- slider: Improve Slider interaction to click on bar to drag. by @CherryWorm in #1544
- slider: Add option to choose between linear and logarithmic scale by @CherryWorm in #1543
- slider: Remove thumb tooltip by @CherryWorm in #1582
Tab
Table
- table: Keep scroll to item at bottom when move down. by @huacnlee in #1499
- table: Fix Table stripe mode overflow scroll. by @huacnlee in #1530
- table: fix row border missing on first frame by @Moulberry in #1505
- table: Fix missing border on first frame by @Moulberry in #1533
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_radiustheme option and default 0px. by @huacnlee in #1441 - tiles: Add
scrollbar_showoption 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
- docs: Fix typo in README charting description by @gurjeet in #1434
- docs: Remove incorrect
Accessibilitysection. by @huacnlee in #1439 - docs: Update chart by @madcodelife in #1446
- docs: Improve docs add more details. by @huacnlee in #1447
- docs: Add Context & ElementId doc. by @huacnlee in #1460
- docs: Update docs website style. by @huacnlee in #1488
- docs: Fix footer and add note to home page. by @huacnlee in #1511
- docs: Update version to v0.4.0-preview1 in docs. by @huacnlee in #1534
- chore: Rename Dropdown to Select, TextInput to Input. by @huacnlee in #1449
- chore: Keep spawn task on it owner. by @huacnlee in #1456
- chore: Update List, Tree, Kbd exports. by @huacnlee in #1467
- chore: Move
searchableto ListState and SelectState. by @huacnlee in #1507 - chore: Remove unused image example. by @huacnlee in #1510
- chore: Standardize the overall API and improve docs. by @huacnlee in #1516
- chore: Dependency
gpui-macros/inspectorto inspector features by @ihavecoke in #1568
New Contributors
- @gurjeet made their first contribution in https://github.com/longbridge/gpui-component/pull/1434
- @FlyingYu-Z made their first contribution in https://github.com/longbridge/gpui-component/pull/1483
- @Moulberry made their first contribution in https://github.com/longbridge/gpui-component/pull/1497
- @CherryWorm made their first contribution in https://github.com/longbridge/gpui-component/pull/1544
- @chulingera2025 made their first contribution in https://github.com/longbridge/gpui-component/pull/1572
- @zanmato made their first contribution in https://github.com/longbridge/gpui-component/pull/1591
Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.3.1…v0.4.0
v0.3.1
What’s Changed
Input
- input: Fix may flash scroll when move cursor in auto grow mode. by @huacnlee in https://github.com/longbridge/gpui-component/pull/1419
Editor
- editor: Add indent guides. by @huacnlee in https://github.com/longbridge/gpui-component/pull/1426
- editor: Use
measure_indent_widthfor indent guides width. by @huacnlee in https://github.com/longbridge/gpui-component/pull/1428
List
- list: Use click events instead of mouse events when confirming by @madcodelife in https://github.com/longbridge/gpui-component/pull/1427
Tiles
- tiles: Ensure to response correct panel on drag or resize. by @huacnlee in https://github.com/longbridge/gpui-component/pull/1422
Theme
- theme: Update scrollbar background color to transparent for all themes. by @Copilot in https://github.com/longbridge/gpui-component/pull/1421
Example
- example: Add missed control icon assets by @iainlau in https://github.com/longbridge/gpui-component/pull/1424
- example: Fix title bar paddings for window_title example. by @huacnlee in https://github.com/longbridge/gpui-component/pull/1429
Others
- Add bump version shell by @madcodelife in https://github.com/longbridge/gpui-component/pull/1423
New Contributors
- @iainlau made their first contribution in https://github.com/longbridge/gpui-component/pull/1424
Full Changelog: https://github.com/longbridge/gpui-component/compare/v0.3.0…v0.3.1
v0.3.0
New features
Button
- button: Add support for
on_hoverevent by @madcodelife in #1341 - button: Fix the
on_hoverdoes not respond by @madcodelife in #1346 - button: Support specified anchor to dropdown button by @madcodelife in #1367
Checkbox
- checkbox: Do not stop propagation when click by @madcodelife in #1385
Dropdown
Editor
- editor: Fix code actions not display by @huacnlee in #1347
- editor: Add delay to trigger hover popover by @huacnlee in #1361
- editor: Improve hover popover delay by @huacnlee in #1389
Highlighter
Input
- input: impl Selectable for TextInput that allow it as trigger for popover by @richerfu in #1353
- input: Fix
set_valuewhen 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
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
- plot: Add StepAfter kind to StokeStrike by @itsmgo in #1356
- plot: Add stroke style per each Y series by @itsmgo in #1364
- plot(line_chart): Add missing natural stroke style by @madcodelife in #1366
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
- @richerfu made their first contribution in #1353
- @itsmgo made their first contribution in #1356
- @han1548772930 made their first contribution in #1370
- @YougLin-dev made their first contribution in #1398
- @vincenthz made their first contribution in #1404
- @stippi made their first contribution in #1410
v0.2.0
🚀 First release version to crates.io.
Improvements
Input & Text
- Disable context menu item for disabled input by @huacnlee (#1280)
- Use shape line for soft wrap lines by @huacnlee (#1293)
- Fix RopeExt replace method may not on a char boundary by @huacnlee (#1295)
- Update RopeExt to use LF style for line calc when
\rpresent by @huacnlee (#1296) - Fix Input to unselect on blur by @huacnlee (#1303)
- Avoid scroll on select all by @huacnlee (#1305)
- Clean to reset selection and scroll offset by @huacnlee (#1326)
- Implement styled for number input by @madcodelife (#1333)
Editor
- Add document_colors LSP by @huacnlee (#1329)
- Add to support move vertical for soft wrapped lines by @huacnlee (#1312)
- Avoid trigger hover on selection by @huacnlee (#1287)
- Improve
slice_linemethod performance by @huacnlee (#1290) - Improve TextWrapper performance by @huacnlee (#1292)
- Improve line number width by max lines by @huacnlee (#1291)
- Improve enter indent level performance by @huacnlee (#1304)
- Fix hover definition to hide immediately by @huacnlee (#1309)
- Fix Editor crash when content is empty by @huacnlee (#1314)
- Split Input and Editor background color by @huacnlee (#1323)
TextView & Highlight
- Refactor TextView/SyntaxHighlighter with async parsing to improve performance by @sunli829 (#1299)
- Support custom code block style by @huacnlee (#1288)
Theme & Style
- Fix Ayu theme comment color by @huacnlee (#1316)
- Update macos-classic dark theme color by @huacnlee (#1320)
- Update theme schema: remove
card, addgroup_boxby @huacnlee (#1321) - Fix button label overflow by @huacnlee (#1322)
- Bind element ID after button creation by @madcodelife (#1325)
- Let normal/active tabs share border to prevent flash by @huacnlee (#1327)
Menu & Context
- Better handle hover for menu item by @huacnlee (#1332)
- Add flex property to custom popup menu items by @ihavecoke (#1335)
- Improve MenuItem paddings by @huacnlee (#1339)
Bug Fixes
- Fix input mark text render by @huacnlee (#1298)
- Fix Editor crash when empty string triggers placeholder by @huacnlee (#1314)
- Fix context menu subscription leak by @huacnlee (#1337)
- Fix UTF-8 boundary in highlighter using
clip_offsetby @xudesheng (#1317)
Chores & Internal
- use async-wry by @sunli829 (#1300)
- Remove unnecessary RefCell by @sunli829 (#1301)
- Remove Wef code (moved to external crate) by @Copilot (#1302)
- Interpolate folder path via rust embed by @carlocorradini (#1318)
- Implement styled for custom style by @madcodelife (#1319)
New Contributors
- @xudesheng made their first contribution in https://github.com/longbridge/gpui-component/pull/1317
- @carlocorradini made their first contribution in https://github.com/longbridge/gpui-component/pull/1318
Full Changelog: https://github.com/longbridge/gpui-component/compare/v20250925…v0.2.0