Mozilla bundled adblock-rust (Brave’s Rust-based adblock engine, the same one my team works on) into Firefox. Pretty exciting to see them finally start taking ad & tracker blocking seriously; I didn’t think I’d see the day where adblock-rust would be bundled into Firefox. It landed in Firefox 149 via Bugzilla Bug 2013888. It’s clearly still an experiment: disabled by default, no usable UI, no filter lists, and as far as I can tell, no press coverage.

I previously tweeted posted about Waterfox adopting adblock-rust. It looks like Waterfox is piggy-backing off of Firefox’s implementation (great!). Thanks to Moritz for the pointer to Firefox’s bug linked to from Waterfox’s adblock-rust implementation issue.

How to enable Brave’s adblocking engine in Firefox

Open about:config in Firefox 149+ and set:

privacy.trackingprotection.content.protection.enabled = true

Then point it at some filter lists. It currently ships with no filter lists by default; you have to supply them yourself. To add EasyList and EasyPrivacy filter lists:

privacy.trackingprotection.content.protection.test_list_urls = https://easylist.to/easylist/easylist.txt|https://easylist.to/easylist/easyprivacy.txt

Changing the test_list_urls pref triggers a full reload, but the lists seem to be cached in my testing.

All prefs

Just search for privacy.trackingprotection.content in about:config. I found the following:

  • privacy.trackingprotection.content.protection.enabled: Enable blocking
  • privacy.trackingprotection.content.annotation.enabled: Enable annotation (tagging without blocking)
  • privacy.trackingprotection.content.protection.test_list_urls: Pipe-delimited list URLs for blocking
  • privacy.trackingprotection.content.annotation.test_list_urls: Pipe-delimited list URLs for annotation
  • privacy.trackingprotection.content.testing: Fire observer notifications when lists load (for devs)

It looks like Firefox’s bundling supports two modes:

  • Protection: matches and blocks requests against filter lists.
  • Annotation: matches and tags requests for telemetry/UI, but doesn’t block.

I’m curious to see where this experiment goes!