Files

6.2 KiB

GPUI Kit

Started 2026-10-07. Ely and Longbridge's GPUI Kit (gpui-kit on crates.io) share one app and one window. Measured before work:

  • Ely took gpui from Zed's git at 1a28cff; Kit 0.7.1 takes gpui-pre =0.3.8, a snapshot of Zed at 279fe07, 109 commits on. Two sources make two crates, and their elements do not mix. Ely on gpui-pre 0.3.8 builds and passes all 1,685 tests.
  • Actions and key contexts do not collide: Ely's namespaces and contexts all start with ely/Ely.
  • Ely binds Tab with no context, which gpui ranks at the deepest level. In a Kit code editor inside an Ely scope, Tab ties with Kit's indent, and the later init wins.
  • An app has one asset source. Of Ely's 306 icons, Kit's source holds 290 paths, 289 with the same drawing; credit-card differs by one stroke (Lucide 1.48 against 1.43). Ely's init checked one icon, so Kit's source alone passed and Ely's other files went missing later.
  • Kit's init installs its inspector in debug builds; Ely's install_inspector replaces it when called after.
  • Kit's main branch adds a gpui-fast engine, unreleased in 0.7.1; at the owner's word, Ely follows Kit's default gpui alone.

Rules: the work order follows dependencies, since the PRD has no chapter for it. Each item passes scripts/check.sh and a codex review (gpt-6.1-sol, effort high) in a herdr split, five rounds at most, then commits and pushes.

Items

  • K01 gpui from gpui-pre =0.3.8, Kit's pin: crate, gallery, web build, docs, CI
  • K02 Tab and Shift-Tab bound under FocusScope's own context, so a deeper context's Tab wins whatever the order of init
  • K03 Assets: init checks every embedded file through the app's source; one source serves Ely's files and another's
  • K04 compat/kit: a crate on the newest Kit that runs both libraries in one window, in scripts/check.sh and CI
  • K05 Docs: README, the site's guide, AGENTS.md
  • K06 Acceptance table

Log

One line per item: what changed, what stayed and why, review rounds.

  • K01: gpui, gpui_platform and gpui_web come from gpui-pre =0.3.8; the lock holds no git source and one copy of each. gpui-pre split leak detection from test-support, so this crate's test-support turns on gpui/leak-detection, and a test that leaks on purpose proves it. The check, the wasm check, the web build (20.0 MB), a headless Chromium shot and the site build pass. README and the install guide name the snapshot. Review: 2 rounds.
  • K02: FocusScope sets the key context ElyFocus, and init binds Tab and Shift-Tab under it. A host's Tab in a deeper context wins whatever the order of init (a test binds the host's first, the order that lost: 0 indents before, 1 after); Ely's terminal, editor, traps and the inspector's scope behave as before. Review: 1 round.
  • K03: init loads every file Ely bundles (318, Plex among them) through the app's source and fails naming the first it cannot; an icons-only source like Kit's passed the old one-icon check and fails now. Assets::before(other) serves Ely's paths first and the rest from other, its errors passing through. Docs and AGENTS.md say so. Review: 1 round.
  • K04: compat/kit, its own workspace, opens Ely's root scope inside Kit's Root and tests Tab through both libraries in each init order (red with K02 undone), Kit's dialog from an Ely button by key and by pointer, Ely's dialog over Kit's fields, and one asset source for both. check.sh resolves it afresh and holds gpui-kit to the newest release, so a Kit release on another gpui fails resolution naming gpui-pre (shown with Kit 0.7.0). Review: 2 rounds.
  • K05: the site's GPUI Kit guide (/docs/gpui-kit): dependencies, the start in four steps, focus, two themes, the inspector; the README points to it. compat/kit/examples/start.rs is a whole app, compiled by check.sh and run on Windows, where both libraries draw in one window. The guide says an app's Cargo keeps the newest Kit that shares Ely's GPUI, and names no unreleased Kit feature. Review: 2 rounds.
  • K04, reopened: CI's macOS job colors Cargo's output, so cargo search hid the version from sed and check.sh stopped there; the search now passes --color never (red with CARGO_TERM_COLOR=always, green with the flag). Review: round 3.
  • K06: the table below; every row checked against the commits, the reviews and CI. Review: 1 round.

Result

Surface Before Now Proof
gpui Zed's git at 1a28cff; Kit on gpui-pre =0.3.8: two crates whose elements do not mix gpui-pre =0.3.8 for gpui, gpui_platform and gpui_web The lock holds one copy of each; Kit 0.7.1 and Ely resolve to one gpui-pre in compat/kit
Ely on the new gpui — Builds natively and for wasm32 check.sh; the web build (20.0 MB) drawn in headless Chromium
Tests' leak guard gpui-pre dropped leak detection from test-support test-support turns on gpui/leak-detection tests::a_leaked_entity_fails_its_test, red without it
Actions, key contexts No collision Unchanged Namespaces ely* against Kit's root, input, ui, dock, number_input, inspector
Tab No context: Kit's code editor won or lost by the order of init Under ElyFocus, the scope's context a_deeper_context_keeps_its_own_tab_whatever_init_ran_last; compat/kit focus, red with the binding undone
Assets One icon checked; Kit's source passed and Ely's other files went missing Every bundled file checked; Assets::before joins Kit's assets::tests; compat/kit assets
Root and dialogs Untested Ely's scope inside Kit's Root; each library's dialog keeps Tab and hands focus back compat/kit dialogs: by key, by pointer, Ely's over Kit's fields
Themes, locales, inspector Separate Separate, by design; the guide names both switches and the inspector order The guide; compat/kit/examples/start.rs
A real window — Both libraries draw in one window start run on Windows
Kit's next release Unwatched check.sh asks for Kit's newest release and fails on another gpui, naming gpui-pre Shown with Kit 0.7.0; CI run 37661560047: macOS ran 1,693 Ely tests and the 6 in compat/kit, and five platforms built
gpui-fast — Out of scope, at the owner's word Unreleased in Kit 0.7.1