- Node.js 18 or later — nodejs.org
- pnpm —
npm install -g pnpm(or via pnpm.io) - A Chromium-based browser (Chrome, Brave, Edge, etc.)
git clone https://github.com/RainyRoot/AdBlocker.git
cd AdBlockerpnpm installpnpm buildThis performs three steps automatically:
- Fetch filter lists — Downloads the latest EasyList, EasyPrivacy, and uBlock Origin filter lists
- Convert to DNR — Translates AdBlock Plus syntax into Manifest V3
declarativeNetRequestJSON rules and generates cosmetic hiding CSS - Bundle — WXT compiles the extension to
.output/chrome-mv3/
- Open
chrome://extensionsin your browser - Enable Developer mode (toggle in the top right)
- Click Load unpacked
- Select the
.output/chrome-mv3/directory
The AdBlocker icon should appear in your toolbar.
pnpm build:prodThis builds and then creates a .zip file ready for Chrome Web Store submission.
For active development with hot reload:
pnpm devWXT starts in watch mode — changes to source files rebuild automatically. The extension reloads in the browser when you click the reload button on chrome://extensions.
Build the extension in a container for reproducible builds:
docker pull ghcr.io/rainyroot/adblocker:latest
# Copy the built extension to your local machine
docker run --rm -v $(pwd)/dist:/out ghcr.io/rainyroot/adblocker:latestdocker build -t adblocker .
docker run --rm -v $(pwd)/dist:/out adblockerThen load dist/chrome-mv3/ as an unpacked extension in Chrome.
To refresh the bundled filter lists to the latest versions:
pnpm fetch-filters
pnpm convert-filters
pnpm buildReload the extension in chrome://extensions after rebuilding.