7fc2967793023bc35dc2e81b50c2669c78229ba9
Servo's \`WebView::set_history\` fires \`notify_url_changed\` on **every** history mutation — full navigations, redirects, in-page link clicks, and JS-driven \`history.pushState\` / \`history.replaceState\`. Our pipeline fans that delegate signal back through \`WebSurfaceUrlChange\` into \`tab.url\`. The next \`ensure_surface\` observes the new tab URL, hashes a fresh ensure key, and calls \`ServoLiveClient::ensure\` → \`apply_navigation\`. Until this commit \`apply_navigation\` compared the request against the local \`session.requested_url\` cache and, on mismatch, sent Servo a \`webview.load(url)\` — even when Servo was the one who *just* told us about that URL. \`WebView::load\` is a hard navigation: it tells the constellation to abort the current document, clear the surface, and refetch. google.com's homepage \`replaceState\`s a fresh \`?zx=<timestamp>\` roughly once a second to bust caches; with this round-trip we were turning each of those into a full load-clear-refetch and producing one visible white flash per second. Use \`host.snapshot(webview_id).url()\` (which Servo keeps in lock-step with \`set_history\`) as the source of truth. If Servo's WebView is already at the requested URL, just sync our \`session.requested_url\` bookkeeping and return — no \`load\` message, no surface clear, no flash. Genuine embedder-initiated navigations (chrome URL bar typed, in-app link click) still take the \`should_navigate\` path because Servo's URL hasn't caught up to the requested target yet.
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%