Redrob Browser is an AI-native browser built as a patch-based fork of Chromium. This branch starts from nothing on purpose: the previous base was a Zen/Firefox fork, and Korean banking and public-sector sites depend on Chrome extensions and native messaging rather than on rendering, which is a dependency only a real Chromium browser satisfies.
CHROMIUM_VERSION the release we build, and the only place it is written down
patches/ surgical edits to files that stay Chromium's, one patch per file
branding/ files we replace wholesale: the BRANDING file and every icon
sources/ code we own outright, mirrored at its destination path
build/args/ gn args per build flavour
scripts/redrob.py the whole fork workflow: bootstrap, sync, brand, apply, build, run, export, derive
agent/ the agent extension, side panel, onboarding, agent server (bun + Rust)
vendor/browseros/ the upstream BrowserOS patch set and build system this fork imports
The Chromium checkout is fetched, never committed. That is the lesson from the last fork: a tree with
258 patches buried in it could not answer "what do we own" without counting files. Here ls patches/
plus branding/manifest is the answer, and each file has exactly one owner -- a change that lives in
both is what made the first clean reproduce fail with git apply: does not match index.
./scripts/redrob.py bootstrap # depot_tools into ./depot_tools (once)
./scripts/redrob.py sync # fetch Chromium at CHROMIUM_VERSION, run its hooks
./scripts/redrob.py apply # our own sources, then patches/
./scripts/redrob.py brand # overlay branding/: BRANDING and the icons
./scripts/redrob.py build # gn gen + autoninja, dev flavour
./scripts/redrob.py run # launch it with a scratch profileExpect tens of gigabytes and hours, not minutes. docs/BUILD.md has the real numbers and the host
constraints.
Edit the checkout in chromium/src like a normal tree, then:
./scripts/redrob.py exportpatches/ is rewritten from what you actually changed. Patches are never hand-maintained, and a new
file you added is reported rather than patched in -- files that are ours belong in this repository as
files, not as a diff against Chromium.
# edit CHROMIUM_VERSION, then
./scripts/redrob.py sync
./scripts/redrob.py apply # conflicts here name the files to look at
./scripts/redrob.py derive # re-generate the branding edits against the new tree
./scripts/redrob.py export # store them as patches againderive exists so that a 768-substitution strings patch is never conflict-resolved by hand: it is
generated from the new tree instead, and it fails loudly if upstream moved the file rather than
producing a stale patch. brand is not part of this -- overlay files do not conflict, they just land.
docs/ARCHITECTURE.md is the map of this repository: what you own and what is merely fetched, which of the
four owners a file belongs to, how one feature travels from the page to the engine and back, which patches
register our code into Chromium's build, and where to make a given change. Read it before reading code.
docs/UI.md maps the designed interface onto the three layers this fork has -- a WebUI page, the C++
browser UI, and a local sidecar process -- and says which of them each piece belongs in. The short
version: the AI surfaces are web technology and should stay that way; only the tab strip and the agent
tab plumbing need C++.
docs/DESIGN-SYSTEM.md says where the browser's colours come from. Every other Redrob product imports
@redrob-labs/ui; this one cannot -- C++ has no var() and build_webui has no resolver -- so the values
are vendored into the tree from a pinned release and two checks keep the copy honest. Read it before
changing a colour, because a hex typed into the chrome is a hex that disagrees with the website.
AGPL-3.0-or-later as a whole (LICENSE), because the browser carries work derived from BrowserOS. NOTICE
lists the provenance and the parts under other licences: ungoogled-chromium patches (BSD 3-Clause), two
agent packages (MIT) and the bundled fonts (SIL OFL 1.1).