Skip to content

Releases: Shshtwy/bare-browser

Bare 1.0.0-alpha.1 RC2

Choose a tag to compare

@Shshtwy Shshtwy released this 26 Aug 05:52

Bare 1.0.0-alpha.1 RC2

Second release candidate for the first alpha. RC2 adds twenty-eight patches on top of RC1. Most came
from feature requests and bug reports shared by the Reddit and GitHub communities, along with
problems I found through daily use and testing.

Bare is Chromium with the Google parts taken out, maintained as a patch series rather than a fork so
every change stays readable. It is still alpha. Treat it as something to test, not something to
depend on.

What's new in RC2

  • Dark AMOLED theme.
  • Bare checks for its own updates on GitHub — automatic, manual, or manual with a weekly
    reminder. You pick during setup.
  • Roughly 20 MB smaller.
  • Fewer background requests to Google. Account lookups at startup and in the address bar are
    gone, and no push-messaging tokens are registered any more.
  • Google sign-in and sync are now unreachable rather than just hidden, and "Send to your
    devices" is gone.
  • Removed the "Sign in to Chrome" password row from Safety Check.
  • Fixed the welcome screen on Android 12, where it could show up as an empty circle.
  • Fixed the Start button overlapping the footer on shorter screens.
  • Crash fixes in settings search and Safety Check, and the bottom-bar buttons no longer
    misbehave on a long press.

The rest of this page is the detail behind each of those, plus what has not changed.

Highlights

Already using RC1? This section has not changed.

  • Real extensions, including Manifest V2. Chrome Web Store extensions install and run, MV2
    included, with an extensions toolbar on phone layouts and working context-menu items.
  • uBlock Origin is built in. Shipped inside the apk exactly as its author publishes it —
    unmodified, not repackaged, not re-signed, keeping its original extension id and signature.
  • DuckDuckGo by default, with DuckDuckGo (No AI) available and support for adding your own
    search engine.
  • Bottom toolbar. Address bar, tab switcher and an incognito toggle within thumb reach.
  • Send downloads to your own download manager, or keep the built-in one.
  • Background media playback on sites that support it, plus a Video autostart site setting.
  • Save media from a page, including audio and video the page streams rather than links to.
  • Third-party password managers work — Bitwarden, 1Password, Proton Pass and similar, once
    Android autofill is switched on.
  • No telemetry, no AI features, no sign-in prompts.

What's changed in RC2

Privacy

  • Removed an unnecessary background Google account request that Chromium made during startup. On a
    fresh profile this fired about a tenth of a second in, before you had answered the welcome screen.
    Two internal components were asking for the browser's Google cookie state purely to report
    metrics, and reading that state went to the network. It now comes from the local cache.
  • Removed the same account lookup from the address bar, which previously ran while assembling
    suggestions.
  • Stopped Chromium registering push-messaging tokens with Google at startup. Two of these were being
    created on a fresh profile and kept on disk as long-lived identifiers; they are no longer created
    at all.
  • Made Google sign-in and sync unreachable rather than merely hidden, and removed "Send to your
    devices", which only ever led to a Google account prompt.
  • Cut twelve component registrations that reported this install to Google's update service without
    buying anything in return, including the Privacy Sandbox set, the shopping and checkout
    heuristics, and the on-device AI history strings.
  • Turned off the Gemini integration.

Honesty about what Bare does not do

  • Removed the Safe Browsing settings, the Safety Check module and the promotional cards. Safe
    Browsing does not work in Bare. Public Chromium Android builds do not have the handler used for
    these lookups; Google supplies it only in its own builds. The settings claimed protection that was
    not running, so they have been removed. Bare does not show phishing or malware interstitials.
  • Removed the Safety Check row that reported it could not check passwords in your Google Account and
    offered a "Sign in to Chrome" button that went nowhere. The update, permissions and notification
    checks are untouched and still run.

