Chromium Extend v1.3
Pre-releaseA de-Googled build of Chromium Desktop Android that keeps browser extensions and video
playback working.
Built from Chromium 153.0.7999.0 (commit 945b5115) with twenty-three patches and five build
flags.
New in v1.3
Downloads can be handed to a download manager app
- A new setting under Settings, Downloads: Use an external download manager
- When enabled, a download opens a chooser offering any installed download manager, such as 1DM
- Off by default, so the browser downloads files itself exactly as before until you turn it on
- Chromium is filtered out of the chooser, so it cannot be offered as a destination for its own
download - If no download manager is installed, the browser downloads the file normally rather than
failing
The build is now verifiably reproducible
- Building the same source twice produces a byte-identical APK
- Verified three ways: a clean six-hour build from nothing, an incremental build carrying a full
day of history, and the APK already installed on the development device - The output directories had different names, which is the case most likely to leak a build path
into a binary - This release publishes a SHA-256 that was confirmed against a clean rebuild, rather than a hash
generated alongside the upload
Nothing else changed. Patches 0001 through 0021 are identical to v1.2.
Screenshots
Left: the new setting, with its limitation stated in the summary. Right: the chooser it
produces, downloading this release's own APK.
Verifying this release
SHA-256 195776690f93e2e4cf38894adc07ec136810d39db9197c44b7da0884fb492d48
To confirm the binary matches the source rather than trusting it:
- Check out Chromium at base commit
945b5115 - Apply the series with
git am patches/*.patch - Use the
args.gndocumented in the README - Run
gn gen out/<name> && autoninja -C out/<name> -j 12 chrome_public_apk - Compare
sha256sum out/<name>/apks/ChromePublic.apkagainst the hash above
Two things this does not yet prove, stated plainly:
- Reproducibility has been confirmed within one container image. A rebuild on different hardware,
or in a container built at a different time, has not been tested. The Dockerfile installs
packages withapt-getand so drifts over time, though Chromium ships a hermetic toolchain
throughDEPS, which should make the host package set irrelevant. - If your rebuild produces a different hash, please open an issue. That is the missing
measurement, and a report would be genuinely useful.
What you get
- Real browser extensions. Password managers, ad blockers, dark mode, the same extensions you
would use on a desktop. Upstream exposes this only at tablet widths; here it works on a phone. - DuckDuckGo by default. The shipped default on a new profile, and the new tab page follows
it. - No sign-in surfaces. No settings row, no Google services page, no first-run screen, no new
tab page promo cards, no avatar button. - No Gemini. The bottom bar button is gone, and it cannot be added back from Settings.
- Links open in the browser, not handed off to whichever app claims the domain.
- Video that behaves. Ordinary and paid streaming both play. Fullscreen respects your
rotation lock, fills the screen properly, and keeps its controls on the video. - Security kept deliberately. Protections against fake certificates and downgraded
connections remain.
Install
Requires an arm64 Android device, Android 10 (SDK 29) or newer.
adb install -r ChromiumExtend-v1.3-153.0.7999.0-arm64.apk
Or copy the APK to the device and open it, allowing installation from unknown sources.
Signed with a local debug key, so it will not upgrade over a Play Store Chrome or Chromium
install. It installs as its own app, org.chromium.chrome, and upgrades cleanly over v1.0
through v1.2.
Upgrading from an earlier version keeps Google as the search engine. Chromium stores the
chosen engine per profile and prefers it over the shipped default, so only a fresh install gets
DuckDuckGo. Change it under Settings, Search engine.
Known limitations
- External downloads lose your sign-in. With the new setting on, a file requiring you to be
signed in will fail in the other app. The interception point carries no cookie, and passing
credentials needs a different layer. - The DuckDuckGo default applies to new profiles only. See the install note above.
- Passkeys do not work.
FIDO2_PRIVILEGED_APIis restricted to Google-signed browsers, so
any self-built Chromium is refused. Inherent to self-building, not caused by these patches. - Web Push is gone, as a consequence of removing the Google Cloud Messaging channel.
- Manifest V2 extensions are not supported. Upstream removed both the manifest support and
the renderer bindings the extensions rely on. Re-enabling only the manifest check causes
renderer crashes, so it was tried and reverted. Use uBlock Origin Lite rather than uBlock
Origin. - Extension popups can be cropped, since extensions size their popup to content and may
request more width than a phone has. - The omnibox is squeezed when several extensions are pinned.
- The New Tab Page still has an AI Mode button and Discover.
- Widevine is detected, but protected playback has not been exercised end to end.
License
BSD-3-Clause. The patches modify Chromium source and are subject to Chromium's license.
Chromium is a trademark of Google LLC. This project is unaffiliated.

