This is not a sponsored post of any kind. I just wanted to share how and why I browse the web on my Android phone. You won’t need to be rooted or using a custom ROM to follow along; any Android user should be able to use this setup. (Sorry iOS users, but you’ll have to stick with what you’ve got.)

The Android browser landscape

From StatCounter data, it is clear that Google Chrome holds an iron grip on the Android browser market. Putting aside its greatest competitor in the mobile market overall, Safari, which only runs on iOS, it has virtually no competition, with the next runner-up being Samsung’s browser (itself based on the same engine). This is a shame, because the experience of running Google Chrome on Android can be a highly frustrating one. It includes no support for extensions or adblocking of any kind. As of the last time I used the mobile web regularly without an adblocker (which, I’ll admit, is more than half a decade ago), there were plenty of modal popup windows, autoplaying videos, intrusive ads and other general annoyances.

Samsung Internet actually does include support for some adblockers, which is a relief — at least a non-negligible chunk of Android users might be practicing web hygiene in its most basic form. In the open-source world, there are two major Chromium forks supporting adblocking in some shape or form. Bromite supports a simple adblock list format; while it’s popular among Android nerds, I find its lack of a full-featured blocker pretty limiting. Kiwi, meanwhile, has support for Chrome extensions, but I had issues with reliability and extension compatibility when I was testing it out. (The installation process for extensions isn’t great either, and some have pointed out troubling privacy issues with the browser.)

Enter Mozilla (and friends)

Firefox has a leg up on most of its competition. I have been using it (or a variant) as my daily driver ever since I first switched to Android. Before a major revamp last year, the browser’s interface had gotten a bit long in the tooth, but it was always worth using to me because of its ability to run Firefox Add-ons. (With the current release, the browser is much smoother and more native-feeling; still, some may prefer the aesthetic of Chromium browsers, even though Mozilla’s is pretty subdued now.) With Firefox’s 2020 “Fenix” update, the ability to install arbitrary add-ons was removed from the program (although work is ostensibly being done to add it back). In the meantime, Mozilla has enabled only a handful of extensions for user installation.

Despite this, it’s worth nothing that there are multiple builds which allow for the installation of any add-on on AMO. (While the inability to sideload XPIs is frustrating, AMO does happen to contain all the extensions I want to use, and is more liberal than Google’s repository in including those which actually protect your privacy and security, so it’s not the worst deal in the world.) The four versions of note are:

  • Firefox Nightly. The only official Mozilla build to have support for all AMO extensions. I wouldn't recommend using this as your daily driver, both because it is unstable (I used to use it as a daily driver, and occasionally a build would be a dud; this is a problem on a platform where downgrading the app requires abandoning your user data unless you're rooted) and because it's frankly a bit annoying to update an app every day.
  • Fennec F-Droid. The F-Droid fork of Firefox, built from each new stable version. Removes proprietary bits (Google Cloud Messaging for push notifications when the app is fully closed, Widevine DRM support), as well as enabling about:config and custom extension collection support. A very good rebuild of the stable version of Firefox, although updates will lag by a few days.
  • Mull. Also on F-Droid, Mull is Fennec F-Droid, plus some security-conscious defaults (all of which are changeable in about:config). Mull is built alongside Fennec F-Droid, but is also available from the DivestOS upstream F-Droid repository. Details on how to enable this repository follow below.
  • Howveer, using Mull's defaults can break many sites, so Fennec is a better choice for most users.
  • Iceraven. I don't seriously recommend using this fork, although it has its fans. It adds some extra features to the basic Firefox build, but its maintainers update it manually and I'm not sold on the minor additions. Still, it's worth mentioning here.

I am using Fennec because it allows for extensibity while still not breaking functionality. If avoiding fingerprinting is your concern, check out Mull instead. You can make the choice that’s right for you, and most of the rest of these instructions will apply no matter which you pick.

If you choose Mull: Getting Mull from upstream