Updates

  • Bare now looks for its own updates on GitHub. You choose during the welcome screen: automatic,
    manual, or manual with a weekly reminder. Automatic mode checks a public release feed at most once
    a day and sends nothing but a user agent — no identifier, no cookies. Manual mode sends nothing
    until you tap Check for updates.
  • Tapping an available update now opens that release's page. Bare never downloads or installs an
    apk for you.
  • The update dot no longer comes back every day once you have looked at it.

Appearance and usability

  • A Dark AMOLED theme.
  • The launch splash no longer flashes white on a dark theme, and switching themes no longer shows
    the activity restarting underneath.
  • The current-page row in the address bar drop-down now reaches the omnibox properly on phones.
  • Night mode is read from the browser's own setting rather than from whatever the system says.
  • The link-cleaning filter list is now named, so you can see what is stripping tracking parameters.

Fixes

  • Fixed the welcome screen on Android 12. It could appear as a bare circle with no text or
    options at all, which is what several Pixel 3 testers saw. It can also no longer commit choices
    you were never shown.
  • Fixed the Start button overlapping the footer on shorter
    screens. The options list scrolls now when it has to.
  • Fixed a crash when opening settings search, and two more in Safety Check, all left over from
    removing the Safe Browsing rows.
  • Long-pressing the incognito, new tab or menu buttons on the bottom bar no longer raises a label
    that repeats the icon, and no longer falls through and opens a tab.

Size

  • The apk is about 20 MB smaller — roughly 296 MB, down from about 316 MB. Android XR, ARCore
    and their rendering runtime were being packaged even though XR was already disabled in this build.
    Removing those libraries does not remove a working feature.

Upgrading from RC1

Install RC2 over RC1. Do not uninstall first.

Your data is kept: tabs, history, bookmarks, extensions and settings all survive, and your existing
search engine and address bar position are preserved.

RC2 will show the welcome screen again, and that is deliberate. It appears once after upgrading
so Bare can ask about update checks. Existing choices are filled in, and pressing Start leaves
anything you did not touch unchanged.

One thing to know if you have been running Bare since before the DuckDuckGo default landed: an
existing profile keeps whichever search engine it already had. Change it in Settings → Search engine
if you want the default.

Known limitations

  • Alpha software. Expect rough edges.
  • arm64 only. No build for armeabi-v7a or x86, so older phones and most emulators cannot install
    it. Android 10 or newer.
  • Passkeys work only through a third-party password manager, and only after you trust Bare once.
    Google's own passkey path is restricted to Google-signed browsers, so passkeys held in Google
    Password Manager are out of reach and no patch here can change that. With Bitwarden, 1Password or
    Proton Pass, the first attempt fails with "browser is not recognized" — choose Trust when
    prompted.
  • Password managers need one setting turned on. Chromium uses its own autofill by default and
    never asks Android's autofill framework. Turn on Settings → Autofill options → use another
    service. Third-party autofill has also been seen to go quiet mid-session until you navigate away
    and back.
  • External downloads lose your sign-in. With an external download manager on, a file that
    requires you to be signed in will fail in the other app.
  • Web Push does not work, as a consequence of removing the Google messaging channel.
  • Extension popups can be cropped, and the address bar gets squeezed when several extensions are
    pinned. Unpinning all but one works around it.
  • Some links no longer hand off to other apps. All http(s) navigations stay in Bare, which means
    a few OAuth flows and deep links that expect an app handoff will not get one.
  • The New Tab Page still has Discover.
  • The first incognito tab of a session is slow to appear.
  • One host is still contacted on its own, deliberately: Chromium's component updater, which carries
    certificate revocation, Certificate Transparency, TLS interstitial quality, download danger
    classification and Widevine. Bare is not completely free of Google and does not claim to be.

Download

Bare-1.0.0-alpha.1-rc2.apk

SHA-256  719d923429247a2f90c49f3fbc8d5d1b602e7cfc1124334460e6a96e6db011a8

