scalpel@labs: ~/glossary/easylist.mdx5 sections

EasyList, the Filter List Behind Most Ad Blockers

EasyList is an open, community-maintained filter list that names the URL patterns used to serve adverts. Most blockers build on it. Scalpel bundles a version-pinned snapshot and converts it to Chrome's rule format, so the copy you run is fixed and auditable.

extension: Scalpel Ads Blockerupdated: 2026-08-14read_time: 3 min
less easylist.mdx

Why it matters

Building an ad blocker from scratch means knowing every advert network in the world. You'd need to research sites, find their ad server URLs, write rules for each one, and maintain that list as new networks emerge. That's a massive task.

EasyList solves this. It's a collaborative, open project that crowdsources advert URL patterns. Thousands of ad blockers (uBlock Origin, Adblock Plus, and others) use it because it's comprehensive and well-maintained. Scalpel uses it too. By building on EasyList, Scalpel gets effective blocking without reinventing the list.

The list is free to use and open source, so you can inspect exactly what's being blocked.

How it works

EasyList is a text file published on easylist.to. Each line is a filter rule. A rule can be as simple as ||ads.example.com^ (block all requests to that domain) or more complex, targeting specific URL patterns or resource types.

The list covers thousands of known ad networks and tracking domains. It's curated and updated frequently by volunteers. When a new ad network appears, community members add rules for it. When a network shuts down, its rules are removed.

EasyList uses the Adblock Plus filter syntax, which is a standard format that many ad blockers understand. Each rule says what URL patterns to block, and can specify options like "block only for images" or "block except on this domain."

Most ad blockers fetch the live version of EasyList regularly and update their blocking on the fly. Scalpel does something different: it downloads EasyList at build time, converts it to Chrome's declarativeNetRequest format, bundles it inside the extension, and ships that fixed snapshot to you.

What does not matter

EasyList is not machine learning. It doesn't use AI to detect adverts. It's a hand-curated list of known ad-serving domains and URL patterns. If an advert serves from a domain not on the list (like a small regional ad network), EasyList might miss it.

Also, EasyList blocks by URL pattern alone. It can't read the content of a request and make careful, context-aware decisions. If an advert network also serves legitimate content, EasyList might block that too (though the community tries to avoid this).

EasyList's dual licensing under GPL and Creative Commons means you can use it freely, but if you publish a modified version, you should share your changes back. Scalpel respects this by pinning a specific version and documenting it clearly.

Code example

A sample of EasyList rules looks like this:

! Advert blocking rules
||ads.google.com^
||doubleclick.net^
||googlesyndication.com^

! Target only image requests
||ads-images.example.com^$image

! Block except on specific domains
||ad-tracker.com^$domain=~allowed-site.com|~another-allowed-site.com

! Block third-party requests only
||analytics.example.com^$third-party

The first three rules block entire domains. The $image modifier targets only image requests. The $domain=~ syntax says "block everywhere except these domains." The $third-party modifier catches trackers that follow you between sites.

When Scalpel builds its extension, it parses these rules and converts them to declarativeNetRequest JSON. So a rule like ||ads.google.com^ becomes:

{
  "id": 12345,
  "priority": 1,
  "action": { "type": "block" },
  "condition": { "urlFilter": "||ads.google.com^" }
}

The Adblock Plus syntax is more readable for humans. The declarativeNetRequest format is what Chrome understands.

How Scalpel Ads Blocker shows it

In Scalpel's settings, EasyList is listed as one of the bundled filter lists and is enabled by default. You can toggle it on or off. When enabled, Scalpel applies all the EasyList rules to your browsing.

The version of EasyList bundled in Scalpel is fixed to the version that was current when the extension build was created. If EasyList updates, your Scalpel doesn't automatically download the new rules. Instead, you'd have to update Scalpel itself from the Chrome Web Store.

This design means Scalpel's blocking is auditable and stable. You know exactly which EasyList rules are active, and they don't change until you consciously update. Some ad blockers prefer live lists that update constantly. Scalpel prefers reliability and transparency.

In the Chrome extension details page (found in your browser's extension manager), you can see Scalpel's version and the bundled EasyList version in the extension's about section or documentation. This helps you understand what you're running.

Sources