In order to download the latest version of Mull, you’ll want an F-Droid client. (I recommend having one anyway; F-Droid and IzzyOnDroid provide a great array of no-nonsense free and open-source apps of mostly high quality.) You can use the official client (note: this is a direct link to F-Droid’s server), or you can check out the client I use, Foxy Droid (you can download the APK directly from this page, or from this direct link as of writing, and Foxy Droid will update itself in the future alongside any other F-Droid apps you might install).

Next, you’ll want to enable the DivestOS Official repo (DivestOS is the group that packages Mull). This contains the latest version of Mull at any given time. While you can install from the default F-Droid repository, this release will lag behind upstream. To add the repository, go to the repositories screen (in Foxy Droid, this is … MenuRepositories), press to add, and input https://divestos.org/fdroid/official/ (or scan this QR). Make sure you refresh and then install Mull. Now you’re off to the races!

Setting up and tricking out your browser

Whatever browser you install still doesn’t come with any add-ons installed; you’ll need to choose some. By default, you’ll be looking at Mozilla’s recommended add-ons collection (which is the only collection accessible in the Play Store build of stable Firefox). uBlock Origin is the most essential; you should consider others based on your own browsing habits. You’ll be able to install any add-on from AMO (Mozilla’s repository). While not all of them work fully on Android, the vast majority do, with the exceptions relating mostly to add-ons’ interaction with elements specific to the desktop Firefox’s user interface.

In order to enable add-ons from outside Mozilla’s list, you’ll need to set a custom add-ons collection, which will then change which add-ons appear in the installation list. A custom collection can be made on addons.mozilla.org, but note that this will require account registration. But note the following tips. One, if you remove an add-on from your collection on AMO that your browser will disable it the next time it refreshes the list. Two, you do not need to use your Mozilla account for sync or anything besides making a collection. Three, if you want to modify a collection from your phone, navigate to the collection’s page, toggle into desktop mode from the … menu and then press the link to switch to the desktop site which should appear at the top of the screen.

To enable a custom collection:

  1. Open your browser and go to the ... menu and choose Settings.
  2. Scroll down to open About Fennec or About Mull (or the equivalent).
  3. Tap the "Fennec" or "Mull" wordmark/logo (or, as appropriate, the logo for the version you're using) a number of times, until an indication that the debug menu is enabled pops up.
  4. Go back to the main Settings screen. You'll now see an option to set a custom collection.
  5. You'll need to select a collection owner and name. A collection has a URL like this: https://addons.mozilla.org/en-US/firefox/collections/13832789/Add-ons/. The owner's ID is the number towards the end (13832789) and the collection name is the last part ("Add-ons"). Note that if you don't want to create a Mozilla ID or a collection, you can use mine, whose URL I just posted here; I use many, although not all, of the extensions in this collection.

Once you’ve enabled all the extensions you need, and set up sync if you so choose, everything’s done and you’re all set up! (If you want some inspiration, or just don’t want AMO, you can check out my custom collection.)

Drawbacks and limitations

Since the world runs on Chrome/Chromium, you may find that in some circumstances you need to fall back on a Chromium-based browser on Android. Thankfully, I can say that I have found these circumstances to be quite rare. The only case where there turned out to be a web development problem of this sort was actually the login confirmation for the (Canadian) McDonald’s app, since it apparently expects to be triggered in a certain way from Chromium. For when these very rare occasions arise, I keep Bromite on my phone as a backup browser. That being said, most of the limitations and incompatibilities that occasionally plague desktop Firefox users don’t apply to most mobile use cases (and for many of us, including myself, Firefox works over 99% of the time for our needs).

Further, while (if you choose it) Mull is plenty good for privacy, it’s still running as a normal web browser on the normal internet. If you need a VPN, and you have one you can trust, you should use it. If you want to browser using Tor, meanwhile, you should use Tor Browser for Android, which is itself a build of Firefox very similar to Mull (right down to having the same config tweaks), with Tor connectivity added, of course. The Tor network of course has many potential drawbacks and limitations of its own as well, but this goes way beyond the scope of browser technology.

Happy surfing!