Verify before installing:

sha256sum Bare-1.0.0-alpha.1-rc2.apk

Feedback

If something breaks, open an issue at
the issue tracker with your device, Android
version, and what you were doing. Crash reports are especially useful.

Bare 1.0.0-alpha.1

Choose a tag to compare

@Shshtwy Shshtwy released this 20 Aug 21:32

Bare 1.0.0-alpha.1

The first release under the Bare name, and the first signed with Bare's own key.

This is an alpha. It has been built and used daily on one phone, a Pixel 10 Pro XL, and
tested nowhere else. Expect to find things that are broken. The list further down is what is
already known to be broken; please report anything that is not on it.

Read this before installing

If you have Chromium Extend installed, uninstall it first. A Bare release cannot update it,
and Android will refuse the install with INSTALL_FAILED_UPDATE_INCOMPATIBLE. This is deliberate.

Every Chromium Extend release, v1.0 through v1.4, was signed with chromium-debug.keystore,
which is checked into Chromium's source tree and is therefore public. Anyone can build an APK
that installs as an update over one of those. Bare now has a private key of its own, so the
signing identity changed, and Android correctly refuses to treat the two as the same app.

Uninstalling loses that app's data: tabs, history, settings and extension configuration. There
is no migration path, and there could not be one without keeping the compromised key.

Requirements

  • Android 10 or newer (API 29)
  • arm64 device. There is no build for armeabi-v7a or x86, so most emulators will not take it.
  • 302 MB download, and roughly the same again once installed. Chromium is large and this
    build is a single APK rather than a split, because it is distributed here and not through a
    store.

Verify what you downloaded

sha256  4e796a53c7dcc6ce2825fe163a8ba5a9b8e07cb710f88f81293b7db73b833efe
size    316,466,634 bytes

That confirms the file arrived intact. To confirm it is actually Bare, check who signed it:

apksigner verify --print-certs Bare-1.0.0-alpha.1.apk
SHA-256  ae:2a:0e:7f:b7:a1:32:ec:51:7d:26:a8:e7:c8:3d:27
         5e:83:74:7b:0a:77:7d:4a:42:22:5b:1d:34:32:71:a0
subject  CN=Bare Browser, O=Bare Browser, OU=Release

Nothing signed by any other key is Bare. You can also rebuild this release from source and
compare everything except the signature; see the README.

What you get

  • Real browser extensions, the desktop ones, with a toolbar you can pin them to
  • uBlock Origin pre-installed, the full version and
    not Lite, because Bare keeps Manifest V2 working
  • No Google check-ins, no telemetry, no AI features, no sign-in prompts anywhere
  • DuckDuckGo from first launch, with a No AI variant available
  • Save the media a page is playing, including from sites that only stream it
  • Video keeps playing when you lock the phone or switch apps
  • Hand downloads to another app such as 1DM, or keep them in the browser
  • Links stay in the browser instead of being thrown to an app

Sixty-eight patches against Chromium 153.0.7999.0. The full list is in
docs/patches.md.

Known issues

Media saving

  • An adaptive stream downloads as two files, video and audio, because nothing joins them yet.
  • Segmented HLS and DASH offer nothing. A playlist is not a video, and a lone segment is not
    playable, so neither is offered rather than handing over a file that disappoints.
  • On a feed that never reloads the page, the video offered may be one you already scrolled past.
  • DRM-protected media is never offered, and nothing here attempts to decrypt anything.

Elsewhere

  • Protected streaming is unproven. Widevine is detected but paid playback has not been exercised
    end to end, so treat Netflix and similar as untested rather than working.
  • The first incognito tab of a session is slow to appear, showing a blank panel or a fade.
  • Third-party autofill occasionally stops being offered until you navigate away and back.
    Bitwarden has been seen to go quiet mid-session.
  • Passkeys do not work. The API is restricted to Google-signed browsers, so any self-built
    Chromium is refused. Not caused by anything here.
  • Web push is gone, as a consequence of removing the Google Cloud Messaging channel.
  • Extension popups can be cropped, and the address bar gets squeezed when several extensions
    are pinned.

