This monorepo provides a full stack of TypeScript libraries for content blocking in browser extensions. It covers every layer — from filter list parsing and rule matching to browser extension integration and high-level extension APIs — and is used in AdGuard browser extensions and other projects.
The libraries are organized in layers, each building on the previous one:
- Parsing —
css-tokenizerandagtreeturn raw filter list text into structured tokens and AST nodes. - Matching —
tsurlfiltertakes parsed rules, builds lookup tables, and evaluates network requests and cosmetic rules against them. - Extension integration —
tswebextensionwraps the browser WebExtension API (both MV2 and MV3) to apply filtering decisions from the engine. - High-level API —
adguard-apiandadguard-api-mv3add filter list management (downloading, caching, auto-updates) on top oftswebextension.
Supporting packages include logger (logging), dnr-rulesets (prebuilt
Declarative Net Request rulesets for MV3), and
eslint-plugin-logger-context (ESLint rule for logger call formatting).
| Package | Description |
|---|---|
@adguard/tswebextension |
Wraps the browser WebExtension API to integrate tsurlfilter into MV2 and MV3 extensions. |
@adguard/tsurlfilter |
Content blocking engine — parses AdGuard rules, matches requests, and provides a declarative converter. |
@adguard/agtree |
Universal adblock filter list parser, converter, and validator producing a detailed AST. |
@adguard/dnr-rulesets |
CLI and library for building and loading prebuilt AdGuard DNR rulesets for MV3 extensions. |
@adguard/api |
High-level filtering API for MV2 extensions — manages filter lists and delegates blocking to tswebextension. |
@adguard/api-mv3 |
High-level filtering API for MV3 extensions — MV3 counterpart of @adguard/api. |
@adguard/logger |
Lightweight logging library with configurable levels and custom writers. |
@adguard/css-tokenizer |
Fast, spec-compliant CSS tokenizer for standard and Extended CSS. |
@adguard/eslint-plugin-logger-context |
ESLint plugin that enforces context tags in @adguard/logger calls. |
| Package | Description |
|---|---|
examples/adguard-api |
Sample MV2 extension using @adguard/api. |
examples/adguard-api-mv3 |
Sample MV3 extension using @adguard/api-mv3. |
examples/tswebextension-mv2 |
Sample MV2 extension using @adguard/tswebextension directly. |
examples/tswebextension-mv3 |
Sample MV3 extension using @adguard/tswebextension directly. |
benchmarks/* |
Performance benchmarks for agtree, css-tokenizer, and tsurlfilter. |
graph TD
css-tokenizer --> agtree
css-tokenizer --> tsurlfilter
agtree --> tsurlfilter
agtree --> tswebextension
tsurlfilter --> tswebextension
tsurlfilter --> dnr-rulesets
logger --> tswebextension
logger --> dnr-rulesets
tswebextension --> api
tswebextension --> api-mv3
See each package's README for installation and usage instructions.
- Development guide — environment setup, build commands, and contribution workflow
- LLM agent rules — project context for AI coding assistants
- Changelog per package — each package has its own
CHANGELOG.md - License