# adblockplus/abp2blocklist architecture

> Architecture diagram of the GitHub repository adblockplus/abp2blocklist, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/adblockplus/abp2blocklist
- Repository: https://github.com/adblockplus/abp2blocklist

## Overview

abp2blocklist is a command-line converter: it reads an Adblock Plus filter list from standard input, parses and collects filters, then generates WebKit content-blocker JSON on standard output. The main converter handles WebKit rule generation, including request and element-hiding rules and rule merging. Reused Adblock Plus core code provides filter parsing and domain utilities. The README documents the conversion’s compatibility limits. Some converter internals are unsampled, so the graph avoids asserting unshown internal call relationships.

Main entry points: [`adblockpluscore/lib/filterClasses.js`](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/filterClasses.js) (Filter parser), [`abp2blocklist.js`](https://github.com/adblockplus/abp2blocklist/blob/master/abp2blocklist.js) (CLI input/output), [`lib/abp2blocklist.js`](https://github.com/adblockplus/abp2blocklist/blob/master/lib/abp2blocklist.js) (Rule generation), [`adblockpluscore/lib/domain.js`](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/domain.js) (Domain utilities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Command-line entry"]
  node_cli["CLI input/output<br/>[abp2blocklist.js]"]
end

subgraph group_conversion["Rule conversion"]
  node_converter["Rule generation<br/>[abp2blocklist.js]"]
end

subgraph group_core["Adblock Plus core"]
  node_parser["Filter parser<br/>[filterClasses.js]"]
  node_common["Filter utilities<br/>[common.js]"]
  node_coreutils["Core helpers<br/>[coreUtils.js]"]
  node_domain["Domain utilities<br/>[domain.js]"]
  node_suffixes["Public suffix data"]
  node_resources["Filter resources<br/>[resources.json]"]
end

node_user(("Filter-list provider"))
node_output(("JSON consumer"))

node_user -->|"provides input"| node_cli
node_cli -->|"parses lines"| node_parser
node_cli -->|"adds filters"| node_converter
node_cli -->|"generates rules"| node_converter
node_cli -->|"writes JSON"| node_output
node_converter -->|"uses filter classes"| node_parser
node_parser -->|"uses utilities"| node_common
node_parser -->|"uses helpers"| node_coreutils
node_parser -->|"uses domains"| node_domain
node_parser -->|"loads resources"| node_resources
node_domain -->|"loads suffix data"| node_suffixes

click node_cli "https://github.com/adblockplus/abp2blocklist/blob/master/abp2blocklist.js"
click node_parser "https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/filterClasses.js"
click node_converter "https://github.com/adblockplus/abp2blocklist/blob/master/lib/abp2blocklist.js"
click node_common "https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/common.js"
click node_coreutils "https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/coreUtils.js"
click node_domain "https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/domain.js"
click node_suffixes "https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/data/publicSuffixList.json"
click node_resources "https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/data/resources.json"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli toneBlue
class node_converter toneAmber
class node_parser,node_common,node_coreutils,node_domain,node_suffixes,node_resources toneMint
class node_user,node_output toneIndigo
```

## Components

### Command-line entry

- [CLI input/output](https://github.com/adblockplus/abp2blocklist/blob/master/abp2blocklist.js): `abp2blocklist.js`

### Rule conversion

- [Rule generation](https://github.com/adblockplus/abp2blocklist/blob/master/lib/abp2blocklist.js): `lib/abp2blocklist.js`

### Adblock Plus core

- [Filter parser](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/filterClasses.js): `adblockpluscore/lib/filterClasses.js`
- [Filter utilities](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/common.js): `adblockpluscore/lib/common.js`
- [Core helpers](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/coreUtils.js): `adblockpluscore/lib/coreUtils.js`
- [Domain utilities](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/lib/domain.js): `adblockpluscore/lib/domain.js`
- [Public suffix data](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/data/publicSuffixList.json): `adblockpluscore/data/publicSuffixList.json`
- [Filter resources](https://github.com/adblockplus/abp2blocklist/blob/master/adblockpluscore/data/resources.json): `adblockpluscore/data/resources.json`

### Other components

- **Filter-list provider**
- **JSON consumer**

## Connections

- Filter-list provider → CLI input/output: provides input (evidence: `README.md`)
- CLI input/output → Filter parser: parses lines (evidence: `abp2blocklist.js`)
- CLI input/output → Rule generation: adds filters (evidence: `abp2blocklist.js`)
- CLI input/output → Rule generation: generates rules (evidence: `abp2blocklist.js`)
- CLI input/output → JSON consumer: writes JSON (evidence: `abp2blocklist.js`)
- Rule generation → Filter parser: uses filter classes (evidence: `lib/abp2blocklist.js`)
- Filter parser → Filter utilities: uses utilities (evidence: `adblockpluscore/lib/filterClasses.js`)
- Filter parser → Core helpers: uses helpers (evidence: `adblockpluscore/lib/filterClasses.js`)
- Filter parser → Domain utilities: uses domains (evidence: `adblockpluscore/lib/filterClasses.js`)
- Filter parser → Filter resources: loads resources (evidence: `adblockpluscore/lib/filterClasses.js`)
- Domain utilities → Public suffix data: loads suffix data (evidence: `adblockpluscore/lib/domain.js`)
