Stealth Chromium Development from Scratch Part 2: Cloning the Source

In this series, I demystify Chromium development by explaining everything step by step.

person Camille Louédoc-Eyries
|
calendar_today February 6, 2026
|
schedule 5 min read

In this blog series, I will explain how to develop your own Chromium fork with fingerprint mimicry.

Our goal is to be able to edit basic fingerprints, like the user-agent, the CPU core counts, but also more complicated entropy sources such as canvas fingerprinting.


In the previous installment of this series, we talked about how to choose the right hardware for Chromium development.

Here, we will talk about how to clone the codebase!

Cloning the Chromium codebase

Installing depot_tools

Before we actually start to download Chromium, we need to install depot_tools, a set of scripts to interact with and build the Chromium codebase.

Chromium uses a package of scripts, the depot_tools, to manage interaction with the Chromium source code repository and the Chromium development process.

Chromium Docs

Here is how it’s done:

Terminal window
# Clone depot_tools
rm -rf src/depot_tools || true
git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git src/depot_tools
# Add to PATH (choose your shell)
# For bash:
echo "export PATH=\$PATH:$PWD/src/depot_tools" >> ~/.bashrc
source ~/.bashrc
# For zsh:
echo "export PATH=\$PATH:$PWD/src/depot_tools" >> ~/.zshrc
source ~/.zshrc
# For fish:
fish_add_path $PWD/src/depot_tools
echo "fish_add_path $PWD/src/depot_tools" >> ~/.config/fish/config.fish
# Initialize depot_tools
ensure_bootstrap

Once depot_tools are cloned, initialized and bootstrapped, we can move on to actually downloading Chromium’s source repository.

Fetching Chromium’s source code

The following snippet downloads the Chromium source code.

It takes a long time (hours), so it’s advised to run it overnight.

Terminal window
mkdir -p src/chromium
cd src/chromium
fetch --nohooks chromium

There is also the option of running fetch --nohooks --nohistory which will not download the full git history. I can’t quite remember why, but I didn’t get much success with that, so I decided to keep the full history this time, and it’s been going great. Unless you’re in a rush, I’d suggest keeping the full history.

Note: If the download gets interrupted, just run fetch --nohooks chromium again from the src/chromium directory.

Running gclient hooks

This downloads build dependencies like clang, binaries, and other tools needed for building.

Terminal window
cd src/chromium
gclient runhooks

Checking out the right version of Chromium

You usually won’t want to work on the bleeding edge, because you’ll need a version of Chromium that’s widely used to bypass antibots.

That’s why we are going to check out an older version of Chromium.

First, we need to know what version: open your existing legit Chrome browser, and navigate to chrome://version.

Copy and paste the version you have.

Then, we’re going to check it out:

Terminal window
cd src/chromium/src
# Make sure everything is downloaded
gclient sync --with_branch_heads --with_tags
# Fetch latest tags from remote
git fetch --tags
# Create a branch with your target tag
git checkout -B my_local_143.0.7499.170 143.0.7499.170
# Download dependencies with the right versions
# (each Chromium revision uses e.g. a different version of v8,
# which is another project entirely)
gclient sync --with_branch_heads --with_tags

(you can see more details about these instructions in this blog post)

Bonus advice: using Snapper

You are likely to totally mess up your Chromium tree at some point, and will need to download everything again.

Don’t ask me how, but in an earlier iteration of this series, I downloaded the Chromium source three times before getting a dev environment that I liked!

One tip that saved me from downloading it a fourth time was to use Snapper.

Snapper is a tool for Linux file system snapshot management. Apart from the obvious creation and deletion of snapshots it can compare snapshots and revert differences between them. In simple terms, this allows root and non-root users to view older versions of files and revert changes.

Snapper’s README.md

It’s like what Time Machine should’ve been.

Once configured, it will take periodic snapshots of your home directory.

E.g. archinstall configured my instance of snapper to take a snapshot every hour:

cami@onigiri ~/c/bitboom.tech (main)> sudo snapper -c home list
# │ Type │ Pre # │ Date │ User │ Cleanup │ Descriptio
────┼────────┼───────┼─────────────────────────────────┼──────┼──────────┼───────────
0 │ single │ │ │ root │ │ current
1 │ single │ │ Fri 30 Jan 2026 07:00:10 PM +07 │ root │ timeline │ timeline
11 │ single │ │ Mon 02 Feb 2026 02:00:02 PM +07 │ root │ timeline │ timeline
158 │ single │ │ Wed 11 Feb 2026 05:39:09 AM +07 │ root │ timeline │ timeline │
... snip ...
323 │ single │ │ Fri 20 Feb 2026 12:00:00 AM +07 │ root │ timeline │ timeline │
324 │ single │ │ Fri 20 Feb 2026 01:00:01 AM +07 │ root │ timeline │ timeline │
325 │ single │ │ Fri 20 Feb 2026 02:00:01 AM +07 │ root │ timeline │ timeline │

(it also has some retention policies so that I can go back far away in time, without having super fine granularity though)

If I want to access what /home/cami looked like one hour ago, I can look into the list above for a corresponding snapshot… in our case, it’s snapshot ID 324!

I can then navigate to my /home/cami like it was one hour ago:

cami@onigiri ~/c/bitboom.tech (main)> sudo su
root@onigiri /h/c/c/bitboom.tech (main)# ls /home/.snapshots/324/snapshot/cami/code/rafale/
args.gn Containerfile init.sh plans/ src/
ccache.conf Containerfile.build justfile podman-compose.yaml tmp/
chromium.md docs/ justfile.old README.md
CLAUDE.md ENVIRONMENT_MODIFICATIONS.md patches/ SETUP_STATUS.md

Well, as you can see, my Chromium development repo was still messy one hour ago.

Snapper is a bit painful to set up (unless you have archinstall doing it for you), but it’s definitely super nice to have when you accidentally delete a file.

It’s even possible to create a handy shell alias to create a snapshot right before doing something risky:

Terminal window
alias snap="sudo snapper -c home create"

Who even needs git in 2026, when we got Snapper?

What’s next?

Once you’re ready, you can move on to part 3: configuring and compiling Chromium.

mail

Stay in the loop

Get notified when we publish new research. No spam, just posts like this.

rss_feed … or follow our RSS feed

Need help with data extraction?

We apply this level of rigor to every data extraction challenge. Let's discuss your project.

Get in touch