The README carries the full list with the reasons.

Reporting a problem

Bare has no crash reporting. Nothing is sent anywhere, which also means nothing reaches us on
its own. If something breaks, please open an issue with the site, what you did, and what
happened. If the browser closed itself, this captures the reason:

adb logcat -b crash -d > crash.txt

Please read it before attaching it. It can contain URLs and other things from your session.

Credits

uBlock Origin is by Raymond Hill and contributors, licensed under the GPL-3.0. It ships
here exactly as its author publishes it: downloaded from the Chrome Web Store, unmodified, not
repackaged and not re-signed, so it keeps its original extension id and his signature. Bare is
not affiliated with or endorsed by the uBlock Origin project.

Cromite and ungoogled-chromium were used as reference for finding the call sites that
reach Google services, which is the hard part of this work.

Full credits and licences are in the
README.

Chromium Extend v1.4

Chromium Extend v1.4 Pre-release
Pre-release

Choose a tag to compare

@Shshtwy Shshtwy released this 18 Aug 17:51

A 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 thirty-seven patches and five build
flags.

This is the last release in the 1.x line. Version 2.0 is next, with a lot of exciting things
in the works.

New in v1.4

Add your own search engine

  • Create a search engine by hand with a name, a shortcut and a search URL, then set it as your
    default
  • Found under Settings, Search engine, Manage search engines and site search
  • Chromium already contained this screen, finished, but left it switched off on Android
  • The add button sits under Site search; use Make default on the entry to promote it to your
    default search engine

Google AI removed from search

  • The built-in @gemini and @aimode shortcuts are gone. They searched gemini.google.com and
    google.com with the AI Mode parameter, and appeared under site search
  • The AI Mode button in the address bar is off by default
  • Existing profiles drop the two shortcuts on upgrade rather than keeping cached copies

Dark mode no longer flashes white

  • Loading a page on a dark theme used to flash white first. Three separate parts of the browser
    painted white before a page appeared, and all three now follow your theme
  • Measured with screen recordings: peak brightness fell from 214 of 255, held for about
    0.6 seconds, to 44 with no frames bright enough to register
  • A new setting, Apply dark theme to sites, when possible, under Settings, Theme, lets the
    browser darken light pages itself. Off by default

Easier to reach with one hand

  • The search box sits in the middle of the new tab page rather than near the top
  • The tab switcher buttons moved to the bottom, so they are no longer stranded at the top while
    the address bar sits at the bottom
  • A new incognito button in the bottom bar, as a toggle. Tap to go incognito, tap again to come
    back. It turns red while active. It fills the slot left empty when the Ask Gemini button was
    removed

Smaller touches

  • A cleaner new tab page. The shortcuts row and the suggestion cards start hidden. Both were
    already optional; only the starting state changed
  • Share is the default toolbar shortcut. It used to be based on your usage, which quietly
    swapped the button as browsing habits changed
  • The search engine icon is round in the address bar. It rendered as a white square there while
    looking correct on the new tab page
  • Clearer wording in settings. A note reading Only available for small windows sounded like it
    excluded phones, when it means the opposite

Screenshots

Left: the new tab page, with the search box within thumb reach and the incognito toggle in the
bottom bar. Middle and right: the download manager setting and the chooser it produces, both
carried over from v1.3.

Verifying this release

SHA-256  e70364b58f215c3a390fe92622d844112462ea21a604da15e77ec40f3e082105

