8aa9ddaeb2a428d795e2d33f67c0e5e2aa56cd13
Sidebar / window-edge animations emit a new viewport bounds on every GPUI paint. The previous flow fired `runtime.ensure_tab` synchronously on every change, which reached down into Servo's surfman backend and destroyed + reallocated the rendering framebuffer 50+ times per second — each cycle leaving the NSView with an empty surface until Servo's next paint completed. The user saw the page strobe blank-then-content on every gesture, plus a one-time Metal driver warning about an unloadable texture (the previous framebuffer caught mid-recreate). Track `viewport_size_changed_at` on `PerTabSurface` and propagate the debounce on two seams: - `record_viewport_size` returns `Buffered` for a transition that arrives inside the 80 ms window of the previous one, so the synchronous `flush_external_web_surface_tick` from the GPUI paint callback skips the resize altogether. The very first measurement and the first transition after a quiet period still return `Applied` so a single drag step or page-load is not delayed. - `ensure_surface` skips while the viewport is settling, but only *after* the initial ensure has installed `last_ensure_key`. The first ensure must fire even mid-gesture or the page never loads. - `next_tick_delay` clamps the poll cadence to `ACTIVE_POLL_INTERVAL` while any visible tab is settling, so the trailing-edge resize fires within a frame of the gesture stopping instead of waiting for an 80 ms idle tick. The synchronous `record + ensure` pattern in `failed_surface_ensure_waits_for_a_new_key_before_retrying` can't advance an `Instant`, so it now calls a `#[cfg(test)]` `clear_viewport_resize_debounce_for_test` to simulate the trailing edge and exercise the retry-on-new-key business rule in isolation. Adds `rapid_viewport_changes_buffer_until_gesture_settles` to lock the new behaviour.
ELY Browser
Native Rust + GPUI browser workspace for ELY Browser by Elydora.
The repository is organized around explicit product boundaries from PRD.md:
domain state, browser orchestration, design tokens, GPUI shell, and Servo host contracts.
Reference GPUI ecosystem repositories live under references/ for local review and are excluded
from version control.
Local Commands
cargo fmt --all --check
cargo check --workspace --all-targets
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace --all-targets
cargo check -p ely_servo_host --features servo-engine --all-targets
cargo clippy -p ely_servo_host --features servo-engine --all-targets -- -D warnings
cargo test -p ely_servo_host --features servo-engine --test software_host
scripts/verify_prd_site_rendering.sh
scripts/verify_windows_app_manifest.sh
cargo run -p ely_app
Cloudflare Auth Configuration
/api/auth/* is served by Better Auth in the Cloudflare Worker. Local wrangler dev
uses ELY_AUTH_BASE_URL from cloudflare/wrangler.toml; deployed environments should
set the matching public Worker origin.
Use Wrangler secrets or an untracked cloudflare/.dev.vars file for the remaining auth
bindings:
wrangler secret put ELY_AUTH_SECRET
wrangler secret put ELY_AUTH_GOOGLE_CLIENT_ID
wrangler secret put ELY_AUTH_GOOGLE_CLIENT_SECRET
wrangler secret put ELY_AUTH_GITHUB_CLIENT_ID
wrangler secret put ELY_AUTH_GITHUB_CLIENT_SECRET
wrangler secret put ELY_AUTH_EMAIL_OTP_ENDPOINT
wrangler secret put ELY_AUTH_EMAIL_OTP_TOKEN
Languages
Rust
76.2%
TypeScript
18.6%
JavaScript
3.8%
Shell
0.8%
CSS
0.3%
Other
0.2%