Repository navigation
Background 09 phase 0 verdict
Research note dated 2026-10-10. Read for reasoning, not current fact; later decisions in
docs/decisions.mdanddocs/architecture-decisions.mdwin.The spikes it describes were throwaway code (D16) and were never merged. Notes 07 and 08 correct parts of the earlier notes, and note 03 assumes Tauri.
Moved from
docs/research/09-phase-0-verdict.md(original at af3de53) on 2026-10-16.
Written 2026-10-10 from two throwaway spikes built on 2026-10-09 and the
owner's own tests. The spikes' code was never merged; their full results are
on the local branches spike/gpui (spike-gpui/RESULTS.md, at bfac1c5)
and spike/tauri (spike-tauri/RESULTS.md, at 2579d86). This verdict is
for Windows 11 only (D2); macOS and Linux were not tested.
Go, with GPUI, on two conditions. The engine (WebView2 driven from Rust through wry, D3) works for the owner's hardest needs, and the GPUI chrome beats the Tauri + Svelte control by far more than D4's rule requires. The conditions are:
- Idle CPU must be fixed. GPUI's Windows backend repaints every window on every display refresh even when nothing changed, so the spike idles at 3.75% of one core against the 0.5% bar (D6). The owner allowed a small, pinned GPUI patch offered upstream (D37). If the patch can't bring idle CPU under 0.5%, GPUI against Tauri goes back to the owner.
- The untested musts are tested before Syrinx becomes the daily browser. Hulu, the 13 other daily sites, Google sign-in with a password and phone prompt, and staying signed in after a restart were not tried in Phase 0. They move into plan 1's Phase 2 exit criteria.
| Check (D6, D7) | Result | Evidence |
|---|---|---|
| Google sign-in, passkey | Pass | Owner, 2026-10-10 |
| Google sign-in, Workspace account | Pass (so no device-check block) | Owner, 2026-10-10 |
| YouTube | Pass | Owner, 2026-10-10 |
| Disney+ | Pass | Owner, 2026-10-10 |
| Live palette and sidebar peek over a page and over the editor, Esc returns focus | Pass in both spikes | GPUI 50/50 and Tauri 25/25 automated checks |
| Ctrl T, W, L, K, Ctrl Tab, Ctrl Shift T from a page and from the editor | Pass in both | Same suites |
| Tabs, navigation, back/forward, address sync, 10 tabs | Pass in both | Same suites |
Fullscreen video, crashed tab with reload, suspended tabs, popups as tabs keeping window.opener
|
Pass in both | Same suites |
| Page web views with no IPC handler, no injected script, no custom user agent; crash dumps local; SmartScreen on | Pass in both | Same suites; the Tauri control built page tabs straight from wry |
- Idle CPU: GPUI 3.75% of a core (fail); the Tauri control 0.54% (just over the bar). Condition 1.
- Acrylic blur: every call succeeds but no blur of the page is visible. Blur is optional (D7); the palette stays near-opaque.
- Not tested by the owner: Hulu; Google sign-in with a password and phone prompt; still signed in after a restart; the 13 other daily sites. The owner expects them to work because the engine is the same; D6 counted them, so they are tested in plan 1's Phase 2. Condition 2.
- Start to first page was measured at different moments in the two spikes (page title shown for GPUI, page starting to load for Tauri), so it is re-measured like for like with the idle-CPU patch.
- Smart App Control blocks unsigned debug builds on this machine; release builds run. Development uses a release-style profile (D38).
D4: switch to Tauri if GPUI saves less than about 50 MB and 150 ms, or if the overlays work only in Tauri.
| Measure (medians) | GPUI | Tauri + Svelte | GPUI's lead |
|---|---|---|---|
| Chrome on screen | 0.52 s | 1.44 s | about 0.9 s |
| Memory, no tabs | 27 MB (chrome alone) | 175 MB | about 148 MB |
| Memory, one tab | 273 MB | 335 MB | about 62 MB |
| Palette opens | 37 ms | 84–118 ms | about 50–80 ms |
| Idle CPU, 8 tabs suspended | 3.75% (fail) | 0.54% | Tauri leads |
| Overlays | Work | Work | Neither |
GPUI clears both thresholds, and the overlays work in both, so D4 keeps GPUI. Edge, measured by the GPUI spike on a fresh profile, opened its window in 0.95 s and used 980 MB with one tab and 2,049 MB with ten; a fresh Edge profile is a noisy baseline, so these are indications, not the D6 test, which is repeated on the real app in plan 1's Phase 5.
-
GPUI draws above the WebView2 child window, not below it, on this
machine (GPUI spike).
docs/dev/trapstoknow.mdsaid the opposite; it is corrected. Overlays still use separate popup windows, which work. - Note 08's code reading of the popup re-owning (
GWLP_HWNDPARENT) and the focus hand-off (WebView::focus()) is confirmed by running it.
Start plan 1 with GPUI. Put the GPUI idle-loop patch and a like-for-like re-measure into its foundations (Phase 1), and the owner's untested sites into Phase 2's exit criteria. Break plan 1 into issues once the owner has created a repository (D16).
Using the code
Background research
- 01 Shell and engine
- 02 Browser v1 scope
- 02a Tauri and wry facts
- 02b Default browser, import, signing
- 03 Core architecture
- 04 Forge and Notes
- 05 Fledge API
- 06 Engine and UI performance
- 07 Google sign-in and DRM
- 08 GPUI and wry on Windows
- 09 Phase 0 verdict
Ideas
In the repository