I was looking into a way to customise the Chromium code in an Electron app. As it turns out, it’s not as difficult as it might sound, though it requires some patience (mainly because building Chromium takes a lot of time, RAM and CPU).
To get started, make sure you have installed depot_tools from Google.
It’s a good idea to provision a git cache as well:
$ export GIT_CACHE_PATH="${HOME}/.git_cache"
$ mkdir -p "${GIT_CACHE_PATH}"
Now, you can fork electron and add your Chromium patches.
It’s important to make sure you deal with whitespace and newlines as well. Electron has a couple of scripts that will generate the patch file for you.
Next, let’s configure the build:
$ mkdir electron && cd electron
$ gclient config --name "src/electron" --unmanaged https://github.com/[your-fork-name]/electron
$ gclient sync --with_branch_heads --with_tags
Once that completes successfully, you can indicate the build config you want to use. In our case, let’s use the release config:
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\") $GN_EXTRA_ARGS"
$ ninja -C out/Release electron
This will take a while to build, depending on your CPU, RAM and disk.
When ninja finally completes, you might want to build a package of Electron:
$ ninja -C out/Release electron:electron_dist_zip
You now have a zip file, which you can use with for example @electron-forge
. Make sure to specify the correct config in your package.json
:
"config": {
"forge": {
"packagerConfig": {
"electronZipDir": "../custom-electron"
}
}
The zip files should be named similar to these:
- electron-v15.1.2-darwin-x64.zip
- electron-v15.1.2-win32-x64.zip
Now you can build your Electron app with the custom Chromium build.