Repository navigation
epic: a first-class immediate-mode toolkit #92
Copy link
Copy link
Closed
60 / 6060 of 60 issues completedLabels
featureNew capability or feature additionNew capability or feature additionminorBackwards-compatible new feature or capabilityBackwards-compatible new feature or capability
Description
Goal
Make blit a toolkit you would pick over Dear ImGui for a native tool, still fully cross-platform and dependency-free (no TTF, glyphs come from a pluggable source). Docking windows, chrome-free overlays, a style system that reaches every pixel, and the widgets, layout, motion, testing and tooling a desktop-grade app expects. #67 brought blit to parity with cellar's own UI. This epic goes past it.
Sub-Issues
Foundations
- feat!: hashed widget ids with an id stack #94 hashed widget ids with an id stack
- feat: a per-id state store owned by the context #95 a per-id state store owned by the context
- feat!: the full host input contract, time and frame scheduling #96 the full host input contract, time and frame scheduling
- fix: clip, origin, layer and run stacks fail silently past a fixed depth #97 clip, origin, layer and run stacks fail silently past a fixed depth
- feat: vector draw primitives #79 vector draw primitives and the scissored, indexed draw contract
Toolkit
- feat: public interaction primitives #78 public interaction primitives
- feat: text styles and rich spans #80 text styles and rich spans
- feat: a data-driven style system #81 a data-driven style system
- feat: full windows #82 full windows
- feat: docking #83 docking
- feat: overlays, toasts and tooltips #84 overlays, toasts and tooltips
- epic: menus, tables, trees and value editors #85 menus, tables, trees and value editors
- feat: charts with uneven x and step series #86 charts with uneven x and step series
- feat: stack layout with sizing rules #87 stack layout with sizing rules
- feat: animation and keyboard navigation #88 animation and keyboard navigation
- feat: a built-in vector icon set #89 a built-in vector icon set
- feat: an interface inspector and a demo gallery #90 an interface inspector and a demo gallery
- feat: text editing parity and a text area #98 text editing parity and a text area
- feat: drag and drop payloads #99 drag and drop payloads
- feat: modal dialogs #100 modal dialogs
- feat: consumer draw spans #101 consumer draw spans
- feat: a public headless test driver #102 a public headless test driver
- feat: a disabled scope for widgets #149 a disabled scope for widgets
Fixes and performance found along the way
- fix: VERSION constant says 0.8.0 #91 VERSION constant says 0.8.0
- perf: a local benchmark and colour conversion off the per-vertex path #103 a local benchmark and colour conversion off the per-vertex path
- fix: demo/bench results swing tens of percent between runs #119 demo/bench results swing tens of percent between runs
- fix: a press and release between two frames is lost #121 a press and release between two frames is lost
- perf: path fills cost the square of their edge count #123 path fills cost the square of their edge count
- fix: without a host clock every repeat click is a double click #137 without a host clock every repeat click is a double click
- fix: the wheel over a popup scrolls the region beneath it #147 the wheel over a popup scrolls the region beneath it
- perf: per-frame cost regressed across the epic, a 10k row list 45x #152 per-frame cost regressed across the epic, a 10k row list 45x
- fix: a change made by input waits for the next input to show #154 a change made by input waits for the next input to show
- fix: window and popup faces are translucent by default #156 window and popup faces are translucent by default
- fix: the gallery's style section asks for a frame every frame #160 the gallery's Style section asks for a frame every frame
boom
- feat: a blit input adapter in blitui boom#255 a blit input adapter in blitui
- feat: blitui renderer follows blit's indexed, scissored draw list boom#256 blitui renderer follows blit's indexed, scissored draw list
- feat: IME preedit and candidate window in the blit input adapter boom#257 IME preedit and candidate window in the blit input adapter (with feat: IME preedit and candidate window position mach-glfw#104)
- fix: blitui input adapter feeds button events to blit boom#259 blitui input adapter feeds button events to blit
- fix: demo/blit redraws continuously while idle boom#263 demo/blit redraws continuously while idle
Consumer
- refactor: move cellar's UI onto blit octalide/cellar#118 move cellar's UI onto blit
- feat: pass the wheel up from a scroll region that cannot move #164 pass the wheel up from a scroll region that cannot move
- feat: keyed, replaceable toasts anchored to any rect #165 keyed, replaceable toasts anchored to any rect
- fix: section caret size independent of line height #166 section caret size independent of line height
- feat: slider value fill #167 slider value fill
- feat: a passthrough central node in a dock space #168 a passthrough central node in a dock space
- feat: pass the wheel up from a table that cannot move #178 pass the wheel up from a table that cannot move
- fix: tree row caret size independent of line height #179 tree row caret size independent of line height
- fix: windows added to a leaf before its first draw take no stable order #190 windows added to a leaf before its first draw take no stable order
- fix: a tab's label is cut with room to spare #198 a tab's label is cut with room to spare
- feat: a main menu bar takes its row from the free area #196 a main menu bar takes its row from the free area
- fix: unshrunk tabs cut their labels with an ellipsis #194 unshrunk tabs cut their labels with an ellipsis
- feat: theme factor fields state their own range for the editor #192 theme factor fields state their own range for the editor
- fix: a pushed fill gives a gradient unless fill_to is pushed too #180 a pushed fill gives a gradient unless fill_to is pushed too
- chore: stale kind-range docs and a deprecated manifest key #181 stale kind-range docs and a deprecated manifest key
- fix: docked windows get no body padding #174 docked windows get no body padding
- feat: tab position and front tab when adding to a dock #175 tab position and front tab when adding to a dock
- feat: resize a carved dock against the app's view #176 resize a carved dock against the app's view
- fix: button labels spill past their button #177 button labels spill past their button
- feat: a wrapping flow layout #203 a wrapping flow layout
- fix: overlay padding uses one value for every side #207 overlay padding uses one value for every side
Sequencing
Shipped in blit 0.10.0 (#158, #159, tag v0.10.0) and 0.10.1 (#160). The follow-ups shipped in blit 0.11.0 (#201, #202, tag v0.11.0), and boom 0.41.0 (briar-systems/boom#271) moved to blit ^0.11. Remaining: octalide/cellar#118, owned outside this work.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
featureNew capability or feature additionNew capability or feature additionminorBackwards-compatible new feature or capabilityBackwards-compatible new feature or capability
Activity
34 remaining items
octalide commentedon Oct 3, 2026
Every sub-issue is closed. The epic is done and ships in the next release.