Files
Ely-GPUI-Components/tasks/kit.md
T

3.5 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 can also run on gpui-fast; 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.