Files
lumbridge-code/spikes/README.md
T
2026-08-31 18:02:01 -07:00

49 lines
2.3 KiB
Markdown

# Native UI spikes
These disposable applications render the same fixture through GPUI and Floem.
They are a decision instrument, not product code. The root workspace excludes
this nested workspace so normal Lumbridge CI does not download or compile both
UI frameworks.
The GPUI spike uses published `gpui 0.2.2`. The Floem spike pins upstream commit
`778bb5f2aa08429e579ee2e6ac97e84fbf18b618`; the crates.io `floem 0.2.0` package
lags the current API substantially enough that comparing it to current GPUI
would not be representative.
Both spikes must preserve the same information architecture:
- workspace/sidebar and remote host state;
- two rows of three busy surfaces;
- local and remote terminal/agent panes;
- native Markdown editor/preview and browser placeholders;
- connection, harness, usage, and burn context in the footer.
GPUI also has an integration mode with one real local PTY owned by
`lumbridge-runtime`; the other five surfaces remain deterministic. Floem and the
shared model retain the all-deterministic mode for like-for-like framework
comparison. GPUI feeds raw output through `lumbridge-terminal` and sends encoded
keyboard input and terminal protocol replies through the bounded runtime actor.
Its visual adapter coalesces VT cells into native styled runs, paints cursor
shapes, and resizes the engine and PTY from the middle 60% of a responsive
one/three/five-panel workspace. Every panel owns separate context and decision
regions. Retained-history navigation is wired; text selection and
mouse input remain intentionally unfinished.
Build independently:
```bash
cargo build --release --manifest-path spikes/gpui-shell/Cargo.toml
cargo build --release --manifest-path spikes/floem-shell/Cargo.toml
```
Each candidate is an independent Cargo workspace. GPUI pins `taffy 0.9.0`
while current Floem requires `taffy 0.9.2`; putting them in one comparison
workspace creates an artificial resolver conflict and would let one candidate's
dependency decisions distort the other candidate's build.
The comparison records release build time, binary size, startup, idle RSS,
six-pane streaming frame time, key-to-present latency, accessibility/IME,
window behavior, browser-child integration, packaging, dependency count, and
license closure on macOS, Ubuntu, and Omarchy. A build is not adoption: GPUI's
complete dependency-license closure remains a hard gate.