If you want to make AdGuard better by creating new rules, follow the instructions below to make your ideas come to life faster!
- You need to have a GitHub account to make contributions.
- You need to have the following tools installed on your machine:
- Git
- Node.js (we recommend using the latest LTS version)
- Yarn (you can install it using npm:
npm install -g yarn
) - Visual Studio Code (we recommend using this editor)
- Install the recommended extensions for VSCode (listed in
.vscode/extensions.json
).- At first launch, you will be prompted to install them. If not, press
CTRL+SHIFT+P
and typeShow Recommended Extensions
and install them. - Please note that, by default Comment Anchors does not know adblock-style comments (like
! this is a comment
), so you'll need to add!
as a match prefix in thecommentAnchors.tags.matchPrefix
setting (File -> Preferences -> Settings -> Extensions -> Comment Anchors Configuration).
- At first launch, you will be prompted to install them. If not, press
- Install the recommended extensions for VSCode (listed in
After you have installed the necessary tools, you need to set up the repository.
- Fork the original repository on GitHub. This will create a copy of the repository in your account.
- Clone remote repository from GitHub to your local machine.
- Install the dependencies by running the following command in the terminal:
This will install necessary tools like AGLint and initialize Husky hooks.
yarn install
- Create a new branch for your changes. Please use the following naming convention:
fix/123
where123
is the issue number you're working on. - Make your changes, test them and put them in the proper file or section of the file.
- You can learn how to write filtering rules in the How to write filter rules section.
- Please read and understand the current filters policy we adhere to.
- One of its most important points is the quality requirements.
- When you're done with creating rules, please take a look at the similar ones in the filters. This may help you to make a better version of the rule.
- Please read the Repository structure section below to learn more about the structure of the repo and where to put your rules.
- If everything is fine, commit your changes. Please try to separate branches and commits
for different issues and don't mix them in one. It is easier to manage and review them that way.
- Note: By default, Husky pre-commit hook will run AGLint on your changes and will prevent you from committing if there are any errors in your changes.
- Push your new branch to your remote repository.
- Create a pull request from your branch to the
master
branch of the original repository. AGLint will run automatically on your PR and will report any errors. If there are any errors, fix them and push your changes to your fork. If AGLint passes, your PR will be reviewed by a maintainer. - If the review is successful, your changes will be merged into the
master
branch.
If you need to skip running checks, you can do it in the following ways. Please note that it is only allowed in special cases and should not be used as a regular practice.
- Skip running Husky pre-commit hook:
git commit --no-verify -m "commit message"
. - Skip running checks on GitHub: add
[skip ci]
to the commit message as a prefix.
AdGuard filters are compiled from files in this repository. This is an automated process that is periodically run by scripts in the FiltersRegistry repo. In this repository, each filter list is divided into several files, and each file has its own purpose. If you're adding a new rule, make sure it is added to the proper file or section of the file.
General requirements for submitting rules: don't add rules to the beginning of the file, start entering them from line 4, for example. If you add rules with a task comment or hints, put them next to the same structure in the file.
- Purpose: this filter blocks various kinds of ads mostly on English-language and multilingual sites.
- Base folder
- Notes: The AdGuard Base filter includes Easylist,
so there's no need to add rules which are already in
Easylist
.
- Purpose: this filter blocks various kinds of ads on mobile version of sites and in mobile apps.
- Mobile folder
- Purpose: this filter hides your actions online and helps avoid tracking.
- Tracking Protection folder
- Purpose: this filter removes various kinds of tracking parameters from sites.
- URL Tracking folder
- Purpose: this filter blocks various kinds of social widgets from sites.
- Social folder
-
Purpose: this filter blocks irritating elements on web pages including cookie notices, third-party widgets and in-page pop-ups.
-
Contains the following AdGuard filters: Cookie Notices, Popups, Mobile App Banners, Other Annoyances and Widgets:
-
Cookie Notices
Purpose: this filter blocks cookie notices on web pages.
-
Mobile App Banners
- Purpose: this filter blocks irritating banners that promote mobile apps of websites.
- MobileApp folder
-
Popups
- Purpose: this filter blocks all kinds of pop-ups that are not necessary for websites' operation.
- Popups folder
-
Widgets
- Purpose: this filter blocks annoying third-party widgets: online assistants, live support chats, etc.
- Widgets folder
-
Other Annoyances
- Purpose: this filter blocks irritating elements on web pages that do not fall under the popular categories of annoyances.
- Other folder
-
- Purpose: this filter serves to test some new filtering rules that can potentially cause conflicts and mess with websites' work. In case these rules perform without any issues, they get added to main filters.
- Experimental folder
- Purpose: this filter unblocks search engine result that may be useful to users.
- UsefulAdsFilter folder
- Purpose: this filter blocks various kinds of ads on Russian-language sites.
- Russian folder
- Purpose: this filter blocks various kinds of ads on Ukrainian-language sites.
- Ukrainian folder
- Purpose: this filter blocks various kinds of ads on Chinese-language sites.
- Chinese folder
- Notes: The AdGuard Chinese filter includes Easylist China,
so there's no need to add rules which are already in
Easylist China
.
- Purpose: this filter blocks various kinds of ads on Dutch-language sites.
- Dutch folder
- Purpose: this filter blocks various kinds of ads on French-language sites.
- French folder
- Notes: The AdGuard French filter includes Liste FR,
so there's no need to add rules which are already in
Liste FR
.
- Purpose: this filter blocks various kinds of ads on German-language sites.
- German folder
- Notes: The AdGuard German filter includes Easylist Germany,
so there's no need to add rules which are already in
Easylist Germany
.
- Purpose: this filter blocks various kinds of ads on Japanese-language sites.
- Japanese folder
- Purpose: this filter blocks various kinds of ads on Spanish-language and Portuguese-language sites.
- Spanish folder
- Purpose: this filter blocks various kinds of ads on Turkish-language sites.
- Turkish folder