<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd" -->

---
title: Powerful extensions do not need powerful code | daily.dev
description: A proposal for the Gosub browser's extension system reframes permissions as explicit, composable capabilities instead of Chrome's flat permission list, aiming...
canonical: https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Powerful extensions do not need powerful code | daily.dev
og:description: A proposal for the Gosub browser's extension system reframes permissions as explicit, composable capabilities instead of Chrome's flat permission list, aiming...
og:url: https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd
og:image: https://api.daily.dev/og/posts/bRTRZQhjd.png
og:image:alt: Powerful extensions do not need powerful code
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Powerful extensions do not need powerful code

**[A Day in the Life Of](https://daily.dev/sources/adayinthelife)** · 9 min read · 0 upvotes · 0 comments

## Summary

A proposal for the Gosub browser's extension system reframes permissions as explicit, composable capabilities instead of Chrome's flat permission list, aiming to keep Manifest V3's security gains without sacrificing powerful extensions like ad blockers. Rather than granting broad API access, Gosub translates manifests into scoped capabilities (e.g., filtering, content_script, network.egress), calculates what combinations of permissions actually enable, and surfaces that in install dialogs with warning tiers. A native filter engine called baleen runs ad-block list syntax directly in the browser (not extension code), reportedly matching 719,000 rules in about 7 µs per request, faster than Brave's engine. The work is a design prototype with a Rust translator tested against real Chrome Web Store manifests, but no actual browser implementation yet.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://adayinthelifeof.nl/2026/08/23/powerful-extensions-do-not-need-powerful-code>

## Questions this post answers

### How fast is Gosub's native filter engine baleen compared to Brave's ad blocking engine?

A stack of 27 filter lists with 719,000 rules matches in about 7 microseconds per request, and EasyList plus EasyPrivacy match in about 1.6 microseconds per request in Gosub's baleen filter engine. This is roughly twice as fast as Brave's engine measured on the same request corpus.

_daily.dev surfaces engineering deep dives like this for developers evaluating ad-blocking and filter-engine performance._

### Why did Manifest V3 make ad blockers worse in Chrome?

Manifest V3 removed the ability for extension code to sit in the request path of every page load, since that was bad for both security and performance, but replaced it with a capped, less expressive declarative rule format instead of a full scripting engine. This limited what ad blockers could express compared to the older webRequest-based blocking approach.

_developers weighing extension architecture trade-offs can track browser permission model changes on daily.dev._

### What percentage of uBlock Origin's filter list rules require running extension code instead of native filtering?

Only 0.8% of uBlock Origin's filter list rules need the loud content-script route requiring actual extension code. Of the cosmetic-family rules, 55% are scriptlets, 33% are plain cosmetic rules, and 11% are procedural rules, all of which can be handled natively without extension code in Gosub's design.

_engineers building or auditing filter-based extensions can follow browser permission model research on daily.dev._

## Similar posts on daily.dev

- [Brave overhauls adblock engine, cutting its memory consumption by 75%](https://daily.dev/posts/brave-overhauls-adblock-engine-cutting-its-memory-consumption-by-75--qnfgllldr) · Brave · 1 upvotes · 0 comments
- [Firefox Has Quietly Integrated Brave's Adblock Engine](https://daily.dev/posts/firefox-has-quietly-integrated-brave-s-adblock-engine-icdbdfmgl) · It's Foss · 205 upvotes · 35 comments
- [Google is about to disable uBlock Origin and every other Manifest V2 extension in Chrome](https://daily.dev/posts/google-is-about-to-disable-ublock-origin-and-every-other-manifest-v2-extension-in-chrome-fsalmwaeg) · The Next Web · 112 upvotes · 29 comments
- [Ad blocking alive and well, despite changes to Chrome](https://daily.dev/posts/ad-blocking-alive-and-well-despite-changes-to-chrome-2uxgvalxx) · The Register · 2 upvotes · 0 comments

---

Tags: [#devtools](https://daily.dev/tags/devtools), [#web-security](https://daily.dev/tags/web-security)

[View this post on daily.dev](https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Powerful extensions do not need powerful code","url":"https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd"},"datePublished":"2026-08-23T17:51:11.750Z","dateModified":"2026-09-13T20:22:24.693Z","description":"A proposal for the Gosub browser's extension system reframes permissions as explicit, composable capabilities instead of Chrome's flat permission list, aiming...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/beb574eb02106adb62ccc5c813645fc6?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/beb574eb02106adb62ccc5c813645fc6?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"A Day in the Life Of","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"A Day in the Life Of","logo":"https://media.daily.dev/image/upload/s--fZwBwfna--/f_auto,q_auto/v1774960048/logos/adayinthelife?_a=BAMAMiWQ0","url":"https://daily.dev/sources/adayinthelife"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"devtools,web-security","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"A Day in the Life Of","item":"https://daily.dev/sources/adayinthelife"},{"@type":"ListItem","position":3,"name":"Powerful extensions do not need powerful code"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/powerful-extensions-do-not-need-powerful-code-brtrzqhjd#faq","mainEntity":[{"@type":"Question","name":"How fast is Gosub's native filter engine baleen compared to Brave's ad blocking engine?","acceptedAnswer":{"@type":"Answer","text":"A stack of 27 filter lists with 719,000 rules matches in about 7 microseconds per request, and EasyList plus EasyPrivacy match in about 1.6 microseconds per request in Gosub's baleen filter engine. This is roughly twice as fast as Brave's engine measured on the same request corpus. daily.dev surfaces engineering deep dives like this for developers evaluating ad-blocking and filter-engine performance."}},{"@type":"Question","name":"Why did Manifest V3 make ad blockers worse in Chrome?","acceptedAnswer":{"@type":"Answer","text":"Manifest V3 removed the ability for extension code to sit in the request path of every page load, since that was bad for both security and performance, but replaced it with a capped, less expressive declarative rule format instead of a full scripting engine. This limited what ad blockers could express compared to the older webRequest-based blocking approach. developers weighing extension architecture trade-offs can track browser permission model changes on daily.dev."}},{"@type":"Question","name":"What percentage of uBlock Origin's filter list rules require running extension code instead of native filtering?","acceptedAnswer":{"@type":"Answer","text":"Only 0.8% of uBlock Origin's filter list rules need the loud content-script route requiring actual extension code. Of the cosmetic-family rules, 55% are scriptlets, 33% are plain cosmetic rules, and 11% are procedural rules, all of which can be handled natively without extension code in Gosub's design. engineers building or auditing filter-based extensions can follow browser permission model research on daily.dev."}}]}
```

