client/ is the application/client repo in the split Bridge workspace.
It owns the user-facing shell/app layer and is responsible for browser chrome, lifecycle, diagnostics, and backend orchestration.
This repo is in the middle of a broader split/rename transition:
- Bridge = the current workspace/repository architecture (
bridge/,client/,engine-custom/,engine-chromium/) - BROWZ = the browser product name still used in much of the historical documentation, example content, window titles, test fixtures, and some internal symbols
For now, assume those names refer to the same overall browser project unless a document says otherwise.
- application/window/chrome lifecycle
- browser navigation/controller logic
- session/debug/HUD/tooling surfaces
- current engine API headers and client-facing engine contract
- backend factory / backend selection
- client-facing end-to-end tests
- client-facing benchmarks, examples, and helper scripts
- custom engine internals (
../engine-custom) - Chromium engine internals (
../engine-chromium) - heavyweight engine dependency trees like V8 or Chromium checkouts
This repo is already split conceptually, but the implementation is still transitional.
clientbuilds against sibling repos at../engine-customand../engine-chromium- the backend API and backend factory live here
- the shell can select a renderer/backend by name
- focused shell/backend seam tests already exist
customis the primary working backend pathchromiumis an active bring-up path, not a finished backend
client/CMakeLists.txtstill compiles a temporary set of custom-engine sources into the shell build- the shell/backend contract exists, but full page-load/render ownership has not been fully migrated behind it yet
- some docs still describe the intended final split more cleanly than the current build graph actually is
If you are contributing during this phase, trust the code/build graph over the idealized architecture diagrams.
By default local development expects these sibling paths:
../engine-custom../engine-chromium
The client CMake config links those repos by sibling path during local workspace development.
Preferred workspace-root entrypoint:
cd ..
./compile.sh --engine custom --js offcd ..
./compile.sh --engine custom --js v8cd ..
./compile.sh --engine chromium --js offLegacy repo-local entrypoint still exists:
./build.sh off
./build.sh on --v8-include /path/to/v8/include --v8-lib /path/to/v8/out.gn/x64.release/objNotes:
- root
compile.shis now the preferred build entrypoint for the split workspace build.shprefers V8 paths from../engine-custom/third_party/v8/...when present- legacy
BROWZ_*V8 env vars are still accepted as transitional aliases
Launch the browser shell:
./startbrowser.shExamples:
./startbrowser.sh --off
./startbrowser.sh --renderer custom https://example.com
./startbrowser.sh --renderer chromium --offRun the default test pass through the build script:
./build.sh offOr run focused tests directly:
ctest --test-dir build/v8-off --output-on-failure \
-R 'application_interaction_test|custom_backend_bridge_test|blink_backend_stub_test'Run the Core Web 80 benchmark:
./build/v8-off/core_web_80_benchmarkRun the Google debug helper:
./scripts/google-debug-session.sh helpBackend selection currently happens through the application/backend factory and can be controlled via CLI/env paths already wired into the client.
Typical backend values:
customchromium
At the moment:
customis the primary working backend pathchromiumis under active bring-up in the siblingengine-chromiumrepo
src/app/— application lifecycle and shell/backend integrationsrc/backend_factory/— backend construction/selectionsrc/browser/— navigation/controller logicsrc/debug/— session/HUD/debug toolingsrc/engine_api/— current engine/backend contract surfacetests/— client/end-to-end testsbenchmarks/— client-facing benchmarksscripts/— browser-owned scriptsdocs/— architecture, roadmap, benchmark, and planning docs
This repo intentionally tracks authored source, docs, scripts, tests, and selected benchmark material.
Use these rules while the rewrite is active:
- keep runtime/debug scratch output under ignored paths like
artifacts/or other local-only locations - keep build system output out of git
- treat benchmark result history as something to commit selectively, not automatically
- if a generated artifact matters for a change, prefer a small curated summary over a pile of raw local output
Currently ignored examples include:
build/artifacts/benchmarks/results/latest- local editor/cache noise
Use these files as the main guide rails:
README.md— quick orientation, build/run/test entry point, and current transition statusTODO.md— active execution prioritiesdocs/architecture.md— current practical architecture truthdocs/architecture-roadmap.md— longer-horizon target architecturerefactor.md— renderer split / migration execution planPRD.md— product framing and original-to-current direction
- Keep client responsibilities client-sized: shell UX, lifecycle, tooling, diagnostics, and backend orchestration.
- Do not let engine-specific internals leak back into
clientunless they are explicitly transitional and documented as such. - Do not add Chromium- or V8-specific dependency ownership here.
- If a dependency belongs primarily to one engine, it should live with that engine repo.
- When docs and code disagree during the transition, update the docs so the repo stays honest.