To confirm the binary matches the source rather than trusting it:

  1. Check out Chromium at base commit 945b5115
  2. Apply the series with git am patches/*.patch
  3. Use the args.gn documented in the README
  4. Run gn gen out/<name> && autoninja -C out/<name> -j 12 chrome_public_apk
  5. Compare sha256sum out/<name>/apks/ChromePublic.apk against 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 with apt-get and so drifts over time, though Chromium ships a hermetic toolchain
    through DEPS, 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, and you can now add any search engine you like and make it the
    default.
  • 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, it cannot be added back from Settings, and the
    built-in @gemini and @aimode search shortcuts are removed.
  • 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.
  • Dark mode that stays dark, with no white flash between pages.
  • 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.4-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.3.

Upgrading from an earlier version keeps your current 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.

Some new defaults apply to new profiles only. The toolbar shortcut and the new tab page
layout are read once per profile, so an existing install keeps what it already had. Everything
under New in v1.4 can still be set by hand.

Known limitations

  • External downloads lose your sign-in. With the external download manager 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.
  • Passkeys do not work. FIDO2_PRIVILEGED_API is 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.
  • A custom search engine has no logo on the new tab page. Engines added by hand carry no logo
    image, so the new tab page shows none. Cosmetic only.
  • 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.

Chromium Extend v1.3

Chromium Extend v1.3 Pre-release
Pre-release

Choose a tag to compare

@Shshtwy Shshtwy released this 17 Aug 16:54

A 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:

  1. Check out Chromium at base commit 945b5115
  2. Apply the series with git am patches/*.patch
  3. Use the args.gn documented in the README
  4. Run gn gen out/<name> && autoninja -C out/<name> -j 12 chrome_public_apk
  5. Compare sha256sum out/<name>/apks/ChromePublic.apk against 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 with apt-get and so drifts over time, though Chromium ships a hermetic toolchain
    through DEPS, 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_API is 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.

Chromium Extend v1.2

Chromium Extend v1.2 Pre-release
Pre-release

Choose a tag to compare

@Shshtwy Shshtwy released this 16 Aug 08:44

A 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-one patches and five build
flags.

New in v1.2

This is the release where the Google surfaces actually go away. v1.1 still opened on a Google
search box, still asked you to sign in on first run, and still carried a Gemini button.

🦆 DuckDuckGo is the default search engine. Not something you change afterwards — it is what
a new profile ships with, and the new tab page follows it, so the Google logo is gone too.

🚫 No first-run screen. The browser opens straight to a new tab. The old screen promoted a
sign-in this build cannot do, and told you that usage and crash data are sent to Google, which
was never true here.

🧹 The New Tab Page is clean. The sign-in card, the "Chrome tips" carousel and the "Restore
your web apps" sheet are all gone. The tips carousel is removed entirely rather than card by
card, since its rotation also carried history sync, saved passwords and password checkup promos.

✨ No Gemini button. The sparkle in the bottom bar opened a sheet demanding Google account
verification. It is gone, and it can no longer be added back from Settings either.

👤 No avatar sign-in button. The profile circle on every new tab page did nothing but offer
to sign in.

🎬 Fullscreen video controls sit on the video. The scrubber used to be pinned to the bottom
of the screen, well below a letterboxed video. It now tracks the picture.

Screenshots

Two of these predate v1.2 and still show the older new tab page and settings.

Extension icons in the toolbar. Pinned extensions sit beside the address bar. The extensions menu on a phone. Per-site permissions and Pin to toolbar — upstream only offers this at tablet widths.
An extension's own window. Dark Reader running from the toolbar, exactly as on a desktop. Settings opens straight to Basics. No sign-in row, no Google services page.

What you get

🧩 Real browser extensions on your phone. Password managers, ad blockers, dark mode — the
same extensions you'd use on a desktop. Tap an extension's icon and its window opens properly,
and you can pin the ones you use most to the toolbar. Upstream only exposes this on tablet-width
layouts; here it works at phone widths too.

🔗 Links open in the browser, not in apps. Tapping a Reddit or YouTube result keeps you in
the browser instead of throwing you into their app mid-read. Phone numbers and email links still
open the right app.

📵 De-Googled. No background check-ins, and nothing about the forms you fill in gets sent off
for analysis. Google's built-in AI features are removed entirely, not just switched off.

🧹 No dead Google UI. No sign-in prompts, no Google services page, no password manager row
that only says it stopped working, no first-run screen, no promo cards.

🎬 Video still works, and fullscreen behaves. Ordinary video plays, and so does paid
streaming. Fullscreen respects your rotation lock instead of forcing landscape, fills the screen
rather than sitting off-centre beside the camera cutout, and keeps its controls on the video.

🛡️ Still safe to browse. Protections against fake certificates and downgraded connections are
deliberately kept. Privacy here doesn't come at the cost of security.

Install

Requires an arm64 Android device (Android 10 / SDK 29 or newer).

adb install -r ChromiumExtend-v1.2-153.0.7999.0-arm64.apk

Or copy the APK to the device and open it. You'll need to allow installing from unknown sources.

This APK is 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). It upgrades cleanly over
v1.0 and v1.1.

If you are upgrading, the DuckDuckGo default will not apply to you. Chromium persists the
chosen search engine per profile and prefers it over the shipped default, so an existing profile
keeps Google until you change it in Settings → Search engine. A fresh install gets DuckDuckGo.

What's removed

Twenty-one patches: two crash fixes, the phone-layout extensions toolbar, three fullscreen video
fixes, and fifteen de-Googling changes covering the variations seed fetch, network-time queries,
Autofill form-structure uploads, the Google Cloud Messaging push channel, the omnibox guards that
unblock removing the Google XR SDKs, two settings cleanups, the search engine default, the
first-run screen, three New Tab Page promo surfaces, the Gemini button, the avatar sign-in
button, and the Gemini toolbar shortcut option.

Five build flags remove ML Kit and AICore (the on-device Gemini Nano bridge), the
Gemini-in-Chrome surface, the Reporting API, local service discovery and mDNS.

Sign-in has no single gate in Chromium. Five separate patches remove five separate entry points,
and the honest expectation is that more exist rather than fewer.

Worth knowing: a public Chromium build already sends no usage metrics, no URL-keyed metrics and
no crash reports, because upstream withholds those endpoints from forks. Translate is likewise
inert without a Google API key. Those needed no patching.

Known limitations

  • The DuckDuckGo default only applies to new profiles. See the install note above.
  • Passkeys (WebAuthn) do not work. FIDO2_PRIVILEGED_API is 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 GCM channel.
  • Extension popups can be cropped. Extensions size their popup to content and may request a
    width wider than a phone screen.
  • The omnibox is squeezed when several extensions are pinned. Unpinning all but one works
    around it.
  • The New Tab Page still has an AI Mode button and Discover. The logo and the promo cards
    are gone; these two remain.
  • Widevine is detected, but protected playback has not been exercised end to end.

Verified

Tested on a Pixel 10 Pro XL (arm64, Android 17). The search engine default, the first-run screen
and the New Tab Page changes were each verified on a wiped profile, which is the only honest
test for them: Chromium persists these decisions, and an existing profile masks the change and
makes a working fix look broken. Fullscreen video was checked in both orientations and against
element geometry read off the running page. No crashes across a full session.

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.

Chromium Extend v1.1

Chromium Extend v1.1 Pre-release
Pre-release

Choose a tag to compare

@Shshtwy Shshtwy released this 16 Aug 04:49

A 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 twelve patches and five build flags.

New in v1.1

Two fixes to fullscreen video, both confirmed on device.

Fullscreen no longer forces landscape. Video sites call
screen.orientation.lock("landscape") when you tap fullscreen, which reaches
Activity.setRequestedOrientation() and overrides your system rotation lock outright — the phone
rotated even with rotation explicitly locked, and there was no way to refuse. That request is now
ignored, so fullscreen video follows the phone like every other app.

Fullscreen video is centred. A page that doesn't declare a viewport-fit — the default, which
video sites rarely override — was letterboxed away from the camera cutout. That left a dead strip
at the cutout edge and the video centred in what remained: pushed down in portrait, and sideways
in landscape, since it's the same physical edge. Fullscreen now draws into the cutout, as native
video players do. A page that explicitly asks to avoid the cutout still gets to.

Everything else is unchanged from v1.0. Patches 0001–0010 are identical.

Screenshots

Extension icons in the toolbar. Pinned extensions sit beside the address bar. The extensions menu on a phone. Per-site permissions and Pin to toolbar — upstream only offers this at tablet widths.
An extension's own window. Dark Reader running from the toolbar, exactly as on a desktop. Settings opens straight to Basics. No sign-in row, no Google services page.

What you get

🧩 Real browser extensions on your phone. Password managers, ad blockers, dark mode — the
same extensions you'd use on a desktop. Tap an extension's icon and its window opens properly,
and you can pin the ones you use most to the toolbar. Upstream only exposes this on tablet-width
layouts; here it works at phone widths too.

🔗 Links open in the browser, not in apps. Tapping a Reddit or YouTube result keeps you in
the browser instead of throwing you into their app mid-read. Phone numbers and email links still
open the right app.

📵 De-Googled. No background check-ins, and nothing about the forms you fill in gets sent off
for analysis. Google's built-in AI features are removed entirely, not just switched off.

🧹 No dead Google UI. Settings opens straight to what you can actually change — no sign-in
prompts, no Google services page, no password manager row that only says it stopped working.

🎬 Video still works, and fullscreen behaves. Ordinary video plays, and so does paid
streaming — usually the first thing to break in a privacy-focused browser. Fullscreen respects
your rotation lock and fills the screen properly.

🛡️ Still safe to browse. Protections against fake certificates and downgraded connections are
deliberately kept. Privacy here doesn't come at the cost of security.

🐛 Two crashes fixed. The stock build crashes when you open an extension's window, and again
if you tap sign-in.

Install

Requires an arm64 Android device (Android 10 / SDK 29 or newer).

adb install -r ChromiumExtend-v1.1-153.0.7999.0-arm64.apk

Or copy the APK to the device and open it. You'll need to allow installing from unknown sources.

This APK is 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). It will upgrade cleanly
over v1.0.

What's removed

Twelve patches: two crash fixes, the phone-layout extensions toolbar, seven de-Googling changes
covering the variations seed fetch, network-time queries, Autofill form-structure uploads, the
Google Cloud Messaging push channel, the omnibox guards that unblock removing the Google XR SDKs,
and two settings cleanups — plus the two fullscreen video fixes above.

Five build flags remove ML Kit and AICore (the on-device Gemini Nano bridge), the
Gemini-in-Chrome surface, the Reporting API, local service discovery and mDNS.

Worth knowing: a public Chromium build already sends no usage metrics, no URL-keyed metrics and
no crash reports, because upstream withholds those endpoints from forks. Translate is likewise
inert without a Google API key. Those needed no patching.

Known limitations

  • Search engine still defaults to Google. Changeable in Settings → Search engine. The
    shipped default is not yet patched.
  • Passkeys (WebAuthn) do not work. FIDO2_PRIVILEGED_API is 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 GCM channel.
  • Extension popups can be cropped. Extensions size their popup to content and may request a
    width wider than a phone screen.
  • The omnibox is squeezed when several extensions are pinned. Unpinning all but one works
    around it.
  • The New Tab Page and first-run screen still carry Google branding. The first-run screen
    also claims usage and crash data are sent to Google, which is untrue in this build.
  • Widevine is detected, but protected playback has not been exercised end to end.

Verified

Tested on a Pixel 10 Pro XL (arm64, Android 17): no crashes across a full session, extensions
install and run with working popups and pinning, both original crash reproductions are gone, and
the shipped manifest contains zero ML Kit or AICore references. Fullscreen video was checked in
both portrait and landscape, with the system rotation lock both on and off.

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.

Chromium Extend v1.0

Chromium Extend v1.0 Pre-release
Pre-release

Choose a tag to compare

@Shshtwy Shshtwy released this 16 Aug 02:22

A 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 ten patches and five build flags.

Screenshots

Extension icons in the toolbar. Pinned extensions sit beside the address bar. The extensions menu on a phone. Per-site permissions and Pin to toolbar — upstream only offers this at tablet widths.
An extension's own window. Dark Reader running from the toolbar, exactly as on a desktop. Settings opens straight to Basics. No sign-in row, no Google services page.

What you get

🧩 Real browser extensions on your phone. Password managers, ad blockers, dark mode — the
same extensions you'd use on a desktop. Tap an extension's icon and its window opens properly,
and you can pin the ones you use most to the toolbar. Upstream only exposes this on tablet-width
layouts; here it works at phone widths too.

🔗 Links open in the browser, not in apps. Tapping a Reddit or YouTube result keeps you in
the browser instead of throwing you into their app mid-read. Phone numbers and email links still
open the right app.

📵 De-Googled. No background check-ins, and nothing about the forms you fill in gets sent off
for analysis. Google's built-in AI features are removed entirely, not just switched off.

🧹 No dead Google UI. Settings opens straight to what you can actually change — no sign-in
prompts, no Google services page, no password manager row that only says it stopped working.

🎬 Video still works. Ordinary video plays, and so does paid streaming — usually the first
thing to break in a privacy-focused browser.

🛡️ Still safe to browse. Protections against fake certificates and downgraded connections are
deliberately kept. Privacy here doesn't come at the cost of security.

🐛 Two crashes fixed. The stock build crashes when you open an extension's window, and again
if you tap sign-in.

Install

Requires an arm64 Android device (Android 10 / SDK 29 or newer).

adb install -r ChromiumExtend-v1.0-153.0.7999.0-arm64.apk

Or copy the APK to the device and open it. You'll need to allow installing from unknown sources.

This APK is 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).

What's removed

Ten patches: two crash fixes, the phone-layout extensions toolbar, and seven de-Googling
changes covering the variations seed fetch, network-time queries, Autofill form-structure
uploads, the Google Cloud Messaging push channel, the omnibox guards that unblock removing the
Google XR SDKs, and two settings cleanups.

Five build flags remove ML Kit and AICore (the on-device Gemini Nano bridge), the
Gemini-in-Chrome surface, the Reporting API, local service discovery and mDNS.

Worth knowing: a public Chromium build already sends no usage metrics, no URL-keyed metrics and
no crash reports, because upstream withholds those endpoints from forks. Translate is likewise
inert without a Google API key. Those needed no patching.

Known limitations

  • Search engine still defaults to Google. Changeable in Settings → Search engine. The
    shipped default is not yet patched.
  • Passkeys (WebAuthn) do not work. FIDO2_PRIVILEGED_API is 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 GCM channel.
  • Extension popups can be cropped. Extensions size their popup to content and may request a
    width wider than a phone screen.
  • The omnibox is squeezed when several extensions are pinned. Unpinning all but one works
    around it.
  • The New Tab Page and first-run screen still carry Google branding. The first-run screen
    also claims usage and crash data are sent to Google, which is untrue in this build.
  • Widevine is detected, but protected playback has not been exercised end to end.

Verified

Tested on a Pixel 10 Pro XL (arm64, Android 17) and an emulator of the same spec: no crashes
across a full session, extensions install and run with working popups and pinning, both original
crash reproductions are gone, and the shipped manifest contains zero ML Kit or AICore references.

License

The patches modify Chromium source and are subject to Chromium's BSD-3-Clause license.
Chromium is a trademark of Google LLC. This project is unaffiliated.