18fd20b577d9c73864030d0ed8d7a829adfc4950
T10.1: with the vendored `HardwareOffscreenContext` (048c5df) and the host-level kind dispatch (a7d3e89) in place, the sidecar binary still ignored the rendering context kind — every spawn was wired to the software path regardless of how the host process was built. This commit threads the choice end-to-end: * `ely_servo_sidecar` learns a `--rendering-context [software| hardware]` flag on its `live` subcommand. `LiveArgs` carries the parsed `RenderingContextKind` (defaulting to `Software` so existing invocations stay bit-identical) and `live.rs::run_live` routes it through to `SoftwareServoHost::new_with_config_dir_and_kind`. Unknown values produce a typed `SidecarArgsError::InvalidRenderingContext`; a missing value after the flag produces the existing `MissingArgumentValue`. * `ely_app` reads `ELY_SERVO_RENDERING_CONTEXT` (with values `software` / `hardware`, case-insensitive) and, if set, appends `--rendering-context VALUE` to the sidecar command line. Unset or unrecognised values fall through to the sidecar's own software default — a stale env var or a typo never breaks the browser startup. The sidecar arg parser is the source of truth for legality of explicit values; the env helper only gates which values reach it. * Five new unit tests in `args::tests` pin the new parse paths: default-is-software, explicit-software, explicit-hardware, bogus-value-rejected, missing-value-rejected. Run via `cargo test -p ely_servo_host --features servo-engine --bin ely_servo_sidecar` and now hit alongside the five existing snapshot tests for 10 passes. End-to-end perf expectation: with the sidecar binary built using `--features servo-engine,hardware-render` and the env var set to `hardware`, every spawned sidecar webview rasterises through the real GPU adapter (via the vendored `HardwareOffscreenContext`/surfman/CGL chain on macOS). The host still reads back RGBA into a `Vec<u8>` for the existing pipe protocol; the IOSurface zero-copy bridge that deletes that read-back is T10.2–T10.5 in docs/t10-iosurface-plan.md and lands in subsequent commits. cargo test --bin ely_app: 120 passed, 0 failed, 2 ignored. cargo test -p ely_servo_host --features servo-engine --bin ely_servo_sidecar: 10 passed. cargo test -p ely_servo_host --features servo-engine --test sidecar: 9 passed. cargo test -p ely_servo_host --features servo-engine,hardware-render --test hardware_rendering_context: 1 passed.
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%