From b5171fe3d8088e541864a79f9d9f50deb818696e Mon Sep 17 00:00:00 2001 From: Slava Leleka Date: Tue, 8 Aug 2023 12:52:57 +0300 Subject: [PATCH 01/10] add markdownlint --- .markdownlint.json | 16 ++++ .markdownlintignore | 2 + package.json | 3 + yarn.lock | 206 ++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 220 insertions(+), 7 deletions(-) create mode 100644 .markdownlint.json create mode 100644 .markdownlintignore diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 00000000000..7e082ffeec8 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,16 @@ +{ + "ul-indent": { "indent": 4 }, + "ul-style": { "style": "dash" }, + "emphasis-style": { "style": "asterisk" }, + "no-duplicate-header": { "siblings_only": true }, + "no-inline-html": { + "allowed_elements": [ + "br", + "details", + "summary" + ]}, + "line-length": false, + "no-bare-urls": false, + "no-emphasis-as-heading": false, + "link-fragments": false +} diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 00000000000..342537b34b6 --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1,2 @@ +node_modules/ +i18n/ diff --git a/package.json b/package.json index 6e8642f54a6..ef77915fadc 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", + "lint:md": "markdownlint .", "crowdin": "crowdin", "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download" }, @@ -44,6 +45,8 @@ ] }, "devDependencies": { + "markdownlint": "^0.29.0", + "markdownlint-cli": "^0.35.0", "nodejieba": "^2.6.0" } } diff --git a/yarn.lock b/yarn.lock index de4a7714704..d034ffe2738 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1657,6 +1657,18 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -1781,6 +1793,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@polka/url@^1.0.0-next.20": version "1.0.0-next.21" resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" @@ -2845,6 +2862,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -3207,6 +3231,11 @@ commander@^8.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@~11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" + integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -3372,7 +3401,7 @@ cross-fetch@^3.1.5: dependencies: node-fetch "2.6.7" -cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -3930,6 +3959,11 @@ entities@^4.2.0, entities@^4.3.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== +entities@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -4306,6 +4340,14 @@ follow-redirects@^1.14.8: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.2" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" @@ -4447,6 +4489,11 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-stdin@~9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -4515,6 +4562,17 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@~10.2.7: + version "10.2.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.7.tgz#9dd2828cd5bc7bd861e7738d91e7113dda41d7d8" + integrity sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2" + path-scurry "^1.7.0" + global-dirs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" @@ -4970,6 +5028,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@~5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + image-size@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" @@ -5043,6 +5106,11 @@ ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" @@ -5357,6 +5425,15 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +jackspeak@^2.0.3: + version "2.2.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.2.tgz#707c62733924b8dc2a0a629dc6248577788b5385" + integrity sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -5432,6 +5509,11 @@ json5@^2.1.2, json5@^2.2.1: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +jsonc-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -5485,6 +5567,13 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +linkify-it@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" + integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== + dependencies: + uc.micro "^1.0.1" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -5592,6 +5681,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" + integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + lunr-languages@^1.4.0: version "1.9.0" resolved "https://registry.yarnpkg.com/lunr-languages/-/lunr-languages-1.9.0.tgz#7105230807788a112a69910561b7bbd055a0e588" @@ -5614,6 +5708,45 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== +markdown-it@13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" + integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== + dependencies: + argparse "^2.0.1" + entities "~3.0.1" + linkify-it "^4.0.1" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +markdownlint-cli@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/markdownlint-cli/-/markdownlint-cli-0.35.0.tgz#1a6386777c6f20681e1425c0b7a056cf130bc46f" + integrity sha512-lVIIIV1MrUtjoocgDqXLxUCxlRbn7Ve8rsWppfwciUNwLlNS28AhNiyQ3PU7jjj4Qvj+rWTTvwkqg7AcdG988g== + dependencies: + commander "~11.0.0" + get-stdin "~9.0.0" + glob "~10.2.7" + ignore "~5.2.4" + js-yaml "^4.1.0" + jsonc-parser "~3.2.0" + markdownlint "~0.29.0" + minimatch "~9.0.1" + run-con "~1.2.11" + +markdownlint-micromark@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/markdownlint-micromark/-/markdownlint-micromark-0.1.5.tgz#a23400b101be32cd4336f2b6b4c47da31825524c" + integrity sha512-HvofNU4QCvfUCWnocQP1IAWaqop5wpWrB0mKB6SSh0fcpV0PdmQNS6tdUuFew1utpYlUvYYzz84oDkrD76GB9A== + +markdownlint@^0.29.0, markdownlint@~0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/markdownlint/-/markdownlint-0.29.0.tgz#9647478b7d5485965c557502fe54ee5a550033f2" + integrity sha512-ASAzqpODstu/Qsk0xW5BPgWnK/qjpBQ4e7IpsSvvFXcfYIjanLTdwFRJK1SIEEh0fGSMKXcJf/qhaZYHyME0wA== + dependencies: + markdown-it "13.0.1" + markdownlint-micromark "0.1.5" + mdast-squeeze-paragraphs@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" @@ -5657,7 +5790,7 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mdurl@^1.0.0: +mdurl@^1.0.0, mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== @@ -5780,11 +5913,23 @@ minimatch@^3.0.4, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.1, minimatch@~9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -5800,6 +5945,16 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e" + integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA== + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -6281,6 +6436,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.7.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -7246,6 +7409,16 @@ rtlcss@^3.5.0: postcss "^8.3.11" strip-json-comments "^3.1.1" +run-con@~1.2.11: + version "1.2.12" + resolved "https://registry.yarnpkg.com/run-con/-/run-con-1.2.12.tgz#51c319910e45a3bd71ee773564a89d96635c8c64" + integrity sha512-5257ILMYIF4RztL9uoZ7V9Q97zHtNHn5bN3NobeAnzB1P3ASLgg8qocM2u+R18ttp+VEM78N2LK8XcNVtnSRrg== + dependencies: + deep-extend "^0.6.0" + ini "~3.0.0" + minimist "^1.2.8" + strip-json-comments "~3.1.1" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -7523,6 +7696,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-concat@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" @@ -7673,7 +7851,7 @@ std-env@^3.0.1: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.1.1.tgz#1f19c4d3f6278c52efd08a94574a2a8d32b7d092" integrity sha512-/c645XdExBypL01TpFKiG/3RAa/Qmu+zRi0MwAmrdEkwHNuN0ebo8ccAXBBDa5Z0QOJgBskUIbuCK91x0sCVEw== -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7682,7 +7860,7 @@ std-env@^3.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -7732,7 +7910,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -7756,7 +7934,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1, strip-json-comments@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -8069,6 +8247,11 @@ ua-parser-js@^0.7.30: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" integrity sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ== +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" + integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -8580,7 +8763,7 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -8598,6 +8781,15 @@ wrap-ansi@^8.0.1: string-width "^5.0.1" strip-ansi "^7.0.1" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" From 2f6834b7768de4a3fb6884090170f23be1e92d62 Mon Sep 17 00:00:00 2001 From: Slava Leleka Date: Tue, 8 Aug 2023 12:53:13 +0300 Subject: [PATCH 02/10] fix docs --- .../adguard-browser-extension/installation.md | 19 +- docs/adguard-content-blocker/installation.md | 4 +- docs/adguard-for-android/installation.md | 6 +- docs/adguard-for-android/overview.md | 154 +- .../solving-problems/background-work.md | 214 +-- .../solving-problems/battery.md | 26 +- .../solving-problems/compatibility-issues.md | 16 +- .../solving-problems/firefox-certificates.md | 58 +- .../solving-problems/har.md | 9 +- .../https-certificate-for-rooted.md | 37 +- .../solving-problems/log.md | 14 +- .../solving-problems/logcat.md | 65 +- .../solving-problems/low-level-settings.md | 12 +- .../solving-problems/manual-certificate.md | 2 +- .../multiple-user-profiles.md | 35 +- .../solving-problems/outbound-proxy.md | 55 +- .../solving-problems/secure-folder.md | 2 +- .../solving-problems/tasker.md | 9 +- .../solving-problems/youtube-ads.md | 8 +- docs/adguard-for-ios/installation.md | 12 +- docs/adguard-for-ios/overview.md | 1 + .../facetime-compatibility-issues.md | 1 + .../solving-problems/system-wide-filtering.md | 8 +- docs/adguard-for-ios/web-extension.md | 8 +- docs/adguard-for-mac/browser-assistant.md | 7 + docs/adguard-for-mac/installation.md | 5 +- docs/adguard-for-mac/overview.md | 11 +- .../solving-problems/advanced-settings.md | 12 +- .../solving-problems/big-sur-issues.md | 65 +- .../solving-problems/icloud-private-relay.md | 1 + .../solving-problems/launch-issues.md | 36 +- .../solving-problems/protect-mail-activity.md | 2 + docs/adguard-for-safari/installation.md | 27 +- docs/adguard-for-windows/installation.md | 16 +- docs/adguard-for-windows/overview.md | 55 +- .../solving-problems/adguard-logs.md | 38 +- .../common-installer-errors.md | 1 - .../connection-not-trusted.md | 18 +- .../solving-problems/dns-leaks.md | 28 +- .../solving-problems/dump-file.md | 15 +- .../solving-problems/installation-logs.md | 10 +- .../solving-problems/low-level-settings.md | 18 +- .../solving-problems/system-logs.md | 24 +- docs/general/account/2fa.md | 12 +- docs/general/account/features.md | 18 +- docs/general/ad-filtering/adguard-filters.md | 44 +- .../ad-filtering/create-own-filters.md | 1487 +++++++++-------- docs/general/ad-filtering/filter-policy.md | 2 +- docs/general/ad-filtering/search-ads.md | 16 +- .../tracking-filter-statistics.md | 16 +- docs/general/browsing-security.md | 6 +- docs/general/https-filtering/known-issues.md | 4 +- .../local-adguard-com-domain.md | 10 +- .../what-is-https-filtering.md | 6 +- docs/general/license/activation.md | 78 +- docs/general/license/cancel-refund.md | 9 +- docs/general/license/payment-options.md | 7 +- docs/general/license/transfer.md | 47 +- docs/general/license/what-is.md | 14 +- docs/general/userscripts.md | 14 +- docs/guides/adware.md | 16 +- docs/guides/collect-har-file.md | 150 +- docs/guides/report-bugs.md | 15 +- docs/guides/report-website.md | 68 +- docs/guides/take-screenshot.md | 28 +- docs/intro.md | 12 +- docs/miscellaneous/acknowledgements.md | 266 +-- docs/miscellaneous/contribute/beta-testing.md | 10 +- docs/miscellaneous/contribute/filters.md | 2 +- .../contribute/translate/guidelines.md | 56 +- .../contribute/translate/plural-forms.md | 6 +- .../contribute/translate/program.md | 2 +- .../contribute/translate/rewards.md | 9 +- .../translate/translation-priority.md | 18 +- .../contribute/writing-about-adguard.md | 2 +- 75 files changed, 1892 insertions(+), 1722 deletions(-) diff --git a/docs/adguard-browser-extension/installation.md b/docs/adguard-browser-extension/installation.md index 0e65df6c03a..e7fad23bd36 100644 --- a/docs/adguard-browser-extension/installation.md +++ b/docs/adguard-browser-extension/installation.md @@ -9,13 +9,13 @@ This article is about AdGuard Browser Extension, which safeguards only your brow ::: -## How to install AdGuard Browser Extension for Google Chrome or Chromium browsers +## How to install AdGuard Browser Extension for Google Chrome or Chromium browsers -Open the extension's page in [Chrome Web Store](https://agrd.io/extension_chrome) and click _Add to Chrome_. +Open the extension's page in [Chrome Web Store](https://agrd.io/extension_chrome) and click *Add to Chrome*. ![AdGuard Browser Extension in Chrome Web Store *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_chrome.png) -In the opened dialog box, click _Add extension_. +In the opened dialog box, click *Add extension*. ![Dialog box in Chrome Web Store *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_chrome1.png) @@ -25,7 +25,7 @@ Open the page [addons.opera.com](https://agrd.io/extension_opera). ![AdGuard Browser Extension in Opera addons *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_opera.png) -Click _Add to Opera_. +Click *Add to Opera*. ## How to install AdGuard Browser Extension for Firefox @@ -33,23 +33,23 @@ Open the page [addons.mozilla.org](https://agrd.io/extension_firefox). ![AdGuard Browser Extension in Firefox add-ons *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_firefox.png) -Click _Add to Firefox_. +Click *Add to Firefox*. ## How to install AdGuard Browser Extension for Yandex Browser -Click the browser settings button in the upper right corner of the browser, then choose _Add-ons_ in the drop-down menu. +Click the browser settings button in the upper right corner of the browser, then choose *Add-ons* in the drop-down menu. -Scroll down to find AdGuard, then click _Install_. +Scroll down to find AdGuard, then click *Install*. ![AdGuard Browser Extension in Yandex Add-ons *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_yandex.png) ## How to install AdGuard Browser Extension for Microsoft Edge -Find AdGuard Browser Extension in the [Edge Add-ons store](https://agrd.io/extension_edge) and click _Get_. +Find AdGuard Browser Extension in the [Edge Add-ons store](https://agrd.io/extension_edge) and click *Get*. ![AdGuard Browser Extension in Edge Add-ons *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_edge.png) -In the opened dialog window, press _Add extension_. +In the opened dialog window, press *Add extension*. ![Edge dialog window *border](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/ad_blocker_browser_extension_edge1.png) @@ -69,7 +69,6 @@ In the opened dialog window, click *Add extension* to install AdGuard Browser Ex ![Add to Edge button](https://cdn.adtidy.org/content/Kb/ad_blocker/browser_extension/add_to_edge.jpg) - ## How to install AdGuard Browser Extension for Safari AdGuard for Safari is not a browser extension in a common sense. You can read more about it in a [dedicated article](/adguard-for-safari/overview). Or you can [download the installation file](https://agrd.io/safari_release) directly from this page. diff --git a/docs/adguard-content-blocker/installation.md b/docs/adguard-content-blocker/installation.md index 506656c80af..d042698848e 100644 --- a/docs/adguard-content-blocker/installation.md +++ b/docs/adguard-content-blocker/installation.md @@ -11,7 +11,7 @@ This article is about AdGuard Content Blocker, which only safeguards your Samsun The application is available in five stores: [Google Play](https://play.google.com/store/apps/details?id=com.adguard.android.contentblocker), [Samsung Galaxy store](https://galaxystore.samsung.com/detail/com.adguard.android.contentblocker), [Huawei AppGallery](https://appgallery.huawei.com/#/app/C100440597), [Aptoide](https://adguard-content-blocker.en.aptoide.com/), and [F-Droid](https://f-droid.org/en/packages/com.adguard.android.contentblocker/). -To install AdGuard Content Blocker from Google Play, search _AdGuard Content Blocker_ and tap _Install_. +To install AdGuard Content Blocker from Google Play, search *AdGuard Content Blocker* and tap *Install*. ![Content Blocker on Google Play *mobile_border](https://cdn.adtidy.org/content/Kb/ad_blocker/content_blocker/content_blocker_play_market.jpg) @@ -21,7 +21,7 @@ AdGuard Content Blocker works in two browsers: [Yandex Browser](https://browser. ::: -After the installation is completed, tap _Open_ to run the app. +After the installation is completed, tap *Open* to run the app. ![Content Blocker installed *mobile_border](https://cdn.adtidy.org/content/Kb/ad_blocker/content_blocker/content_blocker_play_market_installed.jpg) diff --git a/docs/adguard-for-android/installation.md b/docs/adguard-for-android/installation.md index 4d63ef9f4e3..adc0c8a9a8e 100644 --- a/docs/adguard-for-android/installation.md +++ b/docs/adguard-for-android/installation.md @@ -25,9 +25,9 @@ That’s why you can only install AdGuard for Android manually. To use the app o 1. **Download the app on your device**. Here are a few ways you can do this: - * head over to [our website](https://adguard.com/adguard-android/overview.html) and tap the *Download* button - * start the browser and type in the following URL: [https://adguard.com/apk](https://adguard.com/apk) - * or scan this QR code + - head over to [our website](https://adguard.com/adguard-android/overview.html) and tap the *Download* button + - start the browser and type in the following URL: [https://adguard.com/apk](https://adguard.com/apk) + - or scan this QR code ![QR code *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/installation/inst_qr.png) diff --git a/docs/adguard-for-android/overview.md b/docs/adguard-for-android/overview.md index ff4a77e3be8..28bbbdf603c 100644 --- a/docs/adguard-for-android/overview.md +++ b/docs/adguard-for-android/overview.md @@ -15,35 +15,35 @@ AdGuard for Android is not to be confused with AdGuard Content Blocker. AdGuard ::: -# Protection +# Protection This screen combines all features of AdGuard’s protection: - * Ad blocking - * Tracking protection - * Annoyance blocking - * DNS protection - * Firewall - * Browsing Security - * Integration with AdGuard VPN +- Ad blocking +- Tracking protection +- Annoyance blocking +- DNS protection +- Firewall +- Browsing Security +- Integration with AdGuard VPN More on each feature below. -## Ad blocking +## Ad blocking The feature blocks ads by applying ad-blocking and language-specific filters. To learn about the mechanism of ad blocking, you can read a [dedicated article](/general/ad-filtering/how-ad-blocking-works). Basic protection effectively blocks ads on most websites. For more customized ad blocking, you can: - * Enable appropriate language-specific filters — they contain filtering rules for blocking ads on websites in specific languages +- Enable appropriate language-specific filters — they contain filtering rules for blocking ads on websites in specific languages - * Add websites to allowlist — these websites won't be filtered by AdGuard +- Add websites to allowlist — these websites won't be filtered by AdGuard - * Create user rules — AdGuard will apply them on specified websites. [Learn how to create your own user rules](/general/ad-filtering/create-own-filters) +- Create user rules — AdGuard will apply them on specified websites. [Learn how to create your own user rules](/general/ad-filtering/create-own-filters) ![Ad blocking *mobile_border](https://cdn.adtidy.org/blog/new/o44x5ad_blocking.png) -## Tracking protection +## Tracking protection *Tracking protection* (formerly *Stealth Mode*) prevents websites from gathering information about you, such as your IP addresses, information about your browser and operating system, screen resolution, and the page you came or were redirected from. It can also block cookies that websites use to mark the browser and save your personal settings, user preferences, or recognize you upon your next visit. @@ -66,7 +66,7 @@ There are three pre-configured protection levels. Here’s what features they ha b. *Remove tracking parameters from URLs*. This setting strips tracking parameters like `utm_*` and `fb_ref` from page URLs using the AdGuard URL Tracking filter c. *Hide your search queries* - + d. *Ask websites not to track you* e. *Self-destruction of third-party cookies*. This setting limits the time to live of third-party cookies to 180 min @@ -80,7 +80,7 @@ There are three pre-configured protection levels. Here’s what features they ha b. *Remove tracking parameters from URLs* c. *Hide your search queries* - + d. *Ask websites not to track you* e. *Self-destruction of third-party cookies* @@ -99,21 +99,21 @@ There are three pre-configured protection levels. Here’s what features they ha You can fine-tune Tracking protection by selecting the *Custom* protection level. [Learn more about other Tracking protection settings](/general/stealth-mode) -## Annoyance blocking +## Annoyance blocking This feature is based on AdGuard's annoyance filters and allows you to block popups, online assistant windows, cookie notifications, prompts to download mobile apps, and similar annoyances. [Learn more about annoyance filters](/general/ad-filtering/adguard-filters/#adguard-filters) ![Annoyance blocking *mobile_border](https://cdn.adtidy.org/blog/new/lwujvannoyance.png) -## DNS protection +## DNS protection *DNS protection* allows you to filter DNS requests with the help of a selected DNS server, DNS filters, and user rules: - * Some DNS servers have blocklists that help block DNS requests to potentially harmful domains +- Some DNS servers have blocklists that help block DNS requests to potentially harmful domains - * In addition to DNS servers, AdGuard can filter DNS requests on its own using a special DNS filter. It contains a large list of ad and tracking domains — requests to them are rerouted to a blackhole server +- In addition to DNS servers, AdGuard can filter DNS requests on its own using a special DNS filter. It contains a large list of ad and tracking domains — requests to them are rerouted to a blackhole server - * You can also block and unblock domains by creating user rules. You might need to consult our article about [DNS filtering rule syntax](https://adguard-dns.io/kb/general/dns-filtering-syntax/) +- You can also block and unblock domains by creating user rules. You might need to consult our article about [DNS filtering rule syntax](https://adguard-dns.io/kb/general/dns-filtering-syntax/) ![DNS protection *mobile_border](https://cdn.adtidy.org/blog/new/u8qtxdns_protection.png) @@ -121,11 +121,11 @@ This feature is based on AdGuard's annoyance filters and allows you to block pop In this section, you can select a DNS server to resolve DNS requests, block ads and trackers, and encrypt DNS traffic. Tap a server to read its full description and select a protocol. If you didn't find the desired server, you can add it manually: - * Click *Add DNS server* and enter the server address (or addresses) +- Click *Add DNS server* and enter the server address (or addresses) - * Alternatively, you can select a DNS server from the [list of known DNS providers](https://adguard-dns.io/kb/general/dns-providers/) and click *Add to AdGuard* next to it +- Alternatively, you can select a DNS server from the [list of known DNS providers](https://adguard-dns.io/kb/general/dns-providers/) and click *Add to AdGuard* next to it - * If you're using a private AdGuard DNS server, you can add it to AdGuard from the [dashboard](https://adguard-dns.io/dashboard/) +- If you're using a private AdGuard DNS server, you can add it to AdGuard from the [dashboard](https://adguard-dns.io/dashboard/) By default, *Automatic DNS* is selected. It sets a DNS server based on your AdGuard and device settings. If you have integration with AdGuard VPN or another SOCKS5 proxy enabled, it connects to *AdGuard DNS Non-filtering* or any other server you specify. In all other cases, it connects to the DNS server selected in your device settings. @@ -133,7 +133,7 @@ In this section, you can select a DNS server to resolve DNS requests, block ads This section allows you to add custom DNS filters and DNS filtering rules. You can find more filters at [filterlists.com](https://filterlists.com/). -## Firewall +## Firewall This feature helps manage Internet access for specific apps installed on your device and for the device in general. @@ -175,9 +175,9 @@ To delete a rule or app from *Custom rules*, swipe it to the left. If you see an app that shouldn't be using the Internet at all or an app that you haven't used recently, you can block its access on the fly. -## Browsing Security +## Browsing Security -Browsing Security protects you from visiting phishing and malicious websites. It also warns you about potential malware. +Browsing Security protects you from visiting phishing and malicious websites. It also warns you about potential malware. ![Browsing Security *mobile_border](https://cdn.adtidy.org/blog/new/1y6a8browsing_security.png) @@ -189,7 +189,7 @@ If you're about to visit a dangerous website, Browsing Security will show you th Browsing Security is safe: AdGuard does not know what websites you visit. It uses hash prefixes instead of URLs to check website security. -## Integration with AdGuard VPN +## Integration with AdGuard VPN AdGuard for Android creates a local VPN to filter traffic. Thus, other VPN apps cannot be used while AdGuard for Android is running. However, both AdGuard and AdGuard VPN apps have Integrated modes that let you use them together. @@ -199,7 +199,7 @@ If you disable AdGuard VPN, AdGuard will stop using it as an outbound proxy. If If you have AdGuard Ad Blocker and install AdGuard VPN, the Ad Blocker app will detect it and enable *Integration with AdGuard VPN* automatically. The same happens in reverse. Note that if you've enabled integration, you won't be able to manage app exclusions and connect to DNS servers from the AdGuard VPN app. You can specify apps to be routed through your VPN tunnel via *Settings* → *Filtering* → *Network* → *Proxy* → *Apps operating through proxy*. To select a DNS server, open AdGuard → *DNS protection* → *DNS server*. -# App management +# App management This section allows you to manage permissions and filtering settings for all apps installed on your device. @@ -207,10 +207,10 @@ This section allows you to manage permissions and filtering settings for all app By clicking an app you can manage its settings: -* Route its traffic through AdGuard -* Block ads and trackers in this app (*Filter app content*) -* Filter its HTTPS traffic (for non-browser apps, it requires [installing AdGuard's CA certificate into the system store](/adguard-for-android/solving-problems/https-certificate-for-rooted/), available on rooted devices) -* Route it through your specified proxy server or AdGuard VPN in the Integration mode +- Route its traffic through AdGuard +- Block ads and trackers in this app (*Filter app content*) +- Filter its HTTPS traffic (for non-browser apps, it requires [installing AdGuard's CA certificate into the system store](/adguard-for-android/solving-problems/https-certificate-for-rooted/), available on rooted devices) +- Route it through your specified proxy server or AdGuard VPN in the Integration mode ![App management: Chrome *mobile_border](https://cdn.adtidy.org/blog/new/nvvgochrome_management.png) @@ -218,7 +218,7 @@ From the context menu, you can also access the app's stats. ![App management: Chrome. Context menu *mobile_border](https://cdn.adtidy.org/blog/new/4z85achome_management_context_menu.png) -## Problem-free and problematic apps +## Problem-free and problematic apps By default, only problem-free apps are routed through AdGuard and filtered. These are the apps that still work properly when filtering is enabled. @@ -228,7 +228,7 @@ Problematic apps, such as Download Manager, radio, system apps with UID 1000 and To ensure proper operation of all apps installed on your device, we strongly recommend that you route only problem-free apps through AdGuard. You can see the full list of apps not recommended for filtering in *Settings* → *General* → *Advanced* → *Low-level settings* → *Protection* → *Excluded apps*. -# Statistics +# Statistics This feature gives you a complete picture of what is happening with the traffic on your device: how many requests are being sent and to which companies, how much data is being uploaded and downloaded, what requests are being blocked, and more. @@ -236,7 +236,7 @@ This feature gives you a complete picture of what is happening with the traffic The stats are categorized into different sections. -## Requests +## Requests This section shows the number of blocked ads, trackers, and the total number of requests for the selected time period: 24 hours, 7 days, 30 days, or all time. You can also filter requests by data type: mobile data, Wi-Fi, or all data combined. @@ -244,11 +244,11 @@ This section shows the number of blocked ads, trackers, and the total number of You can tap a request to view its details and add a blocking or unblocking rule. -## Data usage +## Data usage This section shows the amount of downloaded, uploaded, and saved traffic for the selected time period and data type. Tap *saved*, *uploaded*, or *downloaded* to view the graph of data usage over time. -## Apps +## Apps This section displays stats for all apps installed on your device. You can sort apps by the number of blocked ads or trackers or by the number of sent requests. @@ -258,21 +258,21 @@ Tap *View all apps* to expand the list of your apps, sorted by the number of ads If you tap an app, you can see its full stats: the requests it sends and the domains and companies it reaches out to. -## Companies +## Companies This section displays companies that your device reaches out to. What does it mean? AdGuard detects the domains your device sends requests to and determines which companies they belong to. A database of companies can be found on [GitHub](https://github.com/AdguardTeam/companiesdb). -## DNS statistics +## DNS statistics This section shows data about the requests handled by *DNS protection*. You can see the total number of requests sent and how many were blocked by AdGuard in figures and graphs. You'll also find statistics on the amount of traffic saved, downloaded, and uploaded. -## Battery usage +## Battery usage -This section displays statistics on the device resources used by AdGuard during the last 24 hours. The data may differ from your device settings. This happens because the system attributes the traffic of filtered apps to AdGuard. Thus, the device shows that AdGuard consumes more reccources than it actually does. [Read more about battery and traffic consumption issues](/adguard-for-android/solving-problems/battery/) +This section displays statistics on the device resources used by AdGuard during the last 24 hours. The data may differ from your device settings. This happens because the system attributes the traffic of filtered apps to AdGuard. Thus, the device shows that AdGuard consumes more resources than it actually does. [Read more about battery and traffic consumption issues](/adguard-for-android/solving-problems/battery/) -# Settings +## Settings -## General +### General This section helps you manage the appearance and behavior of the app: you can set the color theme and language, manage notifications, and more. If you want to help the AdGuard team detect app crashes and research usability, you can enable *Auto-report crashes* and *Send technical and interaction data*. @@ -282,7 +282,7 @@ Under *App and filter updates*, you can configure automatic filter updates and s ![Updates *mobile_border](https://cdn.adtidy.org/blog/new/hqm8kupdates.png) -### Advanced settings +#### Advanced settings *Automation* allows you to manage AdGuard via tasker apps. @@ -296,19 +296,19 @@ The *Low-level settings* section is for expert users. [Read more about low-level ![Low-level settings *mobile_border](https://cdn.adtidy.org/blog/new/n9ztplow_level.png) -## Filtering +### Filtering -This section allows you to manage HTTPS filtering settings, filters, and userscripts, and set up a proxy server. +This section allows you to manage HTTPS filtering settings, filters, and userscripts, and set up a proxy server. ![Filtering *mobile_border](https://cdn.adtidy.org/blog/new/7v5c6filtering.png) -### Network +#### Network -#### HTTPS filtering +##### HTTPS filtering To block ads and trackers on most websites and in most apps, AdGuard needs to filter their HTTPS traffic. [Read more about HTTPS filtering](/general/https-filtering/what-is-https-filtering) -##### Security certificates +###### Security certificates To manage encrypted traffic, AdGuard installs its CA certificate on your device. It's safe: the traffic is filtered locally and AdGuard verifies the security of the connection. @@ -316,24 +316,24 @@ On older versions of Android, the certificate is installed automatically. On And The CA certificate in the user store is enough to filter HTTPS traffic in browsers and some apps. However, there are apps that only trust certificates from the system store. To filter HTTPS traffic there, you need to install AdGuard's CA certificate into the system store. [Instructions](/adguard-for-android/solving-problems/https-certificate-for-rooted/) -##### HTTPS-filtered apps +###### HTTPS-filtered apps This section contains the list of apps for which AdGuard filters HTTPS traffic. Please note that the setting can be applied for all apps only if you have CA certificates both in the user store and in the system store. -##### HTTPS-filtered websites +###### HTTPS-filtered websites -This setting allows you to manage websites for which AdGuard should filter HTTPS traffic. +This setting allows you to manage websites for which AdGuard should filter HTTPS traffic. HTTPS filtering allows us to see the content of requests and responses, but we never collect or store this data. However, to increase security, we [exclude websites that contain potentially sensitive information from HTTPS filtering](/general/https-filtering/what-is-https-filtering/#financial-websites-and-websites-with-sensitive-personal-data). You can also add websites that you consider necessary to exclusions by selecting one of the modes: -* Exclude specific websites from HTTPS filtering -* Filter HTTPS traffic only on the websites added to exclusions +- Exclude specific websites from HTTPS filtering +- Filter HTTPS traffic only on the websites added to exclusions By default, we also do not filter websites with Extended Validation (EV) certificates, such as financial websites. If needed, you can enable the *Filter websites with EV certificates* option. -#### Proxy +##### Proxy You can set up AdGuard to route all your device's traffic through your proxy server. [How to set up an outbound proxy](/adguard-for-android/solving-problems/outbound-proxy) @@ -341,11 +341,11 @@ In this section, you can also set up a third-party VPN to work with AdGuard, if Under *Apps operating through proxy*, you can select apps that will route their traffic through your specified proxy. If you have *Integration with AdGuard VPN* enabled, this setting plays the role of AdGuard VPN's app exclusions: it allows you to specify apps to be routed through the AdGuard VPN tunnel. -#### Routing mode +##### Routing mode This section allows you to select the traffic filtering method. -* *Local VPN* filters traffic through a locally created VPN. This is the most reliable mode. Due to Android restrictions, it is also the only system-wide traffic filtering method available on non-rooted devices. +- *Local VPN* filters traffic through a locally created VPN. This is the most reliable mode. Due to Android restrictions, it is also the only system-wide traffic filtering method available on non-rooted devices. :::note @@ -353,11 +353,11 @@ The *Local VPN* mode doesn't allow AdGuard to be used simultaneously with other ::: -* *Automatic proxy* is an alternative traffic routing method that does not require the use of a VPN. One significant advantage is that it can be run in parallel with a VPN. This mode requires root access. +- *Automatic proxy* is an alternative traffic routing method that does not require the use of a VPN. One significant advantage is that it can be run in parallel with a VPN. This mode requires root access. -* *Manual proxy* involves setting up a proxy server on a specific port, which can then be configured in Wi-Fi settings. This mode requires root access for Android 10 and above. +- *Manual proxy* involves setting up a proxy server on a specific port, which can then be configured in Wi-Fi settings. This mode requires root access for Android 10 and above. -### Filters +#### Filters AdGuard blocks ads, trackers, and annoyances by applying rules from its filters. Most features from the *Protection* section are powered by [AdGuard filters](/general/ad-filtering/adguard-filters/#adguard-filters). If you enable *Basic protection*, it will automatically turn on the AdGuard Base filter and AdGuard Mobile Ads filter. And vice versa: if you turn off both filters, *Basic protection* will also be disabled. @@ -383,16 +383,16 @@ Userscripts are mini-programs written in JavaScript that extend the functionalit AdGuard Extra is a custom userscript that prevents websites from bypassing ad blockers and re-inserting blocked ads. -## License +## License In this section, you can find information about your license and manage it: -* Buy an AdGuard license to activate [the full version's features](#free-vs-full-version) -* Log in to your AdGuard account or enter the license key to activate your license -* Sign up to activate your 7-day trial period if you haven't used it yet -* Refresh the license status if you have recently extended its validity -* Open the AdGuard account to manage your license there -* Reset your license – for example, if you've reached device limit for this license and want to apply another one +- Buy an AdGuard license to activate [the full version's features](#free-vs-full-version) +- Log in to your AdGuard account or enter the license key to activate your license +- Sign up to activate your 7-day trial period if you haven't used it yet +- Refresh the license status if you have recently extended its validity +- Open the AdGuard account to manage your license there +- Reset your license – for example, if you've reached device limit for this license and want to apply another one ![License screen *mobile_border](https://cdn.adtidy.org/blog/new/3wyh5hlicense.png) @@ -414,11 +414,11 @@ GitHub is an alternative way to report bugs and suggest new features. [Instructi ::: -# Free vs full version +## Free vs full version AdGuard for Android has a free and a paid version. Paid features extend AdGuard's capabilities: -* *Ad blocking in apps* allows you to block ads in non-browser apps. You can specify apps for filtering in [*App management*](#app-management) +- *Ad blocking in apps* allows you to block ads in non-browser apps. You can specify apps for filtering in [*App management*](#app-management) :::note @@ -426,20 +426,20 @@ AdGuard uses its own ad-free media player to block ads in YouTube videos. To ope ::: -* *Tracking protection* increases your privacy by blocking tracking requests, online counters, UTM tags, analytics systems, and more. [Back to Tracking protection](#tracking-protection) +- *Tracking protection* increases your privacy by blocking tracking requests, online counters, UTM tags, analytics systems, and more. [Back to Tracking protection](#tracking-protection) -* *Browsing Security* warns you if you're about to visit a potentially dangerous website. [Back to Browsing Security](#browsing-security) +- *Browsing Security* warns you if you're about to visit a potentially dangerous website. [Back to Browsing Security](#browsing-security) -* *Custom filters and user rules* allow you to add your own filtering rules and third-party filters to fine-tune ad blocking. [Back to filters](#filters) +- *Custom filters and user rules* allow you to add your own filtering rules and third-party filters to fine-tune ad blocking. [Back to filters](#filters) -* *Userscripts* allow you to use AdGuard Extra to bypass ad blocker bans and install other userscripts to extend your browser's functionality. [Back to userscripts](#userscripts) +- *Userscripts* allow you to use AdGuard Extra to bypass ad blocker bans and install other userscripts to extend your browser's functionality. [Back to userscripts](#userscripts) You can get access to these features by [purchasing a license](https://adguard.com/license.html). [How to activate the license](/general/license/activation/#activating-adguard-for-android) -# Rooted vs non-rooted devices +## Rooted vs non-rooted devices Due to additional security measures of Android apps, some AdGuard features are only available on rooted devices. Here's the list of them: -* **HTTPS filtering in most apps** requires [installing a CA certificate into the system store](#security-certificates), as most apps do not trust certificates in the user store. Installing a certificate into the system store is only possible on rooted devices -* The [**Automatic proxy** routing mode](#routing-mode) requires root access due to Android's limitations on system-wide traffic filtering -* The **Manual proxy** routing mode requires root access on Android 10 and above as it's no longer possible to determine the name of the app associated with a connection filtered by AdGuard +- **HTTPS filtering in most apps** requires [installing a CA certificate into the system store](#security-certificates), as most apps do not trust certificates in the user store. Installing a certificate into the system store is only possible on rooted devices +- The [**Automatic proxy** routing mode](#routing-mode) requires root access due to Android's limitations on system-wide traffic filtering +- The **Manual proxy** routing mode requires root access on Android 10 and above as it's no longer possible to determine the name of the app associated with a connection filtered by AdGuard diff --git a/docs/adguard-for-android/solving-problems/background-work.md b/docs/adguard-for-android/solving-problems/background-work.md index e779e31ddaf..5a7ea54186c 100644 --- a/docs/adguard-for-android/solving-problems/background-work.md +++ b/docs/adguard-for-android/solving-problems/background-work.md @@ -17,9 +17,9 @@ Information on Asus devices is still far from being exhaustive so there may be m The main source of potential problems with background work on Asus devices is associated with the optimization app called Power Master. It is pre-installed and has pretty aggressive default settings, e.g. to block apps from starting and to kill background tasks when your screen turns off. To make sure apps background processing works, set up the following: -1) Go to **Mobile Manager** → **PowerMaster** → **Settings** (or **Battery-saving options**) → Uncheck **Clean up in suspend** +1. Go to **Mobile Manager** → **PowerMaster** → **Settings** (or **Battery-saving options**) → Uncheck **Clean up in suspend** -2) Go to **Mobile Manager** → **PowerMaster** → **Settings** (or **Battery-saving options**) → Uncheck **Auto-deny apps from auto starting** +1. Go to **Mobile Manager** → **PowerMaster** → **Settings** (or **Battery-saving options**) → Uncheck **Auto-deny apps from auto starting** Alternatively, instead of unchecking **Auto-deny apps from auto starting** entirely, you can go to **Settings** → **Battery-saving options** → **Auto-start manager** → **AdGuard** and uncheck it. @@ -115,7 +115,7 @@ Please enable: - **Settings** → **Additional Settings** → **Battery & Performance** → **Manage apps’ battery usage** and here: 1. Switch Power Saving Modes to "Off" -2. Choose the following options: **Saving Power in The Background** → **Choose apps** → **AdGuard** → **Background Settings** → **No restrictions** +1. Choose the following options: **Saving Power in The Background** → **Choose apps** → **AdGuard** → **Background Settings** → **No restrictions** #### App battery saver @@ -127,11 +127,11 @@ To set up AdGuard's background work for Xiaomi devices you should pay attention - Tap the **Recent tasks** button and swipe AdGuard down to make options *visible* (as shown on the screenshot): -![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomirecent.png) + ![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomirecent.png) - Tap on the **lock** icon. This will stop Xiaomi from closing AdGuard automatically. It should look like this: -![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomilocked.png) + ![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomilocked.png) - Go to **Battery** @@ -141,7 +141,7 @@ To set up AdGuard's background work for Xiaomi devices you should pay attention - Set up the following **Background settings**: -![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomirest.png) + ![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomirest.png) - Go to **Permissions** @@ -149,7 +149,7 @@ To set up AdGuard's background work for Xiaomi devices you should pay attention - Make sure that autostart function is enabled for AdGuard: -![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomiautostart.png) + ![Xiaomi *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/xiaomiautostart.png) ## Samsung @@ -161,39 +161,39 @@ On Android 11, Samsung will prevent apps (including AdGuard) from working in bac 1. Lock AdGuard in Recent -- Open **Recent apps**. -- Find AdGuard. -- Long-press the icon of the AdGuard app. + - Open **Recent apps**. + - Find AdGuard. + - Long-press the icon of the AdGuard app. -2. To keep AdGuard working properly: +1. To keep AdGuard working properly: -Go to **Settings** → **Apps** → **AdGuard** → **Battery** → **Optimize battery usage** + Go to **Settings** → **Apps** → **AdGuard** → **Battery** → **Optimize battery usage** -![Samsung](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsung-a11-optimize.png) + ![Samsung](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsung-a11-optimize.png) -In the drop-down menu, select **All**. Then find AdGuard on the list and set the state for it to **Don’t optimize** (on some models, there may be a switch that you need to toggle off). + In the drop-down menu, select **All**. Then find AdGuard on the list and set the state for it to **Don’t optimize** (on some models, there may be a switch that you need to toggle off). -![Samsung](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsung-a11-optimize-2.png) + ![Samsung](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsung-a11-optimize-2.png) -On some devices, the relevant setting may be named differently and be located in other places. Among the possible paths is: + On some devices, the relevant setting may be named differently and be located in other places. Among the possible paths is: -**Settings** → **Apps** → (⁝) menu → **Special Access** → **Optimize battery usage** → Find AdGuard on the list and uncheck it + **Settings** → **Apps** → (⁝) menu → **Special Access** → **Optimize battery usage** → Find AdGuard on the list and uncheck it -3. Disable automatic optimization. To do so: +1. Disable automatic optimization. To do so: -Open **Battery** → (⁝) menu → Choose **Automation** → Toggle off all of the settings there + Open **Battery** → (⁝) menu → Choose **Automation** → Toggle off all of the settings there -Again, the exact path may differ, for example on some devices you should go to: + Again, the exact path may differ, for example on some devices you should go to: -Phone **Settings** → **Device care** → Tap the (⁝) 3-dot menu → **Advanced** → Disable **Auto optimization** and **Optimize settings** + Phone **Settings** → **Device care** → Tap the (⁝) 3-dot menu → **Advanced** → Disable **Auto optimization** and **Optimize settings** -4. If your phone has it, disable Adaptive battery: +1. If your phone has it, disable Adaptive battery: -Open phone **Settings** → **Battery** → **More battery settings** → Toggle off **Adaptive battery** + Open phone **Settings** → **Battery** → **More battery settings** → Toggle off **Adaptive battery** -5. Disable Sleeping apps (the exact name of this setting and the path to it may vary depending on the device): +1. Disable Sleeping apps (the exact name of this setting and the path to it may vary depending on the device): -Open phone **Settings** → **Battery** → **Background usage limits** → Disable **Put unused apps to sleep** + Open phone **Settings** → **Battery** → **Background usage limits** → Disable **Put unused apps to sleep** ### Android 9 & 10 @@ -203,41 +203,41 @@ Open phone **Settings** → **Battery** → **Background usage limits** → Disa - Remove AdGuard from Sleeping apps. To do that: -1. Go to **Phone settings** → **Device care** + 1. Go to **Phone settings** → **Device care** -![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung1en.png) + ![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung1en.png) -2. Tap **Battery** + 1. Tap **Battery** -![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung2en.png) + ![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung2en.png) -3. Tap the **3-dot menu** → **Settings** + 1. Tap the **3-dot menu** → **Settings** -![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung3en.png) + ![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung3en.png) -4. Tap **Sleeping apps** + 1. Tap **Sleeping apps** -![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung45en.png) + ![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung45en.png) -5. **Wake up** AdGuard using the trashcan icon + 1. **Wake up** AdGuard using the trashcan icon -![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung6en.png) + ![Samsung *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/samsung6en.png) ### Old Samsung devices For early Samsung devices, there is no huge need for setting up the background operation, but if in your case the AdGuard app is getting closed or disappears from the recent tasks after a while, do the following: - - Tap the **Recent tasks** button, tap the **Additional settings** icon. It should look like this: +- Tap the **Recent tasks** button, tap the **Additional settings** icon. It should look like this: - ![Samsung settings *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsungoptions.png) + ![Samsung settings *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsungoptions.png) - - Tap **Lock Apps**: +- Tap **Lock Apps**: - ![Samsung settings *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsunglockapps.png) + ![Samsung settings *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsunglockapps.png) - - Tap on the lock icon +- Tap on the lock icon - ![Samsung settings *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsunglock.png) + ![Samsung settings *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/samsunglock.png) ## Huawei @@ -249,21 +249,21 @@ This feature may or may not be available for all devices or may be labeled diffe 1. Go to phone **Settings** → **Battery** → **App launch** -![Huawei *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/huawei1en.png) + ![Huawei *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/huawei1en.png) -2. Turn off **Manage all automatically** +1. Turn off **Manage all automatically** -![Huawei *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/huawei2en.png) + ![Huawei *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/huawei2en.png) -3. Set AdGuard to **Manage manually** and enable all toggles. +1. Set AdGuard to **Manage manually** and enable all toggles. -![Huawei *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/huawei3en.png) + ![Huawei *mobile_border](https://cdn.adtidy.org/public/Adguard/screenshots/android/huawei3en.png) -4. Disable **Startup manager** that prevents apps from running automatically after the phone starts up. +1. Disable **Startup manager** that prevents apps from running automatically after the phone starts up. -Go to **Settings** → **All** → **Startup manager** → Toggle AdGuard off + Go to **Settings** → **All** → **Startup manager** → Toggle AdGuard off -Also for reliable background processes you may need to uninstall **PowerGenie** as detailed below. + Also for reliable background processes you may need to uninstall **PowerGenie** as detailed below. ### EMUI 9+ devices and PowerGenie @@ -289,15 +289,15 @@ Unfortunately, this is a system app that can only be fully uninstalled using ADB It is not confirmed, but it might be possible to just disable PowerGenie in **Phone settings** → **Apps**. If this setting is present in your device's settings, you may skip the following steps. However, it would need to be re-applied every time you reboot your device. If there is no such setting, follow this instruction: -1) [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; +1. [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; -2) Connect your phone with a data cable; +1. Connect your phone with a data cable; -3) Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); +1. Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); -4) Enable **USB debugging** within Developer options on your phone; +1. Enable **USB debugging** within Developer options on your phone; -5) Run the following commands on your computer: +1. Run the following commands on your computer: ```adb shell pm uninstall --user 0 com.huawei.powergenie``` @@ -307,22 +307,22 @@ If AdGuard keeps getting killed, also try running ```adb shell pm stopservice hwPfwService``` -### EMUI 6+ devices (and some EMUI 5 devices): +### EMUI 6+ devices (and some EMUI 5 devices) - **Phone settings** → **Advanced Settings** → **Battery manager** → **Power plan** set to **Performance**; - **Phone Settings** → **Advanced Settings** → **Battery Manager** → **Protected apps** — set AdGuard as **Protected**; - **Phone Settings** → **Apps** → **Your app** → **Battery** → **Power-intensive prompt** `[uncheck]` and **Keep running after screen off** `[check]`; - **Phone settings** → **Apps** → **Advanced (At the bottom)** → **Ignore optimizations** → Press Allowed → **All apps** → Find AdGuard on the list and set to **Allow**. -#### Huawei P9 Plus: +#### Huawei P9 Plus Open device settings → **Apps** → **Settings** → **Special access** → choose **Ignore battery optimization** → select **Allow** for AdGuard. -### Huawei P20, Huawei Honor 9 Lite and Huawei Mate 9 Pro: +### Huawei P20, Huawei Honor 9 Lite and Huawei Mate 9 Pro Open device settings → **Battery** → **App launch** → set AdGuard to **Manage manually** and make sure everything is turned on. -### Huawei P20, Huawei P20 Lite, Huawei Mate 10: +### Huawei P20, Huawei P20 Lite, Huawei Mate 10 **Phone settings** → **Battery** → **App launch** → set AdGuard to **Manage manually** and make sure everything is turned on. Also for reliable background processes you may need to uninstall PowerGenie as described above. @@ -330,13 +330,13 @@ Open device settings → **Battery** → **App launch** → set AdGuard to **Man Old Huawei devices are the easiest to set up, it is enough to perform two simple steps to lock AdGuard in the background so it won't be terminated by battery saving or background killer process. - - Tap the **Recent tasks** button: +- Tap the **Recent tasks** button: - ![Huawei recent apps *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/huaweirecentapps.jpeg) + ![Huawei recent apps *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/huaweirecentapps.jpeg) - - Tap on the lock icon: +- Tap on the lock icon: - ![Huawei lock *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/huaweilock.jpeg) + ![Huawei lock *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/huaweilock.jpeg) Besides, to set up the background work of AdGuard more effectively, you should open device settings and do the following: @@ -359,49 +359,49 @@ Nokia devices running Android 9+ have **The Evenwell Power saver** disabled, whi ### Nokia 1 (Android Go) -1) [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; +1. [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; -2) Connect your phone with a data cable; +1. Connect your phone with a data cable; -3) Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); +1. Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); -4) Enable **USB debugging** within Developer options on your phone; +1. Enable **USB debugging** within Developer options on your phone; -5) Uninstall the **com.evenwell.emm** package via the following adb commands: +1. Uninstall the **com.evenwell.emm** package via the following adb commands: -`adb shell` -`pm uninstall --user 0 com.evenwell.emm` + `adb shell` + `pm uninstall --user 0 com.evenwell.emm` ### Nokia 3.1 and 5.1 On these devices there is a task killer called **DuraSpeed** that terminates all background apps. It can't be uninstalled or disabled by regular means. These actions require ADB, and even then, when disabled, DuraSpeed will re-enable itself on reboot. You need a tasker app like [MacroDroid](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid) for automatic DuraSpeed's disabling. -1) [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; +1. [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; -2) Connect your phone with a data cable; +1. Connect your phone with a data cable; -3) Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); +1. Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); -4) Enable **USB debugging** within Developer options on your phone; +1. Enable **USB debugging** within Developer options on your phone; -5) Grant MacroDroid (or your choice of automation app) the ability to write to the global settings store by entering this command: +1. Grant MacroDroid (or your choice of automation app) the ability to write to the global settings store by entering this command: -```adb shell pm grant com.arlosoft.macrodroid android.permission.WRITE_SECURE_SETTINGS``` + ```adb shell pm grant com.arlosoft.macrodroid android.permission.WRITE_SECURE_SETTINGS``` -6) Create a task triggered at **Device Boot** that performs the following: +1. Create a task triggered at **Device Boot** that performs the following: -- System Setting: type **Global**, name `setting.duraspeed.enabled`, value **-1** -- System Setting: type **System**, name `setting.duraspeed.enabled`, value **-1** -- System Setting: type **Global**, name `setting.duraspeed.enabled`, value **0** -- System Setting: type **System**, name `setting.duraspeed.enabled`, value **0** + - System Setting: type **Global**, name `setting.duraspeed.enabled`, value **-1** + - System Setting: type **System**, name `setting.duraspeed.enabled`, value **-1** + - System Setting: type **Global**, name `setting.duraspeed.enabled`, value **0** + - System Setting: type **System**, name `setting.duraspeed.enabled`, value **0** -![Nokia tasker *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/nokia_tasker.png) + ![Nokia tasker *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/nokia_tasker.png) -:::note + :::note -You need both **Global** and **System** type settings. The screenshot shows only Global as an example. + You need both **Global** and **System** type settings. The screenshot shows only Global as an example. -::: + ::: ### Other Nokia models @@ -415,18 +415,18 @@ From now on, AdGuard should work normally and use the standard Android battery o An alternative, more permanent solution for more tech-savvy users: -1) [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; +1. [Install ADB](https://www.xda-developers.com/install-adb-windows-macos-linux/) on your computer; -2) Connect your phone with a data cable; +1. Connect your phone with a data cable; -3) Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); +1. Enable [Developer options](https://developer.android.com/studio/debug/dev-options.html); -4) Enable **USB debugging** within Developer options on your phone; +1. Enable **USB debugging** within Developer options on your phone; -5) Uninstall the **com.evenwell.powersaving.g3** package via the following adb commands: +1. Uninstall the **com.evenwell.powersaving.g3** package via the following adb commands: -`adb shell` -`pm uninstall --user 0 com.evenwell.powersaving.g3` + `adb shell` + `pm uninstall --user 0 com.evenwell.powersaving.g3` ## Oppo @@ -446,23 +446,23 @@ Devices with OxygenOS on board are the most problematic, with its OS-specific ca ### Locking the app - - Go to **Settings** +- Go to **Settings** - - **Battery** → **Battery optimization** +- **Battery** → **Battery optimization** - - Find AdGuard +- Find AdGuard - - Tap on it and select **Don't optimize** option +- Tap on it and select **Don't optimize** option - - Tap **Done** to save +- Tap **Done** to save - - Open recent apps menu (as showed on this screenshot): +- Open recent apps menu (as showed on this screenshot): - ![Onepluslock *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/PicturesEN/android/onepluslock.png) + ![Onepluslock *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/PicturesEN/android/onepluslock.png) - Lock AdGuard app: -![Oneplusdots *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/PicturesEN/android/oneplusdots.png) + ![Oneplusdots *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/PicturesEN/android/oneplusdots.png) :::caution @@ -472,9 +472,9 @@ On some OnePlus phones there is also a thing called App Auto-Launch and Deep Opt ### Battery optimization - - Open device settings → **Battery** → **Battery optimization** → switch to the **All apps** list (top menu) → choose AdGuard → activate **Don’t optimize** +- Open device settings → **Battery** → **Battery optimization** → switch to the **All apps** list (top menu) → choose AdGuard → activate **Don’t optimize** - - Open device settings → **Battery** → **Battery Optimization** → (⁝) three-dot menu → **Advanced Optimization** → Disable Deep Optimization +- Open device settings → **Battery** → **Battery Optimization** → (⁝) three-dot menu → **Advanced Optimization** → Disable Deep Optimization ### App Auto-Launch @@ -524,14 +524,14 @@ Wiko devices are problematic in terms of non-standard background process optimiz Android stock OS normally does not conflict with apps working in the background, but if you are facing any issues you will need to switch on the **Always-on VPN** mode. - - Go to **Settings** → **Network and Internet** +- Go to **Settings** → **Network and Internet** - ![Stocknetwork *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/stocknetwork.png) + ![Stocknetwork *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/stocknetwork.png) - - Tap **VPN** and choose **AdGuard** +- Tap **VPN** and choose **AdGuard** - ![Stockvpn *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/stockvpn.png) + ![Stockvpn *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/stockvpn.png) - - Set up **Always-on VPN** mode +- Set up **Always-on VPN** mode - ![Stockadguard *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/stockadguard.png) + ![Stockadguard *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/background-work/stockadguard.png) diff --git a/docs/adguard-for-android/solving-problems/battery.md b/docs/adguard-for-android/solving-problems/battery.md index 2caeb9bc9f5..9abea6fb887 100644 --- a/docs/adguard-for-android/solving-problems/battery.md +++ b/docs/adguard-for-android/solving-problems/battery.md @@ -29,31 +29,31 @@ First, let us lay down a bit of theory and links with necessary data. 1. Android derives traffic consumption judging on so-called Power Profile, which is given by every manufacturer: -2. Main part of Power Profile is a set of values in mAh which define battery consumption for every component of the device: +1. Main part of Power Profile is a set of values in mAh which define battery consumption for every component of the device: -For example, from the table above: + For example, from the table above: -_wifi.active=_ 31mA additional consumption in mAh caused by WiFi data exchange. + *wifi.active=* 31mA additional consumption in mAh caused by WiFi data exchange. -_radio.active=_ 100-300mA additional consumption in mAh caused by data exchange over Mobile network. + *radio.active=* 100-300mA additional consumption in mAh caused by data exchange over Mobile network. -_cpu.active=_ 100-200mA additional consumption in mAh caused by CPU work. + *cpu.active=* 100-200mA additional consumption in mAh caused by CPU work. -3. AdGuard by itself almost doesn't consume any traffic, so for the sake of evaluating battery resource consumption let's get rid of 'Mobile/WiFi packets' and stcik to 'CPU'. +1. AdGuard by itself almost doesn't consume any traffic, so for the sake of evaluating battery resource consumption let's get rid of 'Mobile/WiFi packets' and stcik to 'CPU'. -Formulа to calculate the consumption: + Formula to calculate the consumption: ->"CPU TIME (ms)" X "cpu.active" / (60 * 60 * 1000) = "POWER USE mAh" + > "CPU TIME (ms)" X "cpu.active" / (60 *60* 1000) = "POWER USE mAh" -Let's put real numbers into this formula. + Let's put real numbers into this formula. -Let's take _CPU total_ from the second screenshot and convert into milliseconds: 506000 + Let's take *CPU total* from the second screenshot and convert into milliseconds: 506000 -A coefficient _cpu.active_ for 2GHz will be roughly equal to 225mAh + A coefficient *cpu.active* for 2GHz will be roughly equal to 225mAh -Final result + Final result: ->506000 * 225 / (60 * 60 * 1000) = 31,625mAh + > 506000 *225 / (60* 60 * 1000) = 31,625mAh ### Conclusion diff --git a/docs/adguard-for-android/solving-problems/compatibility-issues.md b/docs/adguard-for-android/solving-problems/compatibility-issues.md index db8bb9afa5c..2e6b9b6ee17 100644 --- a/docs/adguard-for-android/solving-problems/compatibility-issues.md +++ b/docs/adguard-for-android/solving-problems/compatibility-issues.md @@ -13,8 +13,8 @@ This article covers AdGuard for Android, a multifunctional ad blocker that prote Other VPN apps are incompatible with AdGuard running in the Local VPN filtering mode since you cannot have two active VPNs at the same time. To solve this problem we suggest you: -* use [AdGuard VPN](https://adguard-vpn.com/welcome.html) — it has Integrated mode that allows two apps to operate seamlessly -* use AdGuard in Local HTTP Proxy mode +- use [AdGuard VPN](https://adguard-vpn.com/welcome.html) — it has Integrated mode that allows two apps to operate seamlessly +- use AdGuard in Local HTTP Proxy mode :::caution @@ -22,13 +22,13 @@ On Android 10 and later, the 'manual' HTTP proxy mode is no longer supported. ::: -* configure your VPN app to to act as an outbound proxy and set up a local outbound proxy using the parameters from the third-party app. To do this, a third-party VPN app must support SOCKS4/SOCKS5 mode. For example, AdGuard can be automatically configured with 'Orbot: Proxy with Tor'. +- configure your VPN app to to act as an outbound proxy and set up a local outbound proxy using the parameters from the third-party app. To do this, a third-party VPN app must support SOCKS4/SOCKS5 mode. For example, AdGuard can be automatically configured with 'Orbot: Proxy with Tor'. ## Private DNS The Private DNS feature was introduced in Android Pie. Before version Q, Private DNS didn't break AdGuard DNS filtering logic and the DNS forwarding through AdGuard worked normally. But starting from version Q, the presence of Private DNS forces apps to redirect traffic through the system resolver instead of AdGuard. See Android [devs blog](https://android-developers.googleblog.com/2018/04/dns-over-tls-support-in-android-p.html) for more details. -* To solve the problem with Private DNS, use the `$network` rule +- To solve the problem with Private DNS, use the `$network` rule Some device manufacturers keep Private DNS settings hidden and set 'Automatic' mode as a default one. Thus, disabling Private DNS is impossible but we can make the system think that the upstream is not valid by blocking it with a `$network` rule. For instance, if the system uses Google DNS by default, we can add rules `|8.8.4.4^$network` and `|8.8.8.8^$network` to block Google DNS. @@ -38,7 +38,7 @@ Some device manufacturers keep Private DNS settings hidden and set 'Automatic' m To be able to filter HTTPS traffic, AdGuard requires the user to add a certificate to the device's trusted user certificates. Unfortunately, UC-family browsers don't trust user certificates, so AdGuard cannot perform HTTPS filtering there. -* To solve this problem, move the certificate to the system certificate store +- To solve this problem, move the certificate to the system certificate store :::caution @@ -50,16 +50,16 @@ Requires root access. AdGuard cannot filter its traffic when operating in **Manual proxy mode** because this browser ignores system proxy settings. -* Use the **Local VPN** filtering mode to solve this problem +- Use the **Local VPN** filtering mode to solve this problem ### Opera mini: Opera mini, Opera mini with Yandex Opera mini drives traffic through a compression proxy by default and AdGuard is not able to decompress and filter it at the same time. -* There is no solution at this moment +- There is no solution at this moment ### Puffin Browser: Puffin Browser, Puffin Browser Pro Puffin Browser drives traffic through a compression proxy by default and AdGuard is not able to decompress and filter it at the same time. -* There is no solution at this moment +- There is no solution at this moment diff --git a/docs/adguard-for-android/solving-problems/firefox-certificates.md b/docs/adguard-for-android/solving-problems/firefox-certificates.md index 9b384479115..bd110065ca1 100644 --- a/docs/adguard-for-android/solving-problems/firefox-certificates.md +++ b/docs/adguard-for-android/solving-problems/firefox-certificates.md @@ -22,16 +22,18 @@ This method works in Firefox for Android version 90.0 and later. To make Firefox trust the AdGuard certificate, do the following: 1. Run the browser. -2. Go to **Settings** → **About Firefox**. -![About Firefox *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/firefox-certificates/ff_nightly_about_en.jpeg) +1. Go to **Settings** → **About Firefox**. -3. Tap the Firefox logo five times. -4. Navigate to **Settings** → **Secret Settings**. + ![About Firefox *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/firefox-certificates/ff_nightly_about_en.jpeg) -![Secret Settings *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/firefox-certificates/ff_nightly_secret.jpeg) +1. Tap the Firefox logo five times. -5. Toggle **Use third party CA certificates**. +1. Navigate to **Settings** → **Secret Settings**. + + ![Secret Settings *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/firefox-certificates/ff_nightly_secret.jpeg) + +1. Toggle **Use third party CA certificates**. ### Method 2 @@ -43,31 +45,43 @@ This method will only work on **rooted** devices. 1. [Install and configure](https://www.xda-developers.com/install-adb-windows-macos-linux/) adb; On the Windows platform, **Samsung** owners may need to install [this utility](https://developer.samsung.com/mobile/android-usb-driver.html). -2. Activate the **developer mode** and enable **USB debugging**: + +1. Activate the **developer mode** and enable **USB debugging**: + - Open the **Settings** app on your phone; - Go to **System** section (last item in the settings menu). In this section, find the sub-item **About phone**; - Tap the **Build number** line 7 times. After that, you will receive a notification that **You are now a developer** (If necessary, enter an unlock code for the device); - Open **System Settings** → **Developer Options** → Scroll down and enable **USB debugging** → Confirm debugging is enabled in the window **Allow USB debugging** after reading the warning carefully. -3. Install the [Firefox](https://www.mozilla.org/en-US/firefox/releases/) browser (release version); -4. Open the **AdGuard settings** (gear icon in the bottom right corner) → **Filtering** → **Network** → **HTTPS filtering** → **Security certificate** → **Instructions for Firefox** → **Install for old versions**; -5. Open the folder `data/data/org.mozilla.firefox/files/mozilla` using `adb shell su` and `cd data/data/...`, then browse to the folder named `xxxxxxx.default` and memorize its name; -6. In the specified folder we are interested in two files: + +1. Install the [Firefox](https://www.mozilla.org/en-US/firefox/releases/) browser (release version); + +1. Open the **AdGuard settings** (gear icon in the bottom right corner) → **Filtering** → **Network** → **HTTPS filtering** → **Security certificate** → **Instructions for Firefox** → **Install for old versions**; + +1. Open the folder `data/data/org.mozilla.firefox/files/mozilla` using `adb shell su` and `cd data/data/...`, then browse to the folder named `xxxxxxx.default` and memorize its name; + +1. In the specified folder we are interested in two files: + - `cert9.db` - `key4.db` -7. We need to move these files to a folder of the browser where the security certificate issue occurred: -- `data/data/org.mozilla./files/mozilla/yyyyyy.default`. -8. The full command will look like this: + +1. We need to move these files to a folder of the browser where the security certificate issue occurred: + + - `data/data/org.mozilla./files/mozilla/yyyyyy.default`. + +1. The full command will look like this: + - `adb shell su` - `cp -R data/data/org.mozilla.firefox/files/mozilla/xxxxxxxxxx.default/cert9.db data/data/org.mozilla./files/mozilla/yyyyyyyyyy.default` - `cp -R data/data/org.mozilla.firefox/files/mozilla/xxxxxxxxxx.default/key4.db data/data/org.mozilla./files/mozilla/yyyyyyyyyy.default` -In case you received the system notification **permission denied**, you should first move the specified files to the permission-free directory. And after that you should move them to the necessary folder in your Firefox browser. + In case you received the system notification **permission denied**, you should first move the specified files to the permission-free directory. And after that you should move them to the necessary folder in your Firefox browser. + + The full command should look something like this: -The full command should look something like this: -- `adb shell su` -- `cp -R data/data/org.mozilla.firefox/files/mozilla/xxxxxxxx.default/cert9.db sdcard/Download ` -- `cp -R data/data/org.mozilla.firefox/files/mozilla/xxxxxxxxx.default/key4.db sdcard/Download ` -- `cp -R sdcard/Download/cert9.db data/data/org.mozilla./files/mozilla/yyyyyyyyyy.default` -- `cp -R sdcard/Download/key4.db data/data/org.mozilla./files/mozilla/yyyyyyyyyy.default` + - `adb shell su` + - `cp -R data/data/org.mozilla.firefox/files/mozilla/xxxxxxxx.default/cert9.db sdcard/Download` + - `cp -R data/data/org.mozilla.firefox/files/mozilla/xxxxxxxxx.default/key4.db sdcard/Download` + - `cp -R sdcard/Download/cert9.db data/data/org.mozilla./files/mozilla/yyyyyyyyyy.default` + - `cp -R sdcard/Download/key4.db data/data/org.mozilla./files/mozilla/yyyyyyyyyy.default` -If `adb shell su` does not work, you should try `adb shell` initially, and then `su`. + If `adb shell su` does not work, you should try `adb shell` initially, and then `su`. diff --git a/docs/adguard-for-android/solving-problems/har.md b/docs/adguard-for-android/solving-problems/har.md index 209caf564e0..33a558c4568 100644 --- a/docs/adguard-for-android/solving-problems/har.md +++ b/docs/adguard-for-android/solving-problems/har.md @@ -10,10 +10,13 @@ This article covers AdGuard for Android, a multifunctional ad blocker that prote ::: ## What are HAR files? + The HAR (HTTP ARchive) format is a JSON-formatted archive file for logging of a web browser's interaction with a site. The specifications of HAR format defines an archival data for HTTP transactions that used by a browser to export detailed information about web pages it loads. More detailed description of HAR file format and its specification you can find at [softwareishard.com](http://www.softwareishard.com/blog/har-12-spec/) website. ## How to get HAR files + Sometimes we need to analyze it to block specific ads that are difficult to reproduce for some reason. To get HAR files follow these steps: + 1. Open AdGuard and go to **Settings** (⚙ icon in the lower right corner). 2. Tap **General** →**Advanced** → **Low-level settings**. 3. Scroll down and activate **Capture HAR** in the Filtering section. @@ -31,6 +34,8 @@ Our support team will process your ticket much faster if you specify the HelpDes ::: ## How to analyze HAR files + Here are some sources that we can recommend to analyze HAR files: -* [HTTP Archive Viewer master](https://gitgrimbo.github.io/harviewer/master/) is a HAR analyzer tool, visualizes HTTP Archive (HAR) log files created by HTTP tracking tools. -* [Fiddler](https://www.telerik.com/fiddler) is a web debugging proxy, lets you capture, inspect, monitor all HTTP(S) traffic between your computer and the Internet, mock requests, and diagnose network issues. + +- [HTTP Archive Viewer master](https://gitgrimbo.github.io/harviewer/master/) is a HAR analyzer tool, visualizes HTTP Archive (HAR) log files created by HTTP tracking tools. +- [Fiddler](https://www.telerik.com/fiddler) is a web debugging proxy, lets you capture, inspect, monitor all HTTP(S) traffic between your computer and the Internet, mock requests, and diagnose network issues. diff --git a/docs/adguard-for-android/solving-problems/https-certificate-for-rooted.md b/docs/adguard-for-android/solving-problems/https-certificate-for-rooted.md index 02555e5a7aa..536b9e85b5f 100644 --- a/docs/adguard-for-android/solving-problems/https-certificate-for-rooted.md +++ b/docs/adguard-for-android/solving-problems/https-certificate-for-rooted.md @@ -15,48 +15,47 @@ On non-rooted devices CA certificates can be installed to the **User store**. On However, on rooted devices, you can install the certificate to the **System store** and allow HTTPS filtering of other apps' traffic too. - Here's how to do that. ## How to install AdGuard's Certificate to System store (on a rooted device) 1. Enable HTTPS filtering in AdGuard for Android and save AdGuard's certificate to the User store (use [this instruction](../../overview#https-filtering) if needed) -> From AdGuard for Android v4.1 and after users can install two certificates to the User store, which will help to filter websites in Chrome browser. + From AdGuard for Android v4.1 and after users can install two certificates to the User store, which will help to filter websites in Chrome browser. -2. Go to **AdGuard app** → **Menu** (≡) → **Settings** → **Network** → **HTTPS filtering** → **Security certificate** → tap “**Copy to the system store**” +1. Go to **AdGuard app** → **Menu** (≡) → **Settings** → **Network** → **HTTPS filtering** → **Security certificate** → tap “**Copy to the system store**” -That is enough for older versions of Magisk. + That is enough for older versions of Magisk. -However, if you have a newer version, you will get this message: + However, if you have a newer version, you will get this message: -> Unable to copy the certificate to the system store. Try using “AdGuard Certificate” module. + > Unable to copy the certificate to the system store. Try using “AdGuard Certificate” module. -In that case, proceed to steps below: + In that case, proceed to steps below: -3. Go to **Magisk** → **Settings** +1. Go to **Magisk** → **Settings** -![Open Magisk settings *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-1.png) + ![Open Magisk settings *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-1.png) -4. Enable **Zygisk** +1. Enable **Zygisk** -![Enable Zygisk *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-2.png) + ![Enable Zygisk *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-2.png) -![Go back to Magisk main screen *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-3.png) + ![Go back to Magisk main screen *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-3.png) -5. Download the `.zip` file (of “AdGuard Certificate” module) from the [latest release on GitHub](https://github.com/AdguardTeam/adguardcert/releases/latest/) +1. Download the `.zip` file (of “AdGuard Certificate” module) from the [latest release on GitHub](https://github.com/AdguardTeam/adguardcert/releases/latest/) -6. Go to **Magisk** → **Modules** → **Install from storage** and select the downloaded `.zip` file +1. Go to **Magisk** → **Modules** → **Install from storage** and select the downloaded `.zip` file -![Open Magisk modules *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-4.png) + ![Open Magisk modules *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-4.png) -![Install from storage *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-5.png) + ![Install from storage *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-5.png) -![Select AdGuard certificate module *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-6.png) + ![Select AdGuard certificate module *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-6.png) -7. Reboot +1. Reboot -![Reboot the device *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-7.png) + ![Reboot the device *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/solving_problems/https-certificate-for-rooted/magisk-module-7.png) If a new version of "AdGuard certificate" module comes out, repeat steps 3-7 to update the module. diff --git a/docs/adguard-for-android/solving-problems/log.md b/docs/adguard-for-android/solving-problems/log.md index a0b4f653f2c..dd0ab8a8532 100644 --- a/docs/adguard-for-android/solving-problems/log.md +++ b/docs/adguard-for-android/solving-problems/log.md @@ -9,21 +9,19 @@ This article covers AdGuard for Android, a multifunctional ad blocker that prote ::: -In this article, we'll guide you through the process of collecting debug logs, an essential troubleshooting step for solving complex issues that may potentially arise. Debug logs provide detailed insight into the inner workings of AdGuard for Android. If the AdGuard support team askes you to provide debug logs, simply follow these instructions. +In this article, we'll guide you through the process of collecting debug logs, an essential troubleshooting step for solving complex issues that may potentially arise. Debug logs provide detailed insight into the inner workings of AdGuard for Android. If the AdGuard support team asks you to provide debug logs, simply follow these instructions. ### Collecting debug log To collect **debug** log and send it to us you need to perform following steps: 1. Go to *Settings* → *General* → *Advanced*. -2. Tap *Logging level* and set it to *Debug*. -3. Reproduce the problem and try to remember the exact time it occurred. -4. Wait a while, then return to *Settings* and choose the *Support* tab. Tap *Report a bug* and complete the required fields. Don't forget to check the *Send app logs and system info* checkbox. Finally tap *Send*. +1. Tap *Logging level* and set it to *Debug*. +1. Reproduce the problem and try to remember the exact time it occurred. +1. Wait a while, then return to *Settings* and choose the *Support* tab. Tap *Report a bug* and complete the required fields. Don't forget to check the *Send app logs and system info* checkbox. Finally tap *Send*. If you're interested in following the resolution of your issue and engaging in a dialogue with the developers, we recommend that you take the following steps after completing the first three: -4. Wait a while, then return to the *Advanced* screen and export logs via *Export logs and system info*. Then report a bug on GitHub by following these [instructions](/guides/report-bugs.md). -5. After creating an issue on GitHub, send the log file to devteam@adguard.com. Include the time of the bug and attach a link to your issue or its number (it appears as #number next to the title). +1. Wait a while, then return to the *Advanced* screen and export logs via *Export logs and system info*. Then report a bug on GitHub by following these [instructions](/guides/report-bugs.md). +1. After creating an issue on GitHub, send the log file to devteam@adguard.com. Include the time of the bug and attach a link to your issue or its number (it appears as #number next to the title). Alternatively, you can upload the log file to Google Drive and send it to devteam@adguard.com. Add the file link to your GitHub issue - - diff --git a/docs/adguard-for-android/solving-problems/logcat.md b/docs/adguard-for-android/solving-problems/logcat.md index 0f1125c84f0..4a273e535c4 100644 --- a/docs/adguard-for-android/solving-problems/logcat.md +++ b/docs/adguard-for-android/solving-problems/logcat.md @@ -9,7 +9,7 @@ This article covers AdGuard for Android, a multifunctional ad blocker that prote ::: -Sometimes a regular log may not be sufficient to identify the origin of the problem. In such cases a system log is needed. Below are instructions on how to collect and get it: via Developer options and Logcat. +Sometimes a regular log may not be sufficient to identify the origin of the problem. In such cases a system log is needed. Below are instructions on how to collect and get it: via Developer options and Logcat. ## Capture a bug report from a device @@ -17,31 +17,31 @@ To get a bug report directly from your device, do the following: 1. Be sure you have [Developer options](https://developer.android.com/studio/run/device.html#developer-device-options) enabled. -2. In **Developer options**, tap **Take bug report**. +1. In **Developer options**, tap **Take bug report**. -![Bug report *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/Android3.1/bugreporten.png) + ![Bug report *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/Android3.1/bugreporten.png) -3. Select the type of bug report you want and tap **Report**. +1. Select the type of bug report you want and tap **Report**. -:::note + :::note -After a moment, you will see a notification that the bug report is ready (see Figure 2). + After a moment, you will see a notification that the bug report is ready (see Figure 2). -::: + ::: -![Bug report *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/Android3.1/bugreporteen.png) + ![Bug report *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/Android3.1/bugreporteen.png) -4. To share the bug report, tap the notification. +1. To share the bug report, tap the notification. -![Bug report *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/Android3.1/bugreport3en.png) + ![Bug report *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/Android3.1/bugreport3en.png) -5. Send this log to our support team. +1. Send this log to our support team. -:::note + :::note -Our support team will process your ticket much faster if you specify the HelpDesk ticket number or the GitHub issue number in your message to support. + Our support team will process your ticket much faster if you specify the HelpDesk ticket number or the GitHub issue number in your message to support. -::: + ::: ## Capture a bug report via Logcat @@ -51,14 +51,13 @@ Follow this instruction: **Part #1: prepare the device** -1. Switch device to the developer mode. To do this: go to - **Settings** → **About** → tap **Build Number** 7 times. +1. Switch device to the developer mode. To do this: go to **Settings** → **About** → tap **Build Number** 7 times. -2. Go to **Developer Options**. +1. Go to **Developer Options**. -3. Enable **USB debugging**. +1. Enable **USB debugging**. -4. Increase **Logger buffer** sizes to 4 MB per log buffer. +1. Increase **Logger buffer** sizes to 4 MB per log buffer. 4 MB should be enough for storing the logs we need until you're able to do the second part (getting the log from the device); @@ -68,39 +67,39 @@ It is important to reproduce the problem after you're done with the first part. 1. Reproduce the problem. -2. Remember/write down the date and time of reproduction and include it in the email to our support later. +1. Remember/write down the date and time of reproduction and include it in the email to our support later. **Part #3: get the log** 1. Connect your device to a PC with a USB cable. -2. Download [Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools#downloads). Choose the appropriate download link for your OS from the Downloads section. Once you tap the link, a ZIP file will be downloaded. You can extract the ADB (Android Debug Bridge) files from the ZIP file and store them wherever you want. +1. Download [Android SDK Platform Tools](https://developer.android.com/studio/releases/platform-tools#downloads). Choose the appropriate download link for your OS from the Downloads section. Once you tap the link, a ZIP file will be downloaded. You can extract the ADB (Android Debug Bridge) files from the ZIP file and store them wherever you want. -3. Test whether ADB is working properly: connect your Android device to your computer using a USB cable, open the Command Prompt, PowerShell or Terminal and run the following command: +1. Test whether ADB is working properly: connect your Android device to your computer using a USB cable, open the Command Prompt, PowerShell or Terminal and run the following command: -`adb devices` + `adb devices` -An example of a successful result: + An example of a successful result: -![Step 3](https://cdn.adtidy.org/content/kb/ad_blocker/android/logcat/logcat_step-3.png) + ![Step 3](https://cdn.adtidy.org/content/kb/ad_blocker/android/logcat/logcat_step-3.png) -4. Then run the following command (insert the relevant path): +1. Then run the following command (insert the relevant path): -`adb logcat -v threadtime -d > C:\Program Files\platform-tools\logs.txt` + `adb logcat -v threadtime -d > C:\Program Files\platform-tools\logs.txt` -Email the created `txt` file as well as the time the problem was reproduced (from part #2) to our support team at support@adguard.com. + Email the created `txt` file as well as the time the problem was reproduced (from part #2) to our support team at support@adguard.com. -### Alternative way for ROOT users: +### Alternative way for ROOT users 1. Download and run [Logcat](https://play.google.com/store/apps/details?id=com.pluscubed.matlog). -2. Choose **Record** in the menu. Choose a name for a log file or just press **OK**. Now you can press **Home** button, CatLog will continue recording the log in background. +1. Choose **Record** in the menu. Choose a name for a log file or just press **OK**. Now you can press **Home** button, CatLog will continue recording the log in background. -3. Reproduce the issue. +1. Reproduce the issue. -4. Open CatLog and press **Stop record** in the menu. +1. Open CatLog and press **Stop record** in the menu. -5. Send this log to our support team. +1. Send this log to our support team. :::note diff --git a/docs/adguard-for-android/solving-problems/low-level-settings.md b/docs/adguard-for-android/solving-problems/low-level-settings.md index 20cabbedf52..425d705f147 100644 --- a/docs/adguard-for-android/solving-problems/low-level-settings.md +++ b/docs/adguard-for-android/solving-problems/low-level-settings.md @@ -45,18 +45,18 @@ Bootstrap DNS for DoH, DoT, and DoQ servers. The *Automatic DNS* - the system DN Here you can specify the response type for domains blocked by DNS rules based on adblock rule syntax (for instance, `||example.org^`). -* Respond with REFUSED (default) -* Respond with NXDOMAIN -* Respond with Custom IP address (IPv4 and IPv6 addresses can be specified here) +- Respond with REFUSED (default) +- Respond with NXDOMAIN +- Respond with Custom IP address (IPv4 and IPv6 addresses can be specified here) #### Blocking mode for hosts rules Here you can specify the response type for domains blocked by DNS rules based on hosts rule syntax (for instance, ` 0.0.0.0 example.com`). -* Respond with REFUSED -* Respond with NXDOMAIN -* Respond with Custom IP address (IPv4 and IPv6 addresses can be specified here) – default +- Respond with REFUSED +- Respond with NXDOMAIN +- Respond with Custom IP address (IPv4 and IPv6 addresses can be specified here) – default #### DNS request timeout diff --git a/docs/adguard-for-android/solving-problems/manual-certificate.md b/docs/adguard-for-android/solving-problems/manual-certificate.md index 0b0cccffdc3..05c971026a7 100644 --- a/docs/adguard-for-android/solving-problems/manual-certificate.md +++ b/docs/adguard-for-android/solving-problems/manual-certificate.md @@ -18,4 +18,4 @@ If you experience issues during the manual certificate installation (for example 1. Restart AdGuard. 2. Try to install the correct certificate (AdGuard Personal CA) one more time. -If you still encounter a problem and can't install the certificate, please contact our support team at support@adguard.com. \ No newline at end of file +If you still encounter a problem and can't install the certificate, please contact our support team at support@adguard.com. diff --git a/docs/adguard-for-android/solving-problems/multiple-user-profiles.md b/docs/adguard-for-android/solving-problems/multiple-user-profiles.md index 523121bc50c..ac806be2038 100644 --- a/docs/adguard-for-android/solving-problems/multiple-user-profiles.md +++ b/docs/adguard-for-android/solving-problems/multiple-user-profiles.md @@ -38,30 +38,35 @@ This approach is available starting from **AdGuard v3.5 nightly 6**. If you're u ::: 1. Activate the **developer mode** and enable **USB debugging**: -- Open the **Settings** app phone; -- Go to **System** section (last item in the settings menu). In this section, find the sub-item **About phone**; -- Tap the **Build number** line 7 times. After that, you will receive a notification that **You are now a developer** (If necessary, enter an unlock code for the device); -- Open **System Settings** → **Developer Options** → Scroll down and enable **USB debugging** → Confirm debugging is enabled in the window **Allow USB debugging** after reading the warning carefully. -:::note + - Open the **Settings** app phone; + - Go to **System** section (last item in the settings menu). In this section, find the sub-item **About phone**; + - Tap the **Build number** line 7 times. After that, you will receive a notification that **You are now a developer** (If necessary, enter an unlock code for the device); + - Open **System Settings** → **Developer Options** → Scroll down and enable **USB debugging** → Confirm debugging is enabled in the window **Allow USB debugging** after reading the warning carefully. -If you have any difficulties or additional questions, full instructions can be found [here](https://developer.android.com/studio/debug/dev-options). + :::note -::: + If you have any difficulties or additional questions, full instructions can be found [here](https://developer.android.com/studio/debug/dev-options). + + ::: -2. [Install and configure](https://www.xda-developers.com/install-adb-windows-macos-linux/) adb; +1. [Install and configure](https://www.xda-developers.com/install-adb-windows-macos-linux/) adb; On the Windows platform, **Samsung** owners may need to install [this utility](https://developer.samsung.com/mobile/android-usb-driver.html). -3. Connect your device using a **USB cable** to the computer or laptop on which you installed **ADB**; -4. Open **the command line** on your PC: -- **Cmd.exe** if you are using **Windows**; -- **Terminal** if you are using **macOS**; -5. Enter the command `adb shell pm grant com.adguard.android android.permission.INTERACT_ACROSS_USERS` and press **Enter**. + +1. Connect your device using a **USB cable** to the computer or laptop on which you installed **ADB**; + +1. Open **the command line** on your PC: + + - **Cmd.exe** if you are using **Windows**; + - **Terminal** if you are using **macOS**; + +1. Enter the command `adb shell pm grant com.adguard.android android.permission.INTERACT_ACROSS_USERS` and press **Enter**. ### Option 2: Remove *restricted user account* About how to manage user accounts from an Android device you can [find here](https://support.google.com/a/answer/6223444?hl=en). ->:::note +:::note In some cases restricted user accounts are created implicitly and cannot be removed. For instance, when you use Dual messenger or Dual app features on **Samsung** or **LG** devices. You can read below how to fix the issue in these cases. @@ -92,5 +97,3 @@ To solve this issue, you need to disable this feature. - Scroll down and press **Dual app**; - Remove all applications from the list; - Reboot your device. - - diff --git a/docs/adguard-for-android/solving-problems/outbound-proxy.md b/docs/adguard-for-android/solving-problems/outbound-proxy.md index 057ffe431c0..2dcd14186b3 100644 --- a/docs/adguard-for-android/solving-problems/outbound-proxy.md +++ b/docs/adguard-for-android/solving-problems/outbound-proxy.md @@ -19,13 +19,13 @@ In this article we give examples of how to set up some of the most popular proxi 1. Open AdGuard and go to **Settings** → **Filtering** → **Network** → **Proxy**. Download "Orbot: Proxy with Tor" directly from [Google Play](https://play.google.com/store/apps/details?id=org.torproject.android&noprocess) or by tapping **Integrate with Tor** and then **Install**. -2. Open Orbot and press the **Start** button on the application's main screen. +1. Open Orbot and press the **Start** button on the application's main screen. -3. Go back to the **Proxy** screen of AdGuard. +1. Go back to the **Proxy** screen of AdGuard. -4. Tap the **Integrate with Tor** button. +1. Tap the **Integrate with Tor** button. -5. All the required fields will be pre-filled: +1. All the required fields will be pre-filled: Field | Value ------- | --------- @@ -33,11 +33,11 @@ In this article we give examples of how to set up some of the most popular proxi Proxy host | *127.0.0.1* Proxy port | *9050* -Or you can tap **Proxy server** → **Add proxy server**, enter these values manually, and set Orbot as a default proxy. + Or you can tap **Proxy server** → **Add proxy server**, enter these values manually, and set Orbot as a default proxy. -6. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. +1. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. -Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Internet connection will be unavailable until you disable outbound proxy settings in AdGuard. + Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Internet connection will be unavailable until you disable outbound proxy settings in AdGuard. ### How to use AdGuard with PIA (Private Internet Access) @@ -45,7 +45,7 @@ Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Intern 1. Open AdGuard and go to **Settings** → **Filtering** → **Network** → **Proxy** → **Proxy server**. -2. Tap the **Add proxy server** button and enter the following data: +1. Tap the **Add proxy server** button and enter the following data: Field | Value ------- | --------- @@ -53,11 +53,11 @@ Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Intern Proxy host | *proxy-nl.privateinternetaccess.com* Proxy port | *1080* -3. You also need to fill out the **Username/Password** fields. To do so, log in to the [Client Control Panel](https://www.privateinternetaccess.com/pages/client-sign-in) on the PIA website. Click the **Generate Password** button under the **Generate PPTP/L2TP/SOCKS Password** section. A username starting with "x" and a random password will be shown. Use them to fill out the **Proxy username** and **Proxy password** fields in AdGuard. +1. You also need to fill out the **Username/Password** fields. To do so, log in to the [Client Control Panel](https://www.privateinternetaccess.com/pages/client-sign-in) on the PIA website. Click the **Generate Password** button under the **Generate PPTP/L2TP/SOCKS Password** section. A username starting with "x" and a random password will be shown. Use them to fill out the **Proxy username** and **Proxy password** fields in AdGuard. -4. Tap **Save and select**. +1. Tap **Save and select**. -5. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. +1. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. ### How to use AdGuard with TorGuard @@ -65,7 +65,7 @@ Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Intern 1. Open AdGuard and go to **Settings** → **Filtering** → **Network** → **Proxy** → **Proxy server**. -2. Tap the **Add proxy server** button and enter the following data: +1. Tap the **Add proxy server** button and enter the following data: Field | Value ------- | --------- @@ -73,17 +73,17 @@ Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Intern Proxy host | *proxy.torguard.org* or *proxy.torguard.io* Proxy port | *1080* or *1085* or *1090* -3. For **Username** and **Password** fields, enter your proxy username and proxy password you have chosen at TorGuard signup. +1. For **Username** and **Password** fields, enter your proxy username and proxy password you have chosen at TorGuard signup. -4. Tap **Save and select**. +1. Tap **Save and select**. -5. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. +1. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. ### How to use AdGuard with NordVPN 1. Open AdGuard and go to **Settings** → **Filtering** → **Network** → **Proxy** → **Proxy server**. -2. Tap the **Add proxy server** button and enter the following data: +1. Tap the **Add proxy server** button and enter the following data: Field | Value ------- | --------- @@ -91,11 +91,11 @@ Now AdGuard will forward all traffic through Orbot. If you disable Orbot, Intern Proxy host | *any server from [this list](https://support.nordvpn.com/Connectivity/Proxy/)* Proxy port | *1080* -3. For **Username** and **Password** fields, enter your NordVPN Username and Password. +1. For **Username** and **Password** fields, enter your NordVPN Username and Password. -4. Tap **Save and select**. +1. Tap **Save and select**. -5. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. +1. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. ### How to use AdGuard with Shadowsocks @@ -109,7 +109,7 @@ You should remove Shadowsocks application from filtering before setting up the p 1. Open AdGuard and go to **Settings** → **Filtering** → **Network** → **Proxy** → **Proxy server**. -2. Tap the **Add proxy server** and fill in the fields: +1. Tap the **Add proxy server** and fill in the fields: Field | Value ------- | --------- @@ -117,18 +117,21 @@ You should remove Shadowsocks application from filtering before setting up the p Proxy host | *127.0.0.1* Proxy port | *1080* -3. Tap **Save and select**. +1. Tap **Save and select**. -4. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. +1. Enable the main Proxy switch and AdGuard protection to route your device's traffic through the proxy. ### How to use AdGuard with Clash *Here we presume that you are already a Clash client and have it installed on your device.* 1. Open Clash and go to **Settings** → **Network** → **Route System Traffic** and toggle the switch. This will set Clash to proxy mode. -2. Open Adguard and go to **App management**. Choose **Clash For Android** and disable **Route traffic through AdGuard**. This will eliminate traffic looping. -3. Then go to **Settings** → **Network** → **Proxy** → **Proxy server**. -4. Tap **Add proxy server** and fill in the fields: + +1. Open Adguard and go to **App management**. Choose **Clash For Android** and disable **Route traffic through AdGuard**. This will eliminate traffic looping. + +1. Then go to **Settings** → **Network** → **Proxy** → **Proxy server**. + +1. Tap **Add proxy server** and fill in the fields: Field | Value ------- | --------- @@ -138,4 +141,4 @@ You should remove Shadowsocks application from filtering before setting up the p ## Limitations -There is a factor that can prevent certain traffic from being routed through the outgoing proxy. AdGuard will only re-route traffic that goes through it. Basically, it means apps that have **Ad blocking** flag enabled in the **Apps Management** tab. \ No newline at end of file +There is a factor that can prevent certain traffic from being routed through the outgoing proxy. AdGuard will only re-route traffic that goes through it. Basically, it means apps that have **Ad blocking** flag enabled in the **Apps Management** tab. diff --git a/docs/adguard-for-android/solving-problems/secure-folder.md b/docs/adguard-for-android/solving-problems/secure-folder.md index 87b456517d2..dc3dbb5d7a5 100644 --- a/docs/adguard-for-android/solving-problems/secure-folder.md +++ b/docs/adguard-for-android/solving-problems/secure-folder.md @@ -21,4 +21,4 @@ If you install AdGuard to [the *Secure folder* on your Android](https://www.sams 1. Confirm installation with your graphic key/password/fingerprint. 1. Find and select the previously saved certificate, then tap **Done**. 1. Return to the AdGuard app and navigate back to the main screen. You may have to swipe and restart the app to get rid of the *HTTPS filtering is off* message. -1. Done! The certificate has been installed. \ No newline at end of file +1. Done! The certificate has been installed. diff --git a/docs/adguard-for-android/solving-problems/tasker.md b/docs/adguard-for-android/solving-problems/tasker.md index 1072a8ed9d2..3eaded4ee8a 100644 --- a/docs/adguard-for-android/solving-problems/tasker.md +++ b/docs/adguard-for-android/solving-problems/tasker.md @@ -27,7 +27,6 @@ Wouldn't it be a bit dangerous, you might ask — to let some random apps manage So, ready to get your hands dirty? Here are actions that, when included in the intent, will be understood by AdGuard: - `start` starts the protection, no extra data is needed; `stop` stops the protection, no extra data required; @@ -64,15 +63,12 @@ The full list of supported provider names can be found inside AdGuard DNS settin ----- - - `proxy_state` enables/disables the outbound proxy. Requires an extra flag: `enable:true` or `enable:false` activates or deactivates the outbound proxy, accordingly. ----- - `proxy_default` sets the proxy from the list of previously added ones as default or creates a new one if server has not been added before. You need to specify additional data: @@ -91,9 +87,10 @@ Or you can configure remove parameters manually: `server:[type=…&host=…&port=…&username=…&password=…&udp=…&trust=…]`. -* **Compulsory parameters**: +- **Compulsory parameters**: `[type]` — proxy server type: + - HTTP; - SOCKS4; - SOCKS5; @@ -103,7 +100,7 @@ Or you can configure remove parameters manually: `[port]` — outbound proxy port (integer number from 1 to 65535); -* **Optional parameters**: +- **Optional parameters**: `[login and password]` — only if proxy requires it. This data is ignored when setting up **SOCKS4**; diff --git a/docs/adguard-for-android/solving-problems/youtube-ads.md b/docs/adguard-for-android/solving-problems/youtube-ads.md index 62a64f27e89..22455a69a1f 100644 --- a/docs/adguard-for-android/solving-problems/youtube-ads.md +++ b/docs/adguard-for-android/solving-problems/youtube-ads.md @@ -17,13 +17,13 @@ One of the most popular questions users ask us is: 'Is it possible to block ads 1. Open the YouTube app and start the video you want to watch. -2. Tap the *Share* button. +1. Tap the *Share* button. -![Share to YouTube step 1 *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/youtube/android-youtube-share-step1.png) + ![Share to YouTube step 1 *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/youtube/android-youtube-share-step1.png) -3. Select *AdGuard* from the list of apps. +1. Select *AdGuard* from the list of apps. -![Share to YouTube step 2 *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/youtube/android-youtube-share-step2.png) + ![Share to YouTube step 2 *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/android/youtube/android-youtube-share-step2.png) That's it! A new window with the video will open where you'll be able to watch it without being interrupted by ads. diff --git a/docs/adguard-for-ios/installation.md b/docs/adguard-for-ios/installation.md index 1fc7c40335e..4d2acfdf627 100644 --- a/docs/adguard-for-ios/installation.md +++ b/docs/adguard-for-ios/installation.md @@ -25,29 +25,29 @@ Requires iOS 11.2 or later. ## AdGuard for iOS installation -AdGuard for iOS is an app presented in the App Store. To install it on your device, open the App Store and tap the _Search_ icon on the bottom of the screen. +AdGuard for iOS is an app presented in the App Store. To install it on your device, open the App Store and tap the *Search* icon on the bottom of the screen. ![On the App Store main screen, tap Search *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/installation/iOS/en/1.png) -Type _adguard_ in the search bar and tap the string _adGuard_ which will be among search results. +Type *adguard* in the search bar and tap the string *adGuard* which will be among search results. ![Type "AdGuard" in the search bar *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/installation/iOS/en/2.png) -[On the opened page of the App Store](https://adguard.com/download.html?auto=1) tap _GET_ under the string _AdGuard - adblock&privacy_ and then tap _INSTALL_. You may be requested to enter your Apple ID login and password. Type it in and wait for the installation to complete. +[On the opened page of the App Store](https://adguard.com/download.html?auto=1) tap *GET* under the string *AdGuard - adblock&privacy* and then tap *INSTALL*. You may be requested to enter your Apple ID login and password. Type it in and wait for the installation to complete. ![Tap GET below the AdGuard app *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/installation/iOS/en/3.png) ## AdGuard Pro for iOS installation -AdGuard Pro is a paid version of AdGuard for iOS, offering an expanded set of functions (same as "AdGuard" app with premium enabled). To install it on your device run the App Store application and tap the _Search_ icon on the bottom of the screen. +AdGuard Pro is a paid version of AdGuard for iOS, offering an expanded set of functions (same as "AdGuard" app with premium enabled). To install it on your device run the App Store application and tap the *Search* icon on the bottom of the screen. ![On the App Store main screen, tap Search *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/installation/iOS/en/1.png) -Type _adguard_ in the search form, and then tap the string _adGuard pro - adblock_ which will be shown among search results. +Type *adguard* in the search form, and then tap the string *adGuard pro - adblock* which will be shown among search results. ![Type "AdGuard" in the search bar *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/installation/iOS/en/2.png) -On the opened page of the App Store tap the button with the cost of the license under the string _AdGuard Pro - adblock_, and then tap _BUY_. You may be requested to enter your Apple ID login and password. Type it in and wait for the installation to complete. +On the opened page of the App Store tap the button with the cost of the license under the string *AdGuard Pro - adblock*, and then tap *BUY*. You may be requested to enter your Apple ID login and password. Type it in and wait for the installation to complete. ![Tap GET below the AdGuard app *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/installation/iOS/en/3.png) diff --git a/docs/adguard-for-ios/overview.md b/docs/adguard-for-ios/overview.md index d3b78e68858..864862cc5f2 100644 --- a/docs/adguard-for-ios/overview.md +++ b/docs/adguard-for-ios/overview.md @@ -192,6 +192,7 @@ For any DNS query sent to get an IPv6 address, our app returns an empty response Fallback is a backup DNS server. If you chose a DNS server and something happened to it, a fallback is needed to set the backup DNS server until the main server responds. With Bootstrap, it’s a little more complicated. For AdGuard for iOS to use a custom secure DNS server, our app needs to get its IP address first. For this purpose, the system DNS is used by default, but sometimes this is not possible for various reasons. In such cases, Bootstrap could be used to get the IP address of the selected secure DNS server. Here are two examples to illustrate when a custom Bootstrap server might help: + 1. When a system default DNS server does not return the IP address of a secure DNS server and it is not possible to use a secure one. 2. When our app and third-party VPN are used simultaneously and it is not possible to use System DNS as a Bootstrap. diff --git a/docs/adguard-for-ios/solving-problems/facetime-compatibility-issues.md b/docs/adguard-for-ios/solving-problems/facetime-compatibility-issues.md index d89206b7cdb..915b7ce2e12 100644 --- a/docs/adguard-for-ios/solving-problems/facetime-compatibility-issues.md +++ b/docs/adguard-for-ios/solving-problems/facetime-compatibility-issues.md @@ -20,6 +20,7 @@ It is likely but not guaranteed that FaceTime will work when AdGuard is in Full- ![Tunnel mode screen *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/Ru/iOS/tunnel-mode.PNG?!) To enable it, follow the instructions: + 1. Go to AdGuard for iOS *Settings* → *General settings*. 2. Enable *Advanced mode* and go to the *Advanced settings* section that appears right after. 3. Open *Tunnel mode* and select *Split-Tunnel*. diff --git a/docs/adguard-for-ios/solving-problems/system-wide-filtering.md b/docs/adguard-for-ios/solving-problems/system-wide-filtering.md index 017aed68d82..ead3ec97af0 100644 --- a/docs/adguard-for-ios/solving-problems/system-wide-filtering.md +++ b/docs/adguard-for-ios/solving-problems/system-wide-filtering.md @@ -13,7 +13,7 @@ This article covers AdGuard for iOS, a multifunctional ad blocker that protects System-wide filtering means blocking ads and trackers beyond the Safari browser, i.e. in other apps and browsers. This article will tell you how to enable it on your iOS device. -On iOS, the only way to block ads and trackers system-wide is to use [DNS filtering](https://adguard-dns.io/kb/general/dns-filtering/). +On iOS, the only way to block ads and trackers system-wide is to use [DNS filtering](https://adguard-dns.io/kb/general/dns-filtering/). First, you have to enable DNS protection. To do so: @@ -31,14 +31,14 @@ Now, if your purpose is to block ads and trackers system-wide, you have three op The first and third option have several advantages: -* You can use any DNS server at your discretion and you are not tied up to a specific blocking server, because the filter does the blocking. -* You can add multiple DNS filters and/or hosts files (although using too many might slow down AdGuard). +- You can use any DNS server at your discretion and you are not tied up to a specific blocking server, because the filter does the blocking. +- You can add multiple DNS filters and/or hosts files (although using too many might slow down AdGuard). ![How DNS filtering works](https://cdn.adtidy.org/public/Adguard/kb/DNS_filtering/how_dns_filtering_works_en.png) ## How to add custom DNS filter/hosts file -You can add any DNS filter or hosts file you like. +You can add any DNS filter or hosts file you like. For the sake of the example, let's add [OISD Blocklist Big](https://oisd.nl/). diff --git a/docs/adguard-for-ios/web-extension.md b/docs/adguard-for-ios/web-extension.md index 8ac4a83e0ff..ff317dd9fe8 100644 --- a/docs/adguard-for-ios/web-extension.md +++ b/docs/adguard-for-ios/web-extension.md @@ -23,11 +23,11 @@ Besides that, AdGuard's Safari Web extension can be used to quickly manage AdGua You will see the following list of options: -* **Enabling/disabling protection on the website**. Turning the switch off will disable AdGuard completely for the current website and add a respective exclusion rule. Turning the switch back on will resume protection for the website and delete the rule. Any such change will require some time to take effect. +- **Enabling/disabling protection on the website**. Turning the switch off will disable AdGuard completely for the current website and add a respective exclusion rule. Turning the switch back on will resume protection for the website and delete the rule. Any such change will require some time to take effect. -* **Blocking elements on the page manually**. Tap the *Block elements on this page* button to prompt a pop-up for element blocking. Select any element on the page you want to hide, adjust the selection zone, then preview changes and confirm the removal. A corresponding filtering rule will be added to AdGuard (that you can later disable or delete to revert the change). +- **Blocking elements on the page manually**. Tap the *Block elements on this page* button to prompt a pop-up for element blocking. Select any element on the page you want to hide, adjust the selection zone, then preview changes and confirm the removal. A corresponding filtering rule will be added to AdGuard (that you can later disable or delete to revert the change). -* **Report an issue**. Swipe up to bring out the *Report an issue* button. Use it to report a missed ad or any other problem that you encountered on the current page. +- **Report an issue**. Swipe up to bring out the *Report an issue* button. Use it to report a missed ad or any other problem that you encountered on the current page. ## How to enable AdGuard's Safari Web extension @@ -47,7 +47,7 @@ Find **ALLOW THESE EXTENSIONS** section and then find **AdGuard** among the avai Tap it, then turn on the switch. On the same screen make sure that the AdGuard extension has required permissions: **All Websites** should have the *Allow* status. -![](https://cdn.adtidy.org/public/Adguard/kb/iOS/webext/settings4_en.png) +![settings extensions](https://cdn.adtidy.org/public/Adguard/kb/iOS/webext/settings4_en.png) :::note diff --git a/docs/adguard-for-mac/browser-assistant.md b/docs/adguard-for-mac/browser-assistant.md index 0af1cee368c..073fded9ab5 100644 --- a/docs/adguard-for-mac/browser-assistant.md +++ b/docs/adguard-for-mac/browser-assistant.md @@ -8,10 +8,13 @@ AdGuard Assistant’s primary function is to manage filtering directly from the ![Browser Assistant](https://cdn.adtidy.org/content/kb/ad_blocker/mac/assistantmac.jpg) ## Benefits + ### Independence + AdGuard Browser Assistant is an extension installed in a browser, so there is no need to wait for the userscript to be injected into the filtered web page, as it was with the preceding one. In other words, it is more autonomous from the main AdGuard app. Still, Browser Assistant needs the installed AdGuard for Mac, because there is no point in using the extension without the app. ### Compatibility with the main app + If you got into the habit of using our previous AdGuard ad blocker extension [in Integration mode](/adguard-browser-extension/integration-mode), you may like the solution that we have developed for the new Browser Assistant. :::note Background information @@ -23,6 +26,7 @@ When using the Browser Assistant, all these problems don’t matter as there can ::: ### Smart onboarding + When AdGuard for Mac is installed for the first time, the thing a user encounters in the first place is the onboarding. During this process the user quickly learns about AdGuard's settings and can customize filtering to their liking. At one stage AdGuard will determine the user's default browser and provide them with a download link for the new Assistant. ![Installing a new browser assistant](https://cdn.adtidy.org/content/kb/ad_blocker/mac/assistant_onboarding_safari.jpg) @@ -34,14 +38,17 @@ On rare occasions, a browser may prove incompatible with the Browser Assistant, ::: ## Separate tab in Settings + The new Browser Assistant has its own tab in the AdGuard for Mac settings, together with Stealth Mode, Browsing Security, Parental Control and others. Don’t worry if you missed the opportunity to install Browser Assistant during the onboarding, you'll find this option in the app's settings. Besides, there is a checkbox to enable the legacy Assistant. ![Browser Assistant tab](https://cdn.adtidy.org/content/kb/ad_blocker/mac/assistant-separate-tab.png) ## Legacy Assistant + Legacy Assistant is the previous version of Assistant, which is a mere userscript, not a browser extension. Basically, there are two cases when you might want to pick it instead of the new Browser Assistant: 1) the new Assistant is not available for your browser; 2) you are used to the green shield icon and want to leave things as they were. If you recognize yourself in any of these scenarios, then the legacy version will suit you. ## How to install AdGuard Browser Assistant + Technically, you won’t need to do it on your own: during the onboarding process AdGuard app will determine your default browser and offer to install Browser Assistant for it. Yet, if you missed that step, you can download it yourself. AdGuard Browser Assistant is available for all popular browsers: Chrome, Firefox, Safari, Edge, Opera, and Yandex. To install the Browser Assistant for your default browser, you can do it directly from the app settings, but you also have an opportunity to install it for other browsers. diff --git a/docs/adguard-for-mac/installation.md b/docs/adguard-for-mac/installation.md index 5e674fbb541..ee22b63e8cf 100644 --- a/docs/adguard-for-mac/installation.md +++ b/docs/adguard-for-mac/installation.md @@ -21,11 +21,11 @@ This article covers AdGuard for Mac, a multifunctional ad blocker that protects ## Installation -To install AdGuard for Mac on your computer, launch your browser, type _adguard.com_ in the address bar, and press **Download** [on the page that opens](https://adguard.com/download.html?auto=1). +To install AdGuard for Mac on your computer, launch your browser, type *adguard.com* in the address bar, and press **Download** [on the page that opens](https://adguard.com/download.html?auto=1). ![Download the app *border](https://cdn.adtidy.org/content/kb/ad_blocker/mac/1.jpg) -Wait for _AdguardInstaller.dmg_ to download and double-click its icon in the list of downloaded files on the Dock panel. +Wait for *AdguardInstaller.dmg* to download and double-click its icon in the list of downloaded files on the Dock panel. ![Double-click to open the file](https://cdn.adtidy.org/content/kb/ad_blocker/mac/installation_open_the_file.jpg) @@ -58,6 +58,7 @@ Here we are, AdGuard is installed on your Mac! ## Uninstall ### Regular + First of all, open the Finder app by clicking the respective icon: ![Open Finder](https://cdn.adtidy.org/public/Adguard/En/Articles/howtodelete/finder.png) diff --git a/docs/adguard-for-mac/overview.md b/docs/adguard-for-mac/overview.md index a07cf453408..7bea6259576 100644 --- a/docs/adguard-for-mac/overview.md +++ b/docs/adguard-for-mac/overview.md @@ -50,11 +50,12 @@ Filters are the main driving force behind the Ad blocker module. To understand h Some filter lists (AdGuard’s Base filter, Annoyances filter, EasyList, etc.) are pre-installed, while other specific ones, adapted to your preferences, can be downloaded additionally and added to your program. Aside from the more general and universally applicable filters (like Base filter), AdGuard provides an extensive quantity of filters for every occasion: -* filters aimed at tracking prevention (like Tracking Protection filter), -* language-specific ad filters that block content in a selected language, -* Social media filter that removes "Like" and "Share" buttons, -* Annoyances filter for cookie warnings, in-page pop-ups and others of the same ilk, -* and even a filter that unblocks some ads instead of blocking them — Filter for search ads and self-promotions. + +- filters aimed at tracking prevention (like Tracking Protection filter), +- language-specific ad filters that block content in a selected language, +- Social media filter that removes "Like" and "Share" buttons, +- Annoyances filter for cookie warnings, in-page pop-ups and others of the same ilk, +- and even a filter that unblocks some ads instead of blocking them — Filter for search ads and self-promotions. AdGuard filters are automatically updated. Our developers create them all based on user feedback received. You can always help other AdGuard users (and yourself, in perspective) by sending us reports right from the app's Assistant (it's really handy, we'll tell you more about the Assistant further on), or from the [website](https://agrd.io/report). If you wish to know more about AdGuard filters, here is [some info](/general/ad-filtering/adguard-filters). diff --git a/docs/adguard-for-mac/solving-problems/advanced-settings.md b/docs/adguard-for-mac/solving-problems/advanced-settings.md index 9355d5c2a09..fe632c08824 100644 --- a/docs/adguard-for-mac/solving-problems/advanced-settings.md +++ b/docs/adguard-for-mac/solving-problems/advanced-settings.md @@ -107,17 +107,17 @@ Here you can list domains for which the fallback DNS server will be used instead Here you can specify the type of DNS server response to blocked requests, corresponding to ad-blocker-style rules. -* 0 — respond with REFUSED -* 1 — respond with NXDOMAIN -* 2 — respond with 0.0.0.0 or the addresses specified in `dns.proxy.blocking.response.IPv4.address` and/or `dns.proxy.blocking.response.IPv6.address` +- 0 — respond with REFUSED +- 1 — respond with NXDOMAIN +- 2 — respond with 0.0.0.0 or the addresses specified in `dns.proxy.blocking.response.IPv4.address` and/or `dns.proxy.blocking.response.IPv6.address` `dns.proxy.hostrules.blocking.mode` Here you can specify the type of DNS server response to blocked requests, corresponding to hosts rules: -* 0 — respond with REFUSED -* 1 — respond with NXDOMAIN -* 2 — respond with 0.0.0.0 or the addresses specified in `dns.proxy.blocking.response.IPv4.address` and/or `dns.proxy.blocking.response.IPv6.address` +- 0 — respond with REFUSED +- 1 — respond with NXDOMAIN +- 2 — respond with 0.0.0.0 or the addresses specified in `dns.proxy.blocking.response.IPv4.address` and/or `dns.proxy.blocking.response.IPv6.address` `dns.proxy.blocking.response.IPv4.address` diff --git a/docs/adguard-for-mac/solving-problems/big-sur-issues.md b/docs/adguard-for-mac/solving-problems/big-sur-issues.md index ae273aa92cc..f08888576a1 100644 --- a/docs/adguard-for-mac/solving-problems/big-sur-issues.md +++ b/docs/adguard-for-mac/solving-problems/big-sur-issues.md @@ -51,26 +51,25 @@ These problems aren't fixed by Apple yet, or fixed only partially. AdGuard will not work together with Cisco AnyConnect while in the *Network Extension* mode. You have to switch AdGuard to *Automatic Proxy* mode. To do so, follow [this instruction](#automatic-proxy). - #### Compatibility with Flutter This problem is solved in Flutter 2.2, released in June 2021. But to fix it for applications developed in Flutter, you need to wait for updates. If you use Flutter alongside AdGuard in "Network Extension" mode (or any other "Transparent Proxy"-type app) in Monterey or Big Sur, you will run into problems: projects won't open and Flutter will be effectively broken. We have already reported this bug to Apple. Meanwhile, you can use these temporary solutions: -1) Use AdGuard in [Automatic Proxy](#automatic-proxy) mode. +1. Use AdGuard in [Automatic Proxy](#automatic-proxy) mode. -2) Disable SIP and switch AdGuard to Kernel Extension mode as explained [here](#kernel-extension). +1. Disable SIP and switch AdGuard to Kernel Extension mode as explained [here](#kernel-extension). #### VPN apps with legacy API Despite AdGuard is displayed as a VPN in system settings, it shouldn't cause any conflicts when working alongside other VPN-based apps. However, if you're using a VPN-based app that was downloaded from outside App Store, there's a chance it uses the old VPN API and you have to exclude it from filtering: -1) Open AdGuard's menu. -2) Select *Preferences...*. -3) Switch to the *Network* tab. -4) Click the *Applications...* button. -5) Find the app you want to exclude and uncheck the checkbox next to it. +1. Open AdGuard's menu. +1. Select *Preferences...*. +1. Switch to the *Network* tab. +1. Click the *Applications...* button. +1. Find the app you want to exclude and uncheck the checkbox next to it. ![Filtered applications](https://cdn.adtidy.org/content/kb/ad_blocker/mac/legacy.jpg) @@ -96,13 +95,13 @@ To configure an upstream proxy in AdGuard for Mac in Big Sur, open AdGuard's set Enter a string that looks like `scheme://user:password@host:port`, where -* `scheme` is either `http`, `https`, `socks4` or `socks5`, depending on your proxy type, +- `scheme` is either `http`, `https`, `socks4` or `socks5`, depending on your proxy type, If you use `socks5` proxy type, set the value of the `upstream.proxy.socks5udp` setting to `true` to make AdGuard route UDP traffic to the proxy server. -* `user` and `password` are corresponding username and password of your proxy (if needed). Ignore either or both when not applicable, -* `host` is the IP address of your proxy server, -* `port` is the desired port number to be used by the proxy server. +- `user` and `password` are corresponding username and password of your proxy (if needed). Ignore either or both when not applicable, +- `host` is the IP address of your proxy server, +- `port` is the desired port number to be used by the proxy server. :::note Example @@ -120,7 +119,7 @@ Here's an example of how to configure an upstream proxy for [Shadowsocks](https: First of all, you need a working server side for your proxy. Most likely, to set it up, you would use a JSON file like this (`server` and `password` values were chosen randomly here): -``` +```json { "server":"111.222.333.444", "server_port":8388, @@ -163,11 +162,11 @@ It's impossible to foresee each and every possible problem that can pop up in Bi If you face problems in Big Sur or Monterey which can't be resolved by any of the methods above, you can try switching AdGuard to *Automatic proxy* mode. -1) Open AdGuard's menu. -2) Select *Preferences...*. -3) Switch to the *Network* tab. -4) Click the *Select Mode...* button. -5) Select *Automatic Proxy*. +1. Open AdGuard's menu. +1. Select *Preferences...*. +1. Switch to the *Network* tab. +1. Click the *Select Mode...* button. +1. Select *Automatic Proxy*. ![Switch AdGuard to Automatic proxy mode](https://cdn.adtidy.org/content/kb/ad_blocker/mac/automatic-proxy_en.jpg) @@ -183,26 +182,26 @@ Some apps may ignore this system setting and their traffic will not be filtered. By default AdGuard uses Network Extension framework in Big Sur and Monterey as the old Kernel Extension framework is disabled there. This can cause some compatibility problems, but to enable Kernel Extension back, you need to disable System Integrity Protection (SIP) first. To disable SIP, follow this instruction: -1) Click the *Apple symbol* in the Menu bar. -2) Click *Restart…* -3) Hold down *Command-R* to reboot into Recovery Mode. -4) Click *Utilities*. -5) Select *Terminal*. -6) Type `csrutil disable`. -7) Press *Return* or *Enter* on your keyboard. -8) Click the *Apple symbol* in the Menu bar. -9) Click *Restart…* +1. Click the *Apple symbol* in the Menu bar. +1. Click *Restart…* +1. Hold down *Command-R* to reboot into Recovery Mode. +1. Click *Utilities*. +1. Select *Terminal*. +1. Type `csrutil disable`. +1. Press *Return* or *Enter* on your keyboard. +1. Click the *Apple symbol* in the Menu bar. +1. Click *Restart…* Now that SIP is disabled, this is how you enable Kernel Extension: ![Enable Kernel Extension](https://cdn.adtidy.org/content/kb/ad_blocker/mac/kernel_en.jpg) -1) Open AdGuard's menu. -2) Select *Preferences...*. -3) Switch to the *Network* tab. -4) Click the *Select Mode...* button. -5) Select *Kernel Extension*. -6) Confirm that you want to switch to Kernel Extension. +1. Open AdGuard's menu. +1. Select *Preferences...*. +1. Switch to the *Network* tab. +1. Click the *Select Mode...* button. +1. Select *Kernel Extension*. +1. Confirm that you want to switch to Kernel Extension. :::caution diff --git a/docs/adguard-for-mac/solving-problems/icloud-private-relay.md b/docs/adguard-for-mac/solving-problems/icloud-private-relay.md index 1e5f0bdd156..b0b0788183c 100644 --- a/docs/adguard-for-mac/solving-problems/icloud-private-relay.md +++ b/docs/adguard-for-mac/solving-problems/icloud-private-relay.md @@ -27,6 +27,7 @@ On Big Sur, AdGuard developed "split-tunnel" rules to avoid creating the "defaul On Monterey, iCloud Private Relay got introduced. Privacy features of the Mail app also use Private Relay servers. As a result, AdGuard can't work together with iCloud Private Relay and the Mail app privacy features: + 1. iCloud Private Relay is applied to connections at the library level — before they reach the socket level, where AdGuard operates. 2. iCloud Private Relay uses QUIC, which AdGuard can't filter in filtered apps because HTTP/3 filtering is not yet available. 3. As AdGuard blocks QUIC, including iCloud Private Relay traffic — otherwise, ad blocking is impossible. diff --git a/docs/adguard-for-mac/solving-problems/launch-issues.md b/docs/adguard-for-mac/solving-problems/launch-issues.md index 45697443e54..d832ac89f86 100644 --- a/docs/adguard-for-mac/solving-problems/launch-issues.md +++ b/docs/adguard-for-mac/solving-problems/launch-issues.md @@ -16,28 +16,26 @@ Occasionally macOS may cause the corruption of AdGuard's Network Extension modul If you have problems launching AdGuard for Mac on Big Sur and Monterey operating systems, please use this instruction: 1. Reboot Mac and enter [recovery mode](https://support.apple.com/en-us/HT201255). -2. Disable SIP (Launch **Terminal** from the **Utilities** menu and type `csrutil disable`). -3. Reboot Mac. -4. Close the AdGuard app, open **Terminal** and type `systemextensionsctl reset`. -5. Reboot Mac and enter recovery mode. -6. Enable SIP (Launch **Terminal** from the **Utilities** menu and type `csrutil enable`). -7. Launch the AdGuard app and enable protection. +1. Disable SIP (Launch **Terminal** from the **Utilities** menu and type `csrutil disable`). +1. Reboot Mac. +1. Close the AdGuard app, open **Terminal** and type `systemextensionsctl reset`. +1. Reboot Mac and enter recovery mode. +1. Enable SIP (Launch **Terminal** from the **Utilities** menu and type `csrutil enable`). +1. Launch the AdGuard app and enable protection. ## Launch issues on macOS 10 If you have problems launching AdGuard for Mac on Sierra, Mojave and Catalina operating systems, please use this instruction: 1. Open **Terminal** and enter command `ls -@lOae /private/var/db/KernelExtensionManagement`. -2. Check that the `restricted` flag is not present (like on the screenshot). - -![Command example *border](https://cdn.adtidy.org/content/kb/ad_blocker/mac/restricted-flag.jpg) - -3. Reboot your Mac in recovery mode. -4. Open **Utilities** → **Terminal**. -5. Enter `csrutil disable`. -6. Enter administrator password. -7. Reboot your Mac. -8. Open **Terminal** and enter the following command: `sudo chflags restricted /private/var/db/KernelExtensionManagement`. -9. Reboot your Mac in recovery mode. -10. Open **Utilities** → **Terminal** → Enter `csrutil enable` → Enter administrator password → Reboot your Mac. -11. Enable AdGuard protection. +1. Check that the `restricted` flag is not present (like on the screenshot). + ![Command example *border](https://cdn.adtidy.org/content/kb/ad_blocker/mac/restricted-flag.jpg) +1. Reboot your Mac in recovery mode. +1. Open **Utilities** → **Terminal**. +1. Enter `csrutil disable`. +1. Enter administrator password. +1. Reboot your Mac. +1. Open **Terminal** and enter the following command: `sudo chflags restricted /private/var/db/KernelExtensionManagement`. +1. Reboot your Mac in recovery mode. +1. Open **Utilities** → **Terminal** → Enter `csrutil enable` → Enter administrator password → Reboot your Mac. +1. Enable AdGuard protection. diff --git a/docs/adguard-for-mac/solving-problems/protect-mail-activity.md b/docs/adguard-for-mac/solving-problems/protect-mail-activity.md index a9f3174d154..c4af978b92b 100644 --- a/docs/adguard-for-mac/solving-problems/protect-mail-activity.md +++ b/docs/adguard-for-mac/solving-problems/protect-mail-activity.md @@ -29,6 +29,7 @@ On Big Sur, AdGuard used "split-tunnel" rules to avoid creating the "default rou On Monterey, iCloud Private Relay got introduced. Privacy features of Mail.app also use Private Relay servers. As a result, AdGuard can't work together with iCloud Private Relay and Mail.app privacy features: + 1. iCloud Private Relay is applied to connections at the library level - before they reach the socket level, where AdGuard operates. 2. iCloud Private Relay uses QUIC, which AdGuard can't filter because HTTP/3 filtering is not yet available. 3. As AdGuard blocks QUIC, including iCloud Private Relay traffic - otherwise, ad blocking is impossible. @@ -40,4 +41,5 @@ So, AdGuard works seamlessly on Monterey, but iCloud Private Relay gets disabled We keep searching for a solution to this issue. One of the options is implementing HTTP/3 filtering. ## Recommended solution + At this point, we recommend using a more traditional VPN service, such as [AdGuard VPN](https://adguard-vpn.com/), instead of the new Apple's privacy features. diff --git a/docs/adguard-for-safari/installation.md b/docs/adguard-for-safari/installation.md index 182f78bf252..5b4e031c3dd 100644 --- a/docs/adguard-for-safari/installation.md +++ b/docs/adguard-for-safari/installation.md @@ -15,11 +15,11 @@ AdGuard for Safari is a free app presented on the App Store. To install it on yo 1. Open the App Store and find the needed extension there. -![AdGuard for Safari on the App Store](https://cdn.adtidy.org/content/Kb/ad_blocker/safari/adguard-for-safari-app-store.png) + ![AdGuard for Safari on the App Store](https://cdn.adtidy.org/content/Kb/ad_blocker/safari/adguard-for-safari-app-store.png) -2. Press *Get* → *Install* → *Open*. +1. Press *Get* → *Install* → *Open*. -3. To set up AdGuard for Safari, enable the AdGuard extensions in the Safari settings. In a notification, click *Fix it*. In an opened window, check the boxes next to AdGuard extensions. +1. To set up AdGuard for Safari, enable the AdGuard extensions in the Safari settings. In a notification, click *Fix it*. In an opened window, check the boxes next to AdGuard extensions. ![Notification: Some extensions are disabled](https://cdn.adtidy.org/content/Kb/ad_blocker/safari/adguard-for-safari-notification.png) @@ -33,21 +33,24 @@ Not all extensions are required for AdGuard for Safari to function correctly. Fo After you complete steps 1-3, AdGuard for Safari will start functioning. You can now configure its settings. - ## How to uninstall AdGuard for Safari {#uninstall} + To uninstall AdGuard for Safari, do the following: 1. Quit the app. -2. Open Safari preferences. -3. Choose the Extensions tab. You will see a list of extensions, AdGuard has eight. -4. Uncheck all checkboxes and press *Uninstall* below any of them. -![Extensions checked](https://cdn.adtidy.org/public/Adguard/kb/installation/Safari/extensionschecked.png) +1. Open Safari preferences. + +1. Choose the Extensions tab. You will see a list of extensions, AdGuard has eight. + +1. Uncheck all checkboxes and press *Uninstall* below any of them. + + ![Extensions checked](https://cdn.adtidy.org/public/Adguard/kb/installation/Safari/extensionschecked.png) -At this point, you will see a notification: + At this point, you will see a notification: -![Notification: uninstall AdGuard for Safari](https://cdn.adtidy.org/public/Adguard/kb/installation/Safari/showinfinder.png) + ![Notification: uninstall AdGuard for Safari](https://cdn.adtidy.org/public/Adguard/kb/installation/Safari/showinfinder.png) -5. Press *Show in Finder* and move the application to the bin. +1. Press *Show in Finder* and move the application to the bin. -AdGuard for Safari will be removed from your device. + AdGuard for Safari will be removed from your device. diff --git a/docs/adguard-for-windows/installation.md b/docs/adguard-for-windows/installation.md index dafe5be8ba6..71bc759ae6f 100644 --- a/docs/adguard-for-windows/installation.md +++ b/docs/adguard-for-windows/installation.md @@ -55,17 +55,17 @@ To use AdGuard on a PC or tablet under Microsoft Windows, you should download th If you need to uninstall or reinstall AdGuard, do the following: -* For Microsoft Windows 10 & 11: Open *Start Menu* by clicking *Start*, and select *Settings*. Click the *Apps* icon in the window that opens. Select *Apps and Features* from the list on the left in the *Apps* window. Select *AdGuard* from the list of your installed apps and click *Uninstall*. Click *Uninstall* in the dialogue box that opens to confirm. +- For Microsoft Windows 10 & 11: Open *Start Menu* by clicking *Start*, and select *Settings*. Click the *Apps* icon in the window that opens. Select *Apps and Features* from the list on the left in the *Apps* window. Select *AdGuard* from the list of your installed apps and click *Uninstall*. Click *Uninstall* in the dialogue box that opens to confirm. ![Windows 10 & 11 uninstallation *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/win10-uninstall.png) -* For Microsoft Windows 8: Right-click the *empty space* in the lower left corner of the task bar and select *Control Panel*. Click *Uninstall a program* in the *Programs* section, then select *AdGuard* from the list of installed apps and press the *Uninstall* button located right above the list. Confirm the action by clicking *Uninstall AdGuard* in the window that opens. +- For Microsoft Windows 8: Right-click the *empty space* in the lower left corner of the task bar and select *Control Panel*. Click *Uninstall a program* in the *Programs* section, then select *AdGuard* from the list of installed apps and press the *Uninstall* button located right above the list. Confirm the action by clicking *Uninstall AdGuard* in the window that opens. ![Windows 8 uninstallation](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/win8-uninstall.png) -* For Microsoft Windows 8.1: Right-click the *Start button* and select *Control Panel*. Click *Uninstall a program* in the *Programs* section, then select *AdGuard* from the list of installed apps and press the *Uninstall* button located right above the list. Confirm the action by clicking *Uninstall AdGuard* in the window that opens. +- For Microsoft Windows 8.1: Right-click the *Start button* and select *Control Panel*. Click *Uninstall a program* in the *Programs* section, then select *AdGuard* from the list of installed apps and press the *Uninstall* button located right above the list. Confirm the action by clicking *Uninstall AdGuard* in the window that opens. -* For Microsoft Windows 7: Open *Start Menu*. In the search box, type *Control Panel*. Click *Uninstall a program* in the *Programs* section, then select *AdGuard* from the list of installed apps and press the *Uninstall* button located right above the list. Confirm the action by clicking *Uninstall AdGuard* in the window that opens. +- For Microsoft Windows 7: Open *Start Menu*. In the search box, type *Control Panel*. Click *Uninstall a program* in the *Programs* section, then select *AdGuard* from the list of installed apps and press the *Uninstall* button located right above the list. Confirm the action by clicking *Uninstall AdGuard* in the window that opens. ![Windows 7 uninstallation *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/win7-uninstall.png) @@ -73,11 +73,11 @@ If you need to uninstall or reinstall AdGuard, do the following: In case regular uninstall doesn't work for any reason, you can try to use an advanced method. First of all, you need to [download the uninstaller tool](https://cdn.adtidy.org/distr/windows/Uninstall_Utility.zip) created by our developers. Extract the archive to any folder on your PC and run the **Adguard.UninstallUtility.exe** file, and allow the app to make changes to your device. Then follow the instruction below: -* Choose *Standard uninstall*, *Delete AdGuard* and click *Uninstall*. +- Choose *Standard uninstall*, *Delete AdGuard* and click *Uninstall*. ![Standard uninstall *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/standard-uninstall.png) -* Wait until uninstall is finished — there will be a string in the window: +- Wait until uninstall is finished — there will be a string in the window: `[OK] Uninstall finished` ![Uninstall finished *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/standard-uninstall-2.png) @@ -88,11 +88,11 @@ Follow the next steps only if after performing first two steps wasn’t enough f ::: -* Choose *Advanced uninstall* and click *Uninstall*. +- Choose *Advanced uninstall* and click *Uninstall*. ![Advanced uninstall *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/advanced-uninstall.png) -* Wait until uninstall is finished — there will be a string in the window: +- Wait until uninstall is finished — there will be a string in the window: `[OK] Uninstall finished` ![Uninstall finished *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/installation/advanced-uninstall-2.png) diff --git a/docs/adguard-for-windows/overview.md b/docs/adguard-for-windows/overview.md index b9e688fa8f1..4a6d1555725 100644 --- a/docs/adguard-for-windows/overview.md +++ b/docs/adguard-for-windows/overview.md @@ -38,13 +38,14 @@ This is the main module of AdGuard for Windows that removes ads from the website ![Ad Blocker *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/overview/ad-blocker.png) In the Ad Blocker module you can: -* enable automatic activation of language-specific filters, -* disable [search ads and self-promotion](/general/ad-filtering/search-ads) blocking, -* activate pre-installed filters such as *AdGuard Base filter*, -* install filters from the list or add a custom filter by clicking the *Add a filter* button, -* make changes to existing rule groups using the *Filter editor* button, -* see all the requests sent by browsers and apps installed on your computer by clicking the *Filtering log* button. From there you can also block or unblock any request by creating a custom rule, -* compose a filter from your own rules written manually, imported or created with the AdGuard Assistant extension. + +- enable automatic activation of language-specific filters, +- disable [search ads and self-promotion](/general/ad-filtering/search-ads) blocking, +- activate pre-installed filters such as *AdGuard Base filter*, +- install filters from the list or add a custom filter by clicking the *Add a filter* button, +- make changes to existing rule groups using the *Filter editor* button, +- see all the requests sent by browsers and apps installed on your computer by clicking the *Filtering log* button. From there you can also block or unblock any request by creating a custom rule, +- compose a filter from your own rules written manually, imported or created with the AdGuard Assistant extension. Before you start manually writing your own rules read our detailed [syntax guide](/general/ad-filtering/create-own-filters). @@ -63,9 +64,10 @@ To learn everything about Stealth Mode and its many options, [read this article] Browsing Security gives strong protection against malicious and fishing websites. No, AdGuard for Windows is not an antivirus. It will neither stop the download of a virus when it's already started, nor delete the already existing ones. But it will warn you if you're about to proceed to a website whose domain has been added to our "untrusted sites" database, or to download a file from such website. You can find more information about how this module works in the [dedicated article](/general/browsing-security). In this module you can -* enable notifications to block requests to malicious and phishing sites, -* activate sound notifications, -* agree to submit anonymous security-related info to the AdGuard server to help us keep the malicious and fishing websites database up to date. + +- enable notifications to block requests to malicious and phishing sites, +- activate sound notifications, +- agree to submit anonymous security-related info to the AdGuard server to help us keep the malicious and fishing websites database up to date. ![Browsing Security *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/overview/browsing-security.png) @@ -147,10 +149,10 @@ How does AdGuard VPN work? Without going into technical details, we can say that **What AdGuard VPN does:** -* hides your real whereabouts and helps you stay anonymous -* сhanges your IP address to protect your data from tracking -* encrypts your traffic to make it unreachable to scammers -* lets you configure where to use VPN and where not to (exclusions feature) +- hides your real whereabouts and helps you stay anonymous +- сhanges your IP address to protect your data from tracking +- encrypts your traffic to make it unreachable to scammers +- lets you configure where to use VPN and where not to (exclusions feature) To get more information about AdGuard VPN dive into the [AdGuard VPN Knowledge Base](https://adguard-vpn.com/kb/). @@ -169,8 +171,9 @@ By clicking the Support tab you will open a dialog box through which you can rep ![License *mobile_border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/overview/license.png) This tab contains information about your license. Here you can: -* find out the license type (nightly build, beta or release), the number of devices available for simultaneous connection to AdGuard, the license expiration date; -* click the button to go to the license purchase page, and activate, reset or recover a license. + +- find out the license type (nightly build, beta or release), the number of devices available for simultaneous connection to AdGuard, the license expiration date; +- click the button to go to the license purchase page, and activate, reset or recover a license. ### About @@ -188,13 +191,13 @@ To check for filters and userscripts updates, click the rotating arrows icon in To save you time navigating around AdGuard menus, many of the frequently used options and settings are available from the tray menu. To call the menu, right-click the AdGuard icon in the tray. It will offer you the following options: -* enable protection -* disable protection: completely or for 30 seconds -* go to *Settings* -* open the *Tools* and *Advanced* menus -* check for filter updates -* check for app updates -* to recall the last pop-up message -* reach the *Support* and *About* sections -* close AdGuard, but continue filtering -* exit AdGuard +- enable protection +- disable protection: completely or for 30 seconds +- go to *Settings* +- open the *Tools* and *Advanced* menus +- check for filter updates +- check for app updates +- to recall the last pop-up message +- reach the *Support* and *About* sections +- close AdGuard, but continue filtering +- exit AdGuard diff --git a/docs/adguard-for-windows/solving-problems/adguard-logs.md b/docs/adguard-for-windows/solving-problems/adguard-logs.md index 68b5beb603d..07f0bd58549 100644 --- a/docs/adguard-for-windows/solving-problems/adguard-logs.md +++ b/docs/adguard-for-windows/solving-problems/adguard-logs.md @@ -9,25 +9,25 @@ This article covers AdGuard for Windows, a multifunctional ad blocker that prote ::: -To analyse and diagnose different problems that may potentially arise, the AdGuard support service might need AdGuard log files. These files contain records about errors and other events that occurr with the software. Below is the brief instruction describing the way to get the log files and send them to the support service if necessary. +To analyze and diagnose different problems that may potentially arise, the AdGuard support service might need AdGuard log files. These files contain records about errors and other events that occurr with the software. Below is the brief instruction describing the way to get the log files and send them to the support service if necessary. 1. Open the AdGuard settings. Go to the *General Settings* section, scroll down to the end of the screen and switch the *Logging Level* to *Debug*. -![Debug logging level *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-1.png) + ![Debug logging level *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-1.png) -2. Reproduce the issue. +1. Reproduce the issue. -We strongly advise to take note of the exact time when you reproduced the issue: it will help our support team to find relevant log entries and solve the problem faster. + We strongly advise to take note of the exact time when you reproduced the issue: it will help our support team to find relevant log entries and solve the problem faster. -3. Export the recorded logs using the *Export Logs* button. +1. Export the recorded logs using the *Export Logs* button. -![Export logs *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-2.png) + ![Export logs *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-2.png) -Save the archive to any folder. + Save the archive to any folder. -4. **Important**: after exporting the logs, set the logging level back to *Standard*. *Debug* logging level will slow down the application. +1. **Important**: after exporting the logs, set the logging level back to *Standard*. *Debug* logging level will slow down the application. -5. Send the archive to the AdGuard support service at **support@adguard.com**, describe the problem and don't forget to mention the time when you reproduced the issue. +1. Send the archive to the AdGuard support service at **support@adguard.com**, describe the problem and don't forget to mention the time when you reproduced the issue. ### Trace logs {#trace-logs} @@ -35,22 +35,22 @@ Sometimes support team members may ask you to send *trace* logs. Then you will n 1. Stop AdGuard by right-clicking the AdGuard icon in the tray menu and choosing *Exit AdGuard*: -![Exit AdGuard *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-3.png) + ![Exit AdGuard *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-3.png) -Please don't leave the service running: + Please don't leave the service running: -![Stop AdGuard Service *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/eng_logs_4.png) + ![Stop AdGuard Service *mobile_border](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/eng_logs_4.png) -2. Open the console (type `cmd` in the start panel). +1. Open the console (type `cmd` in the start panel). -3. Run the app with the command `C:\"Program Files (x86)"\Adguard\Adguard.exe /trace` if you are using 64-bit Windows, and `C:\"Program Files"\Adguard\Adguard.exe /trace` in case if you use 32-bit one. +1. Run the app with the command `C:\"Program Files (x86)"\Adguard\Adguard.exe /trace` if you are using 64-bit Windows, and `C:\"Program Files"\Adguard\Adguard.exe /trace` in case if you use 32-bit one. -4. Reproduce the issue. +1. Reproduce the issue. -We strongly advise to take note of the exact time when you reproduced the issue: it will help our support team to find relevant log entries and solve the problem faster. + We strongly advise to take note of the exact time when you reproduced the issue: it will help our support team to find relevant log entries and solve the problem faster. -5. Export the recorded logs using the *Export Logs* button. +1. Export the recorded logs using the *Export Logs* button. -![Export logs *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-2.png) + ![Export logs *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/adg-logs-2.png) -Don't worry if the log file is large. We need to know as much detail as possible to fix your problem. + Don't worry if the log file is large. We need to know as much detail as possible to fix your problem. diff --git a/docs/adguard-for-windows/solving-problems/common-installer-errors.md b/docs/adguard-for-windows/solving-problems/common-installer-errors.md index 632a0646cd2..b7c3bf53a67 100644 --- a/docs/adguard-for-windows/solving-problems/common-installer-errors.md +++ b/docs/adguard-for-windows/solving-problems/common-installer-errors.md @@ -23,7 +23,6 @@ This error occurs when there's something wrong with permissions. There may be se ### Error 112: Disk is full, Error 1632: Temporary folder full or inaccessible {#error-112} - These are two different errors with very similar solutions. As their names suggest, AdGuard installer didn't find enough disk space to complete the installation. There are several things you can attempt to fix the problem: - Uninstall some programs or delete unnecessary files from the drive you were trying to install AdGuard to. diff --git a/docs/adguard-for-windows/solving-problems/connection-not-trusted.md b/docs/adguard-for-windows/solving-problems/connection-not-trusted.md index 5e75d5c9e02..908782d5207 100644 --- a/docs/adguard-for-windows/solving-problems/connection-not-trusted.md +++ b/docs/adguard-for-windows/solving-problems/connection-not-trusted.md @@ -25,31 +25,31 @@ If that doesn't help, follow the instructions for manually adding the AdGuard ce >This instruction is for Firefox browser. Names of buttons and menu items may differ in other Firefox-based browsers. -1) Run AdGuard. +1. Run AdGuard. -2) Go to [http://local.adguard.org/cert](http://local.adguard.org/cert) and click the *Download* button. The browser should start downloading **cert.cer** file. +1. Go to [http://local.adguard.org/cert](http://local.adguard.org/cert) and click the *Download* button. The browser should start downloading **cert.cer** file. >You can also open the download page by clicking on the link via the AdGuard app at *Settings → Network → HTTPS filtering*. ![Certificate settings](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/link.jpeg) -3) Open your browser and then open *Settings*. +1. Open your browser and then open *Settings*. -4) Go to *Privacy & Security* tab. +1. Go to *Privacy & Security* tab. -5) Scroll down to *Certificates* and click the *View Certificates* button. +1. Scroll down to *Certificates* and click the *View Certificates* button. ![View certificates window](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/import1.jpeg) -6) Select *Authorities* tab. +1. Select *Authorities* tab. -7) Click *Import...*. +1. Click *Import...*. ![Certificate settings — import](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/import2.jpeg) -8) Browse the downloaded **cert.cer** file and click *Open*. +1. Browse the downloaded **cert.cer** file and click *Open*. -9) Check the *Trust this CA to identify websites* box and then lick *OK*. +1. Check the *Trust this CA to identify websites* box and then lick *OK*. ![Certificate settings — checkbox](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/cert_checkbox.jpg) diff --git a/docs/adguard-for-windows/solving-problems/dns-leaks.md b/docs/adguard-for-windows/solving-problems/dns-leaks.md index ec667c44245..72f2121eb6d 100644 --- a/docs/adguard-for-windows/solving-problems/dns-leaks.md +++ b/docs/adguard-for-windows/solving-problems/dns-leaks.md @@ -20,10 +20,10 @@ In the case of IP addresses there are no difficulties: AdGuard forwards the DNS **To eliminate this leak:** -* go to the *Advanced settings* -* scroll down to the *List of custom bootstrap addresses* section -* enter the custom bootstrap address in IP address format (you may use [the list of known DNS providers](https://adguard-dns.io/kb/general/dns-providers/)) -* click *Save* +- go to the *Advanced settings* +- scroll down to the *List of custom bootstrap addresses* section +- enter the custom bootstrap address in IP address format (you may use [the list of known DNS providers](https://adguard-dns.io/kb/general/dns-providers/)) +- click *Save* ## Fallback DNS server @@ -31,19 +31,19 @@ It could happen that AdGuard cannot reach the specified server because of a weak **To eliminate this leak:** -* go to the *Advanced settings* -* scroll down to the *Fallback servers* section -* check the *Use custom servers* option -* then find the *List of custom fallback servers* section and enter custom fallback servers one per line +- go to the *Advanced settings* +- scroll down to the *Fallback servers* section +- check the *Use custom servers* option +- then find the *List of custom fallback servers* section and enter custom fallback servers one per line or -* go to the *Advanced settings* -* scroll down to the *Fallback servers* section -* check the *Don’t use fallback servers* option +- go to the *Advanced settings* +- scroll down to the *Fallback servers* section +- check the *Don’t use fallback servers* option or -* go to the *Advanced settings* -* scroll down to the *DNS server timeout period* section -* enter an arbitrary large number +- go to the *Advanced settings* +- scroll down to the *DNS server timeout period* section +- enter an arbitrary large number diff --git a/docs/adguard-for-windows/solving-problems/dump-file.md b/docs/adguard-for-windows/solving-problems/dump-file.md index 7d0b2d25df6..ab4f6842206 100644 --- a/docs/adguard-for-windows/solving-problems/dump-file.md +++ b/docs/adguard-for-windows/solving-problems/dump-file.md @@ -12,15 +12,18 @@ This article covers AdGuard for Windows, a multifunctional ad blocker that prote To diagnose the reasons for potential problems that users might encounter while using AdGuard, the support team might need the process dump file. The dump file helps developers to see the processes that were executed in the application over a given period of time. Below you can check on the instructions of how to collect the dump file on your PC. 1. Press **Ctrl + Shift + Esc** and click **Task Manager** -2. In the upper menu bar select **Details** -![Task Manager details](https://cdn.adtidy.org/public/Adguard/kb/Windows_dump/details_en.png) +1. In the upper menu bar select **Details** -3. Right-click the process that you want to create the dump file for (for example, the support team may ask you to create a dump for `Adguard.exe`) -4. In the drop-down menu click **Create dump file** -5. The file was created successfully! + ![Task Manager details](https://cdn.adtidy.org/public/Adguard/kb/Windows_dump/details_en.png) -![Create dump file](https://cdn.adtidy.org/public/Adguard/kb/Windows_dump/create_dump_file_en.png) +1. Right-click the process that you want to create the dump file for (for example, the support team may ask you to create a dump for `Adguard.exe`) + +1. In the drop-down menu click **Create dump file** + +1. The file was created successfully! + + ![Create dump file](https://cdn.adtidy.org/public/Adguard/kb/Windows_dump/create_dump_file_en.png) After you’ve created the dump file, please navigate to the file location. You should be prompted to open the folder containing the dump file right after its creation. Otherwise, you will be able to find it inside the **%tmp%** folder. The created dump file (`.DMP`) has the same name as the name of the process you chose in the previous steps. The file is quite large, so please compress it into an archive before sending to support. diff --git a/docs/adguard-for-windows/solving-problems/installation-logs.md b/docs/adguard-for-windows/solving-problems/installation-logs.md index 7a9e5fb0a73..223a8bcf421 100644 --- a/docs/adguard-for-windows/solving-problems/installation-logs.md +++ b/docs/adguard-for-windows/solving-problems/installation-logs.md @@ -13,12 +13,12 @@ If any problems occur during the installation of AdGuard, the support team might 1. Select *Run* command in Start menu or press *Win + R* on the keyboard. -2. Type in *%tmp%* and click *OK*. +1. Type in *%tmp%* and click *OK*. -![Open temp folder *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/install-logs-1.png) + ![Open temp folder *mobile](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/install-logs-1.png) -2. In the opened folder select all files starting with `Adguard` and add them to archive (using WinRAR or any other archiving software). +1. In the opened folder select all files starting with `Adguard` and add them to archive (using WinRAR or any other archiving software). -![AdGuard installation log files *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/install-logs-2.png) + ![AdGuard installation log files *border](https://cdn.adtidy.org/content/kb/ad_blocker/windows/solving-problems/install-logs-2.png) -3. Send this archive to AdGuard tech support at **support@adguard.com**. +1. Send this archive to AdGuard tech support at **support@adguard.com**. diff --git a/docs/adguard-for-windows/solving-problems/low-level-settings.md b/docs/adguard-for-windows/solving-problems/low-level-settings.md index ac72dec4ef5..032b3dbd126 100644 --- a/docs/adguard-for-windows/solving-problems/low-level-settings.md +++ b/docs/adguard-for-windows/solving-problems/low-level-settings.md @@ -181,17 +181,17 @@ AdGuard will redirect secure DNS requests to the local DNS proxy, in addition to Here you can select the way AdGuard will respond to domains blocked by DNS rules based on [hosts rule syntax](https://adguard-dns.io/kb/general/dns-filtering-syntax/#etc-hosts-syntax). -* Reply with “Refused” error -* Reply with “NxDomain” error -* Reply with a custom IP address +- Reply with “Refused” error +- Reply with “NxDomain” error +- Reply with a custom IP address ### Blocking mode for adblock-style rules Here you can select the way AdGuard will respond to domains blocked by DNS rules based on [adblock-style syntax](https://adguard-dns.io/kb/general/dns-filtering-syntax/#adblock-style-syntax). -* Reply with “Refused” error -* Reply with “NxDomain” error -* Reply with a custom IP address +- Reply with “Refused” error +- Reply with “NxDomain” error +- Reply with a custom IP address ### Custom IPv4 address @@ -205,9 +205,9 @@ If Custom IP address is selected in Blocking mode for hosts rules or Blocking mo Here you can specify an alternate DNS server to which a DNS request will be rerouted if the main server fails to respond within the timeout period specified in the next section. There are three options to choose from: -* Don’t use fallback servers; -* Use system default servers; -* Use custom servers. +- Don’t use fallback servers; +- Use system default servers; +- Use custom servers. ### Block ECH diff --git a/docs/adguard-for-windows/solving-problems/system-logs.md b/docs/adguard-for-windows/solving-problems/system-logs.md index 32b7304c48a..cb99a10f2ca 100644 --- a/docs/adguard-for-windows/solving-problems/system-logs.md +++ b/docs/adguard-for-windows/solving-problems/system-logs.md @@ -9,30 +9,30 @@ This article covers AdGuard for Windows, a multifunctional ad blocker that prote ::: -To analyse and diagnose different problems that may potentially arise, the AdGuard support service might need Windows system log files. Windows event logs contain records about all errors that occurr with the installed software, including AdGuard. Below is the brief instruction describing the way to get the log files and to send them to our support service if necessary. +To analyze and diagnose different problems that may potentially arise, the AdGuard support service might need Windows system log files. Windows event logs contain records about all errors that occurr with the installed software, including AdGuard. Below is the brief instruction describing the way to get the log files and to send them to our support service if necessary. 1. Press *Win + R* -2. In the window that appears type in `eventvwr` and click *OK*: +1. In the window that appears type in `eventvwr` and click *OK*: -![Run window *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/eng_event_logs_1.png) + ![Run window *mobile](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/eng_event_logs_1.png) -3. Event Viewer window appears as shown in the picture. +1. Event Viewer window appears as shown in the picture. -![Event viewer *border](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/eng_event_logs_2.png) + ![Event viewer *border](https://cdn.adtidy.org/public/Adguard/kb/newscreenshots/En/eng_event_logs_2.png) -To save files that we need, do the following: + To save files that we need, do the following: -- Open *Application*: *Event Viewer (Local)* → *Windows Logs* → *Application*. + - Open *Application*: *Event Viewer (Local)* → *Windows Logs* → *Application*. -- Right-click *Application* and in the drop-down menu select *Save All Events As...* + - Right-click *Application* and in the drop-down menu select *Save All Events As...* -- Select a name and where to save, click *Save*. Select *Display information for the following languages*. You need to tick the box next to *English*. Click *OK*. + - Select a name and where to save, click *Save*. Select *Display information for the following languages*. You need to tick the box next to *English*. Click *OK*. -- Open *System*: *Event Viewer (Local)* → *Windows Logs* → *System*. + - Open *System*: *Event Viewer (Local)* → *Windows Logs* → *System*. -- Right-click *System* and in the drop-down menu select *Save All Events As...* + - Right-click *System* and in the drop-down menu select *Save All Events As...* -- Choose a destination folder, enter the name, click *Save*. Select *Display information for the following languages*. You need to tick the box next to *English*. Click *OK*. + - Choose a destination folder, enter the name, click *Save*. Select *Display information for the following languages*. You need to tick the box next to *English*. Click *OK*. Please send the two files that you've recently saved to **support@adguard.com**. diff --git a/docs/general/account/2fa.md b/docs/general/account/2fa.md index 7f6349830a1..448f4838250 100644 --- a/docs/general/account/2fa.md +++ b/docs/general/account/2fa.md @@ -9,23 +9,23 @@ We see adding a 2FA option as a benefit. We also understand that enforcing it ma We recommend setting up two-factor authentication for your AdGuard account. It won't take you long, but it will help protect your license keys, subscriptions, and, most importantly, any personal information associated with the account. - ## How to set it up -1) Log into your [AdGuard account](https://auth.adguard.com/login.html) and go to the Settings tab: +1. Log into your [AdGuard account](https://auth.adguard.com/login.html) and go to the Settings tab: ![AdGuard Account settings *border](https://cdn.adtidy.org/content/kb/ad_blocker/general/account_settings.png) -2) Scroll down to *Password and 2FA* section and click **Enable**: +1. Scroll down to *Password and 2FA* section and click **Enable**: ![The Change button *border](https://cdn.adtidy.org/content/kb/ad_blocker/general/2fa_new.png) -3) Follow the on-screen instructions to install an authenticator app and scan the QR code: +1. Follow the on-screen instructions to install an authenticator app and scan the QR code: ![The verification code](https://cdn.adtidy.org/content/kb/ad_blocker/general/2fa_enable.png) ***Important*** -* Save the second-factor backup code somewhere, it will be necessary to recover your account in case your mobile phone gets lost or stolen; + +- Save the second-factor backup code somewhere, it will be necessary to recover your account in case your mobile phone gets lost or stolen; If everything is done right, you will see this when you log into your account the next time: @@ -33,4 +33,4 @@ If everything is done right, you will see this when you log into your account th Use your mobile authenticator app to read the code and enter it. You should be logged in now! -***NOTE***: If you get an authentication error, check the clock on your phone. Adjust it if needed, as an unsynchronized clock may be the cause of the error. \ No newline at end of file +***NOTE***: If you get an authentication error, check the clock on your phone. Adjust it if needed, as an unsynchronized clock may be the cause of the error. diff --git a/docs/general/account/features.md b/docs/general/account/features.md index 63947c58828..e45bf04e303 100644 --- a/docs/general/account/features.md +++ b/docs/general/account/features.md @@ -10,20 +10,22 @@ In your account, you can manage your licenses, devices bound to them, personal d In the *Settings* section of your AdGuard account, you can update or reset your password, change your email address, enable [two-factor authentication](../2fa), view the data stored about you by AdGuard and choose the language of your personal account and notifications. In this section, you can also manage your email preferences: -* receive transactional emails, -* receive AdGuard’s monthly newsletters, -* receive emails about AdGuard special offers and promotions, -* send read receipts to AdGuard when you open emails. + +- receive transactional emails, +- receive AdGuard’s monthly newsletters, +- receive emails about AdGuard special offers and promotions, +- send read receipts to AdGuard when you open emails. ## Manage licenses In the *Licenses* section, you can manage your licenses and the devices bound to them. [AdGuard licenses](../../license/what-is) can be: -* bound and unbound, -* extended, -* upgraded, -* canceled. + +- bound and unbound, +- extended, +- upgraded, +- canceled. You can also update your payment details. The devices bound to your AdGuard Ad Blocker licenses can be unbound or renamed. You can unbind unused devices by clicking the cross icon next to them. diff --git a/docs/general/ad-filtering/adguard-filters.md b/docs/general/ad-filtering/adguard-filters.md index 94c428d935c..d018956d91f 100644 --- a/docs/general/ad-filtering/adguard-filters.md +++ b/docs/general/ad-filtering/adguard-filters.md @@ -13,29 +13,29 @@ This article is about the filters we create to use in AdGuard and other ad-block ## AdGuard filters -* **Base filter** removes ads from websites with English content. Originally based on [EasyList](https://easylist.to/) and modified by us. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_Base/filter.txt) -* **Tracking Protection filter** — comprehensive list of various online counters and web analytics tools. Use it to hide your actions online and avoid tracking. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_3_Spyware/filter.txt) -* **URL Tracking filter** enhances privacy by removing tracking parameters from URLs. When a user opts to block tracking parameters in Stealth Mode, this filter will be enabled automatically. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_17_TrackParam/filter.txt) -* **Social media filter** removes numerous "Like" and "Tweet" buttons and other social media integrations on popular websites. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_4_Social/filter.txt) -* **Annoyances filter** blocks irritating elements on web pages. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_14_Annoyances/filter.txt) +- **Base filter** removes ads from websites with English content. Originally based on [EasyList](https://easylist.to/) and modified by us. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_Base/filter.txt) +- **Tracking Protection filter** — comprehensive list of various online counters and web analytics tools. Use it to hide your actions online and avoid tracking. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_3_Spyware/filter.txt) +- **URL Tracking filter** enhances privacy by removing tracking parameters from URLs. When a user opts to block tracking parameters in Stealth Mode, this filter will be enabled automatically. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_17_TrackParam/filter.txt) +- **Social media filter** removes numerous "Like" and "Tweet" buttons and other social media integrations on popular websites. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_4_Social/filter.txt) +- **Annoyances filter** blocks irritating elements on web pages. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_14_Annoyances/filter.txt) Includes the following AdGuard filters (all of them can be enabled separately from the Annoyances filter): - * **Cookie Notices** blocks cookie notices on web pages. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_18_Annoyances_Cookies/filter.txt) - * **Popups** blocks all kinds of pop-ups that are not necessary for websites' operation. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_19_Annoyances_Popups/filter.txt) - * **Mobile App Banners** blocks banners that promote mobile apps of websites. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_20_Annoyances_MobileApp/filter.txt) - * **Widgets** blocks third-party widgets: online assistants, live support chats, etc. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_22_Annoyances_Widgets/filter.txt) - * **Other Annoyances** blocks elements that do not fall under the popular categories of annoyances. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_21_Annoyances_Other/filter.txt) -* **Filter unblocking search ads and self-promotions** unblocks ads that may be useful to users. Learn more about this filter on [this page](../search-ads). [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_10_Useful/filter.txt) -* **Russian filter** removes ads from websites in Russian. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_1_Russian/filter.txt) -* **German filter** removes ads from websites in German. Originally based on the [EasyList Germany](https://easylist.to/) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_6_German/filter.txt) -* **French filter** removes ads from websites in French. Originally based on the [Liste FR](https://forums.lanik.us/viewforum.php?f=91) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_16_French/filter.txt) -* **Japanese filter** removes ads from websites in Japanese. Originally based on the [Fanboy’s Japanese](https://www.fanboy.co.nz/fanboy-japanese.txt) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_7_Japanese/filter.txt) -* **Dutch filter** removes ads from websites in Dutch. Originally based on the [EasyList Dutch](https://easylist.to/) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_8_Dutch/filter.txt) -* **Spanish/Portuguese filter** removes ads from websites in Spanish and Portuguese. Originally based on the [Fanboy’s Spanish/Portuguese](https://www.fanboy.co.nz/fanboy-espanol.txt) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_9_Spanish/filter.txt) -* **Turkish filter** removes ads from websites in Turkish. Created by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_13_Turkish/filter.txt) -* **Chinese filter** removes ads from websites in Chinese. Originally based on the [EasyList China](https://github.com/easylist/easylistchina) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_224_Chinese/filter.txt) -* **Experimental 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. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_5_Experimental/filter.txt) -* **Mobile ads filter** blocks ads on mobile devices. Contains all known mobile ad networks. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_11_Mobile/filter.txt) -* **DNS filter** — composed of several other filters (AdGuard Base filter, Social media filter, Spyware filter, Mobile ads filter, EasyList and EasyPrivacy) and simplified specifically to be better compatible with DNS-level ad blocking. This filter is used by [AdGuard DNS](https://adguard-dns.io/kb) servers to block ads and tracking. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_15_DnsFilter/filter.txt) + - **Cookie Notices** blocks cookie notices on web pages. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_18_Annoyances_Cookies/filter.txt) + - **Popups** blocks all kinds of pop-ups that are not necessary for websites' operation. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_19_Annoyances_Popups/filter.txt) + - **Mobile App Banners** blocks banners that promote mobile apps of websites. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_20_Annoyances_MobileApp/filter.txt) + - **Widgets** blocks third-party widgets: online assistants, live support chats, etc. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_22_Annoyances_Widgets/filter.txt) + - **Other Annoyances** blocks elements that do not fall under the popular categories of annoyances. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_21_Annoyances_Other/filter.txt) +- **Filter unblocking search ads and self-promotions** unblocks ads that may be useful to users. Learn more about this filter on [this page](../search-ads). [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_10_Useful/filter.txt) +- **Russian filter** removes ads from websites in Russian. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_1_Russian/filter.txt) +- **German filter** removes ads from websites in German. Originally based on the [EasyList Germany](https://easylist.to/) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_6_German/filter.txt) +- **French filter** removes ads from websites in French. Originally based on the [Liste FR](https://forums.lanik.us/viewforum.php?f=91) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_16_French/filter.txt) +- **Japanese filter** removes ads from websites in Japanese. Originally based on the [Fanboy’s Japanese](https://www.fanboy.co.nz/fanboy-japanese.txt) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_7_Japanese/filter.txt) +- **Dutch filter** removes ads from websites in Dutch. Originally based on the [EasyList Dutch](https://easylist.to/) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_8_Dutch/filter.txt) +- **Spanish/Portuguese filter** removes ads from websites in Spanish and Portuguese. Originally based on the [Fanboy’s Spanish/Portuguese](https://www.fanboy.co.nz/fanboy-espanol.txt) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_9_Spanish/filter.txt) +- **Turkish filter** removes ads from websites in Turkish. Created by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_13_Turkish/filter.txt) +- **Chinese filter** removes ads from websites in Chinese. Originally based on the [EasyList China](https://github.com/easylist/easylistchina) filter and subsequently modified by us according to the complaints from users. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_224_Chinese/filter.txt) +- **Experimental 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. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_5_Experimental/filter.txt) +- **Mobile ads filter** blocks ads on mobile devices. Contains all known mobile ad networks. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_11_Mobile/filter.txt) +- **DNS filter** — composed of several other filters (AdGuard Base filter, Social media filter, Spyware filter, Mobile ads filter, EasyList and EasyPrivacy) and simplified specifically to be better compatible with DNS-level ad blocking. This filter is used by [AdGuard DNS](https://adguard-dns.io/kb) servers to block ads and tracking. [View rules](https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_15_DnsFilter/filter.txt) ## AdGuard Filters Policy diff --git a/docs/general/ad-filtering/create-own-filters.md b/docs/general/ad-filtering/create-own-filters.md index cf6603fe611..422381ccc59 100644 --- a/docs/general/ad-filtering/create-own-filters.md +++ b/docs/general/ad-filtering/create-own-filters.md @@ -29,7 +29,7 @@ Any line that starts with an exclamation mark is a comment. In the list of rules For example: -``` +```adblock ! This is the comment. Below this line, there is an actual filtering rule. ||example.org^ ``` @@ -42,14 +42,14 @@ For example: **This rule blocks:** -* `http://example.org/ad1.gif` -* `http://subdomain.example.org/ad1.gif` -* `https://ads.example.org:8000/` +- `http://example.org/ad1.gif` +- `http://subdomain.example.org/ad1.gif` +- `https://ads.example.org:8000/` **This rule does not block:** -* `http://ads.example.org.us/ad1.gif` -* `http://example.com/redirect/http://ads.example.org/` +- `http://ads.example.org.us/ad1.gif` +- `http://example.com/redirect/http://ads.example.org/` ### Blocking exact address @@ -57,11 +57,11 @@ For example: **This rule blocks:** -* `http://example.org/` +- `http://example.org/` **This rule does not block:** -* `https://example.org/banner/img` +- `https://example.org/banner/img` ### Basic rule modifiers @@ -71,20 +71,20 @@ Filtering rules support numerous modifiers that allow you to fine-tune the rule **This rule blocks:** -* `http://example.org/script.js` if this script is loaded from `example.org`. +- `http://example.org/script.js` if this script is loaded from `example.org`. **This rule does not block:** -* `https://example.org/script.js` if this script is loaded from `example.org`. -* `https://example.org/banner.png` because it is not a script. +- `https://example.org/script.js` if this script is loaded from `example.org`. +- `https://example.org/banner.png` because it is not a script. ### Unblocking an address -![](https://cdn.adtidy.org/content/kb/ad_blocker/general/3_basic_exception.svg) +![Unblocking an address](https://cdn.adtidy.org/content/kb/ad_blocker/general/3_basic_exception.svg) **This rule unblocks:** -* `http://example.org/banner.png` even if there is a blocking rule for this address. +- `http://example.org/banner.png` even if there is a blocking rule for this address. Blocking rules with [`$important`](#important-modifier) modifier can override exceptions. @@ -94,8 +94,8 @@ Blocking rules with [`$important`](#important-modifier) modifier can override ex **This rule unblocks** -* It disables all cosmetic rules on `example.com`. -* It unblocks all requests sent from this website even if there is are blocking rules matching these requests. +- It disables all cosmetic rules on `example.com`. +- It unblocks all requests sent from this website even if there is are blocking rules matching these requests. ### Cosmetic rule @@ -109,22 +109,23 @@ AdGuard [extends CSS](#extended-css-selectors) and lets filters developers handl | Name | CSS selector | Description | | ------| ------ | ----------- | -| ID selector | `#banners` | Matches all elements with `id` attribute equal to `banners`.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_id_selector.png) | -| Class selector | `.banners` | Matches all elements with `class` attribute containing `banners`.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_selector.png) | -| Attribute selector | `div[class="banners"]` | Matches all `div` elements with `class` attribute **exactly equal** to `banners`.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_attr.png) | -| Attribute substring selector | `div[class^="advert1"]` | Matches all `div` elements which `class` attribute **starts with** the `advert1` string.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_attr_start.png) | -| Attribute substring selector | `div[class$="banners_ads"]` | Matches all `div` elements which `class` attribute **ends with** the `banners_ads` string.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_attr_end.png) | -| Attribute substring selector | `a[href^="http://example.com/"]` | Matches all links that are loaded from `http://example.com/` domain.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_attr_start.png) | -| Attribute selector | `a[href="http://example.com/"]` | Matches all links to **exactly** the `http://example.com/` address.
![](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_attr_equal.png) | +| ID selector | `#banners` | Matches all elements with `id` attribute equal to `banners`.
![ID selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_id_selector.png) | +| Class selector | `.banners` | Matches all elements with `class` attribute containing `banners`.
![Class selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_selector.png) | +| Attribute selector | `div[class="banners"]` | Matches all `div` elements with `class` attribute **exactly equal** to `banners`.
![Attribute selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_attr.png) | +| Attribute substring selector | `div[class^="advert1"]` | Matches all `div` elements which `class` attribute **starts with** the `advert1` string.
![Attribute substring selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_attr_start.png) | +| Attribute substring selector | `div[class$="banners_ads"]` | Matches all `div` elements which `class` attribute **ends with** the `banners_ads` string.
![Attribute substring selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_class_attr_end.png) | +| Attribute substring selector | `a[href^="http://example.com/"]` | Matches all links that are loaded from `http://example.com/` domain.
![Attribute substring selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_attr_start.png) | +| Attribute selector | `a[href="http://example.com/"]` | Matches all links to **exactly** the `http://example.com/` address.
![Attribute selector](https://cdn.adtidy.org/public/Adguard/kb/en/rules_syntax/css_attr_equal.png) | ## Restrictions and limitations ### Trusted filters {#trusted-filters} Some rules can be used only in trusted filters. This category includes: -* filter lists [created by the AdGuard team](../adguard-filters), -* custom filter lists installed as `trusted`, -* user rules. + +- filter lists [created by the AdGuard team](../adguard-filters), +- custom filter lists installed as `trusted`, +- user rules. ### AdGuard Content Blocker @@ -133,9 +134,9 @@ It is not to be confused with the fully functional AdGuard for Android that can [our website](https://adguard.com/adguard-android/overview.html). Unfortunately, AdGuard Content Blocker capabilities are limited by what the browsers allow and they only support an old Adblock Plus filters syntax: -* Basic blocking rules with the following modifiers: `$domain`, `$third-party`, [content-type modifiers](#content-type-modifiers). -* Basic exception rules with the following modifiers: `$document`, `$elemhide`. -* Basic [element hiding rules](#cosmetic-elemhide-rules) with no extended CSS support. +- Basic blocking rules with the following modifiers: `$domain`, `$third-party`, [content-type modifiers](#content-type-modifiers). +- Basic exception rules with the following modifiers: `$document`, `$elemhide`. +- Basic [element hiding rules](#cosmetic-elemhide-rules) with no extended CSS support. Because of the limitations above AdGuard Content Blocker will not be mentioned in the compatibility notes. @@ -157,21 +158,21 @@ Browser detects a blocked request as completed with an error. ### Basic rules syntax {#basic-rules-syntax} -``` +```text rule = ["@@"] pattern [ "$" modifiers ] modifiers = [modifier0, modifier1[, ...[, modifierN]]] ``` -* **`pattern`** — an address mask. Every request URL is collated to this mask. You can also use special characters in the template, their description is [below](#basic-rules-special-characters). Note that AdGuard trims URLs to a length of 4096 characters in order to speed up matching and avoid issues with ridiculously long URLs. -* **`@@`** — a marker that is used in rules of exception. To turn off filtering for a request, start your rule with this marker. -* **`modifiers`** — parameters that "clarify" the basic rule. Some of them limit the rule scope and some can completely change they way it works. +- **`pattern`** — an address mask. Every request URL is collated to this mask. You can also use special characters in the template, their description is [below](#basic-rules-special-characters). Note that AdGuard trims URLs to a length of 4096 characters in order to speed up matching and avoid issues with ridiculously long URLs. +- **`@@`** — a marker that is used in rules of exception. To turn off filtering for a request, start your rule with this marker. +- **`modifiers`** — parameters that "clarify" the basic rule. Some of them limit the rule scope and some can completely change they way it works. ### Special characters {#basic-rules-special-characters} -* **`*`** — a wildcard character. It is used to represent "any set of characters". This can also be an empty string or a string of any length. -* **`||`** — matching the beginning of an address. With this character you do not have to specify a particular protocol and subdomain in address mask. It means, `||` stands for `http://*.`, `https://*.`, `ws://*.`, `wss://*.` at once. -* **`^`** — a separator character mark. Separator character is any character, but a letter, a digit, or one of the following: `_` `-` `.` `%`. In this example separator characters are shown in bold: `http:`**`//`**`example.com`**`/?`**`t=1`**`&`**`t2=t3`. The end of the address is also accepted as separator. -* **`|`** — a pointer to the beginning or the end of address. The value depends on the character placement in the mask. For example, a rule `swf|` corresponds to `http://example.com/annoyingflash.swf` , but not to `http://example.com/swf/index.html`. `|http://example.org` corresponds to `http://example.org`, but not to `http://domain.com?url=http://example.org`. +- **`*`** — a wildcard character. It is used to represent "any set of characters". This can also be an empty string or a string of any length. +- **`||`** — matching the beginning of an address. With this character you do not have to specify a particular protocol and subdomain in address mask. It means, `||` stands for `http://*.`, `https://*.`, `ws://*.`, `wss://*.` at once. +- **`^`** — a separator character mark. Separator character is any character, but a letter, a digit, or one of the following: `_` `-` `.` `%`. In this example separator characters are shown in bold: `http:`**`//`**`example.com`**`/?`**`t=1`**`&`**`t2=t3`. The end of the address is also accepted as separator. +- **`|`** — a pointer to the beginning or the end of address. The value depends on the character placement in the mask. For example, a rule `swf|` corresponds to `http://example.com/annoyingflash.swf` , but not to `http://example.com/swf/index.html`. `|http://example.org` corresponds to `http://example.org`, but not to `http://domain.com?url=http://example.org`. :::note Visual representation @@ -190,7 +191,8 @@ Rules with regular expressions work more slowly, therefore it is recommended to ::: If you want a blocker to determine a regular expression, the `pattern` has to look like this: -``` + +```text pattern = "/" regexp "/" ``` @@ -220,17 +222,17 @@ Rules with wildcard for TLD are not supported by AdGuard Content Blocker. ### Basic rules examples -* `||example.com/ads/*` — a simple rule, which corresponds to addresses like `http://example.com/ads/banner.jpg` and even `http://subdomain.example.com/ads/otherbanner.jpg`. +- `||example.com/ads/*` — a simple rule, which corresponds to addresses like `http://example.com/ads/banner.jpg` and even `http://subdomain.example.com/ads/otherbanner.jpg`. -* `||example.org^$third-party` — this rule blocks third-party requests to `example.org` and its subdomains. +- `||example.org^$third-party` — this rule blocks third-party requests to `example.org` and its subdomains. -* `@@||example.com$document` — general exception rule. It completely disables filtering for `example.com` and all subdomains. There is a number of modifiers which can be used in exception rules. For more details, please follow the link [below](#exception-modifiers). +- `@@||example.com$document` — general exception rule. It completely disables filtering for `example.com` and all subdomains. There is a number of modifiers which can be used in exception rules. For more details, please follow the link [below](#exception-modifiers). ### Basic rules modifiers -* [Basic modifiers](#basic-rules-basic-modifiers) -* [Content-type modifiers](#content-type-modifiers) -* [Exception modifiers](#exception-modifiers) +- [Basic modifiers](#basic-rules-basic-modifiers) +- [Content-type modifiers](#content-type-modifiers) +- [Exception modifiers](#exception-modifiers) :::note @@ -241,24 +243,25 @@ The features described in this section are intended for experienced users. They You can change the behavior of a "basic rule" by using additional modifiers. Modifiers should be located in the end of the rule after a `$` sign and be separated by commas. Example: -``` + +```adblock ||domain.com^$popup,third-party ``` ### Basic modifiers {#basic-rules-basic-modifiers} -[//]: # (Please keep them sorted) + -* [`$app`](#app-modifier) -* [`$denyallow`](#denyallow-modifier) -* [`$domain`](#domain-modifier) -* [`$header`](#header-modifier) -* [`$important`](#important-modifier) -* [`$match-case`](#match-case-modifier) -* [`$method`](#method-modifier) -* [`$popup`](#popup-modifier) -* [`$third-party`](#third-party-modifier) -* [`$to`](#to-modifier) +- [`$app`](#app-modifier) +- [`$denyallow`](#denyallow-modifier) +- [`$domain`](#domain-modifier) +- [`$header`](#header-modifier) +- [`$important`](#important-modifier) +- [`$match-case`](#match-case-modifier) +- [`$method`](#method-modifier) +- [`$popup`](#popup-modifier) +- [`$third-party`](#third-party-modifier) +- [`$to`](#to-modifier) The following modifiers are the most simple and frequently used. Basically, they just limit the scope of rule application. @@ -266,26 +269,26 @@ The following modifiers are the most simple and frequently used. Basically, they This modifier lets you narrow the rule coverage down to a specific application (or a list of applications). This might be not too important on Windows and Mac, but this is very important on mobile devices where some of the filtering rules must be app-specific. -* Android — use the app package name, e.g. `org.example.app`. -* Windows — use the process name, e.g. `chrome.exe`. -* Mac — use the bundle ID or the process name, e.g. `com.google.Chrome`. +- Android — use the app package name, e.g. `org.example.app`. +- Windows — use the process name, e.g. `chrome.exe`. +- Mac — use the bundle ID or the process name, e.g. `com.google.Chrome`. For Mac, you can find out the bundle ID or the process name of the app by viewing the respective request details in the Filtering log. **Examples** -* `||baddomain.com^$app=org.example.app` — a rule to block requests that match the specified mask and are sent from the `org.example.app` Android app. -* `||baddomain.com^$app=org.example.app1|org.example.app2` — the same rule but it works for both `org.example.app1` and `org.example.app2` apps. +- `||baddomain.com^$app=org.example.app` — a rule to block requests that match the specified mask and are sent from the `org.example.app` Android app. +- `||baddomain.com^$app=org.example.app1|org.example.app2` — the same rule but it works for both `org.example.app1` and `org.example.app2` apps. If you want the rule not to be applied to certain apps, start the app name with the `~` sign. -* `||baddomain.com^$app=~org.example.app` — a rule to block requests that match the specified mask and are sent from any app save for the `org.example.app`. -* `||baddomain.com^$app=~org.example.app1|~org.example.app2` — same as above, but now two apps are excluded: `org.example.app1` and `org.example.app2`. +- `||baddomain.com^$app=~org.example.app` — a rule to block requests that match the specified mask and are sent from any app save for the `org.example.app`. +- `||baddomain.com^$app=~org.example.app1|~org.example.app2` — same as above, but now two apps are excluded: `org.example.app1` and `org.example.app2`. :::info Compatibility -* Only AdGuard for Windows, Mac, Android are technically capable of using rules with `$app` modifier. -* On Windows the process name is case-insensitive starting with AdGuard for Windows versions that have CoreLibs v1.12 under the hood. +- Only AdGuard for Windows, Mac, Android are technically capable of using rules with `$app` modifier. +- On Windows the process name is case-insensitive starting with AdGuard for Windows versions that have CoreLibs v1.12 under the hood. ::: @@ -298,17 +301,20 @@ Adding this modifier to a rule is equivalent to excluding the domains by the rul **Examples** This rule: -``` + +```adblock *$script,domain=a.com|b.com,denyallow=x.com|y.com ``` is equivalent to this one: -``` + +```adblock /^(?!.*(x.com|y.com)).*$/$script,domain=a.com|b.com ``` or to the combination of these three: -``` + +```adblock *$script,domain=a.com|b.com @@||x.com$script,domain=a.com|b.com @@||y.com$script,domain=a.com|b.com @@ -316,8 +322,8 @@ or to the combination of these three: :::caution Restrictions -* The rule's matching pattern cannot target any specific domains, e.g. it cannot start with `||`. -* Domains in the modifier value cannot be negated, e.g. `$denyallow=~x.com`, or have a wildcard TLD, e.g. `$denyallow=x.*`. +- The rule's matching pattern cannot target any specific domains, e.g. it cannot start with `||`. +- Domains in the modifier value cannot be negated, e.g. `$denyallow=~x.com`, or have a wildcard TLD, e.g. `$denyallow=x.*`. The rules which violate these restrictions are considered invalid. @@ -337,14 +343,14 @@ Rules with `$denyallow` modifier are not supported by AdGuard for iOS, Safari, a The modifier is a list of one or more expressions separated by the `|` symbol, each of which is matched against a domain in a particular way depending on its type (see below). -``` +```text domains = ["~"] entry_0 ["|" ["~"] entry_1 ["|" ["~"]entry_2 ["|" ... ["|" ["~"]entry_N]]]] entry_i = ( regular_domain / any_tld_domain / regexp ) ``` -* **`regular_domain`** — a regular domain name (`domain.com`). Corresponds the specified domain and its subdomains. It is matched lexicographically. -* **`any_tld_domain`** — a domain name ending with a wildcard character as a [public suffix](https://publicsuffix.org/learn/), e.g. for `example.*` it is `co.uk` in `example.co.uk`. Corresponds to the specified domain and its subdomains with any public suffix. It is matched lexicographically. -* **`regexp`** — a regular expression, starts and ends with `/`. The pattern works the same way as in the basic URL rules, but the characters `/`, `$`, and `|` must be escaped with `\`. +- **`regular_domain`** — a regular domain name (`domain.com`). Corresponds the specified domain and its subdomains. It is matched lexicographically. +- **`any_tld_domain`** — a domain name ending with a wildcard character as a [public suffix](https://publicsuffix.org/learn/), e.g. for `example.*` it is `co.uk` in `example.co.uk`. Corresponds to the specified domain and its subdomains with any public suffix. It is matched lexicographically. +- **`regexp`** — a regular expression, starts and ends with `/`. The pattern works the same way as in the basic URL rules, but the characters `/`, `$`, and `|` must be escaped with `\`. :::info @@ -356,19 +362,19 @@ Rules with `$domain` modifier as `regular_domain` or `any_tld_domain` are suppor **Just `$domain`:** -* `||baddomain.com^$domain=example.org` blocks requests that match the specified mask, and are sent from domain `example.org` or its subdomains. -* `||baddomain.com^$domain=example.org|example.com` — the same rule, but it works for both `example.org` and `example.com`. +- `||baddomain.com^$domain=example.org` blocks requests that match the specified mask, and are sent from domain `example.org` or its subdomains. +- `||baddomain.com^$domain=example.org|example.com` — the same rule, but it works for both `example.org` and `example.com`. If you want the rule not to be applied to certain domains, start a domain name with `~` sign. **`$domain` and negation `~`:** -* `||baddomain.com^$domain=example.org` blocks requests that match the specified mask and are sent from the `example.org` domain or its subdomains. -* `||baddomain.com^$domain=example.org|example.com` — the same rule, but it works for both `example.org` and `example.com`. -* `||baddomain.com^$domain=~example.org` blocks requests matching the pattern sent from any domain except `example.org` and its subdomains. -* `||baddomain.com^$domain=example.org|~foo.example.org` blocks requests sent from `example.org` and its subdomains, except the subdomain `foo.example.org`. -* `||baddomain.com^$domain=/(^\|.+\.)example\.(com\|org)\$/` blocks requests sent from `example.org` and `example.com` domains and all their subdomains. -* `||baddomain.com^$domain=~a.com|~b.*|~/(^\|.+\.)c\.(com\|org)\$/` blocks requests sent from any domains, except `a.com`, `b` with any public suffix (`b.com`, `b.co.uk`, etc.), `c.com`, `c.org`, and their subdomains. +- `||baddomain.com^$domain=example.org` blocks requests that match the specified mask and are sent from the `example.org` domain or its subdomains. +- `||baddomain.com^$domain=example.org|example.com` — the same rule, but it works for both `example.org` and `example.com`. +- `||baddomain.com^$domain=~example.org` blocks requests matching the pattern sent from any domain except `example.org` and its subdomains. +- `||baddomain.com^$domain=example.org|~foo.example.org` blocks requests sent from `example.org` and its subdomains, except the subdomain `foo.example.org`. +- `||baddomain.com^$domain=/(^\|.+\.)example\.(com\|org)\$/` blocks requests sent from `example.org` and `example.com` domains and all their subdomains. +- `||baddomain.com^$domain=~a.com|~b.*|~/(^\|.+\.)c\.(com\|org)\$/` blocks requests sent from any domains, except `a.com`, `b` with any public suffix (`b.com`, `b.co.uk`, etc.), `c.com`, `c.org`, and their subdomains. **`$domain` modifier matching target domain:** @@ -380,9 +386,11 @@ In some cases the `$domain` modifier can match not only the referrer domain, but 1. The `$domain` modifier contains only excluded domains, e.g. `$domain=~example.org|~example.com`. The following predicate should be satisfied to perform a target domain matching: -``` + +```text 1 AND ((2 AND 3) OR 4) ``` + That is, if the modifier `$domain` contains only excluded domains, then the rule does not need to meet the second and third conditions to match the target domain against the modifier `$domain`. If some of the conditions above are not met but the rule contains [`$cookie`](#cookie-modifier) or [`$csp`](#csp-modifier) modifier, the target domain will still be matched. @@ -391,19 +399,19 @@ If the referrer matches a rule with `$domain` that explicitly excludes the refer **Examples** -* `*$cookie,domain=example.org|example.com` will block cookies for all requests to and from `example.org` and `example.com`. -* `*$document,domain=example.org|example.com` will block all requests to and from `example.org` and `example.com`. +- `*$cookie,domain=example.org|example.com` will block cookies for all requests to and from `example.org` and `example.com`. +- `*$document,domain=example.org|example.com` will block all requests to and from `example.org` and `example.com`. In the following examples it is implied that requests are sent from `http://example.org/page` (the referrer) and the target URL is `http://targetdomain.com/page`. -* `page$domain=example.org` will be matched, as it matches the referrer domain. -* `page$domain=targetdomain.com` will be matched, as it matches the target domain and satisfies all requirements mentioned above. -* `||*page$domain=targetdomain.com` will not be matched, as the pattern `||*page` may match specific domains, +- `page$domain=example.org` will be matched, as it matches the referrer domain. +- `page$domain=targetdomain.com` will be matched, as it matches the target domain and satisfies all requirements mentioned above. +- `||*page$domain=targetdomain.com` will not be matched, as the pattern `||*page` may match specific domains, e.g. `example.page`. -* `||*page$domain=targetdomain.com,cookie` will be matched because the rule contains `$cookie` modifier +- `||*page$domain=targetdomain.com,cookie` will be matched because the rule contains `$cookie` modifier despite the pattern `||*page` may match specific domains. -* `/banner\d+/$domain=targetdomain.com` will not be matched as it contains a regular expression. -* `page$domain=targetdomain.com|~example.org` will not be matched because the referrer domain is explicitly excluded. +- `/banner\d+/$domain=targetdomain.com` will not be matched as it contains a regular expression. +- `page$domain=targetdomain.com|~example.org` will not be matched because the referrer domain is explicitly excluded. :::caution Limitations @@ -425,25 +433,26 @@ The `$header` modifier allows matching the HTTP response having a specific heade **Syntax** -``` +```text $header "=" h_name [":" h_value] h_value = string / regexp ``` where: - * **`h_name`** — required, an HTTP header name. It is matched case-insesitively. - * **`h_value`** — optional, an HTTP header value matching expression, it may be one of the following: - * **`string`** — a sequence of characters. It is matched against the header value lexicographically; - * **`regexp`** — a regular expression, starts and ends with `/`. The pattern works the same way as in the basic URL rules, but the characters `/`, `$` and `,` must be escaped with `\`. + +- **`h_name`** — required, an HTTP header name. It is matched case-insesitively. +- **`h_value`** — optional, an HTTP header value matching expression, it may be one of the following: + - **`string`** — a sequence of characters. It is matched against the header value lexicographically; + - **`regexp`** — a regular expression, starts and ends with `/`. The pattern works the same way as in the basic URL rules, but the characters `/`, `$` and `,` must be escaped with `\`. The modifier `":" h_value` part may be omitted. In that case, the modifier matches the header name only. **Examples** -* `||example.com^$header=set-cookie:foo` blocks requests whose responses have the `Set-Cookie` header with the value matching `foo` literally. -* `||example.com^$header=set-cookie` blocks requests whose responses have the `Set-Cookie` header with any value. -* `@@||example.com^$header=set-cookie:/foo\, bar\$/` unblocks requests whose responses have the `Set-Cookie` header with value matching the `foo, bar$` regular expression. -* `@@||example.com^$header=set-cookie` unblocks requests whose responses have a `Set-Cookie` header with any value. +- `||example.com^$header=set-cookie:foo` blocks requests whose responses have the `Set-Cookie` header with the value matching `foo` literally. +- `||example.com^$header=set-cookie` blocks requests whose responses have the `Set-Cookie` header with any value. +- `@@||example.com^$header=set-cookie:/foo\, bar\$/` unblocks requests whose responses have the `Set-Cookie` header with value matching the `foo, bar$` regular expression. +- `@@||example.com^$header=set-cookie` unblocks requests whose responses have a `Set-Cookie` header with any value. :::info Compatibility @@ -459,13 +468,13 @@ Go to [rules priorities](#rule-priorities) for more details. **Examples** -``` +```adblock ! blocking rule will block all requests despite of the exception rule ||example.org^$important @@||example.org^ ``` -``` +```adblock ! if the exception rule also has `$important` modifier, it will prevail and requests won't be blocked ||example.org^$important @@||example.org^$important @@ -477,7 +486,7 @@ This modifier defines a rule which applies only to addresses that match the case **Examples** -* `*/BannerAd.gif$match-case` — this rule will block `http://example.com/BannerAd.gif`, but not `http://example.com/bannerad.gif`. +- `*/BannerAd.gif$match-case` — this rule will block `http://example.com/BannerAd.gif`, but not `http://example.com/bannerad.gif`. #### **`$method`** {#method-modifier} @@ -485,10 +494,10 @@ This modifier limits the rule scope to requests that use the specified set of HT **Examples** -* `||evil.com^$method=get|head` blocks only GET and HEAD requests to `evil.com`. -* `||evil.com^$method=~post|~put` blocks any requests to `evil.com` except POST or PUT. -* `@@||evil.com$method=get` unblocks only GET requests to `evil.com`. -* `@@||evil.com$method=~post` unblocks any requests to `evil.com` except POST. +- `||evil.com^$method=get|head` blocks only GET and HEAD requests to `evil.com`. +- `||evil.com^$method=~post|~put` blocks any requests to `evil.com` except POST or PUT. +- `@@||evil.com$method=get` unblocks only GET requests to `evil.com`. +- `@@||evil.com$method=~post` unblocks any requests to `evil.com` except POST. :::note @@ -509,14 +518,13 @@ AdGuard will try to close the browser tab with any address that matches a blocki **Examples** -* `||domain.com^$popup` — if you try to go to `http://domain.com/` from any page in the browser, a new tab in which specified site has to be opened will be closed by this rule. - +- `||domain.com^$popup` — if you try to go to `http://domain.com/` from any page in the browser, a new tab in which specified site has to be opened will be closed by this rule. :::info Compatibility -* `$popup` modifier works best in AdGuard Browser Extension. -* In AdGuard for Safari and iOS, `$popup` rules simply block the page right away. -* In AdGuard for Windows, Mac, and Android, `$popup` modifier may not detect a popup in some cases and it won't be blocked. `$popup` modifier applies the `document` content type with a special flag which is passed to a blocking page. Blocking page itself can do some checks and close the window if it is really a popup. Otherwise, page should be loaded. It can be combined with other request type modifiers, such as `$third-party` and `$important`. +- `$popup` modifier works best in AdGuard Browser Extension. +- In AdGuard for Safari and iOS, `$popup` rules simply block the page right away. +- In AdGuard for Windows, Mac, and Android, `$popup` modifier may not detect a popup in some cases and it won't be blocked. `$popup` modifier applies the `document` content type with a special flag which is passed to a blocking page. Blocking page itself can do some checks and close the window if it is really a popup. Otherwise, page should be loaded. It can be combined with other request type modifiers, such as `$third-party` and `$important`. ::: @@ -538,13 +546,13 @@ If there is a `$third-party` modifier, the rule is only applied to third-party r **`$third-party`:** -* `||domain.com^$third-party` — this rule applies to all domains, except `domain.com` and its subdomains. An example of a third-party request: `http://example.org/banner.jpg`. +- `||domain.com^$third-party` — this rule applies to all domains, except `domain.com` and its subdomains. An example of a third-party request: `http://example.org/banner.jpg`. If there is a `$~third-party` modifier, the rule is only applied to the requests that are not from third parties. Which means, they have to be sent from the same domain. **`$~third-party`:** -* `||domain.com$~third-party` — this rule is applied to `domain.com`, but not to the other domains. Example of a request that is not a third-party request: `http://domain.com/icon.ico`. +- `||domain.com$~third-party` — this rule is applied to `domain.com`, but not to the other domains. Example of a request that is not a third-party request: `http://domain.com/icon.ico`. #### **`$to`** {#to-modifier} @@ -552,9 +560,9 @@ If there is a `$~third-party` modifier, the rule is only applied to the requests **Examples** -* `/ads$to=evil.com|evil.org` blocks any request to `evil.com` or `evil.org` and their subdomains with a path matching `/ads`. -* `/ads$to=~not.evil.com|evil.com` blocks any request to `evil.com` and its subdomains, with a path matching `/ads`, except requests to `not.evil.com` and its subdomains. -* `/ads$to=~good.com|~good.org` blocks any request with a path matching `/ads`, except requests to `good.com` or `good.org` and their subdomains. +- `/ads$to=evil.com|evil.org` blocks any request to `evil.com` or `evil.org` and their subdomains with a path matching `/ads`. +- `/ads$to=~not.evil.com|evil.com` blocks any request to `evil.com` and its subdomains, with a path matching `/ads`, except requests to `not.evil.com` and its subdomains. +- `/ads$to=~good.com|~good.org` blocks any request with a path matching `/ads`, except requests to `good.com` or `good.org` and their subdomains. :::caution Limitations @@ -571,22 +579,22 @@ Rules with the `$to` modifier are supported by AdGuard for Windows, Mac, and And ### Content-type modifiers {#content-type-modifiers} -[//]: # (Please keep them sorted) - -* [`$document`](#document-modifier) -* [`$font`](#font-modifier) -* [`$image`](#image-modifier) -* [`$media`](#media-modifier) -* [`$object`](#object-modifier) -* [`$other`](#other-modifier) -* [`$ping`](#ping-modifier) -* [`$script`](#script-modifier) -* [`$stylesheet`](#stylesheet-modifier) -* [`$subdocument`](#subdocument-modifier) -* [`$websocket`](#websocket-modifier) -* [`$xmlhttprequest`](#xmlhttprequest-modifier) -* [`$object-subrequest` (removed)](#object-subrequest-modifier) -* [`$webrtc` (removed)](#webrtc-modifier) + + +- [`$document`](#document-modifier) +- [`$font`](#font-modifier) +- [`$image`](#image-modifier) +- [`$media`](#media-modifier) +- [`$object`](#object-modifier) +- [`$other`](#other-modifier) +- [`$ping`](#ping-modifier) +- [`$script`](#script-modifier) +- [`$stylesheet`](#stylesheet-modifier) +- [`$subdocument`](#subdocument-modifier) +- [`$websocket`](#websocket-modifier) +- [`$xmlhttprequest`](#xmlhttprequest-modifier) +- [`$object-subrequest` (removed)](#object-subrequest-modifier) +- [`$webrtc` (removed)](#webrtc-modifier) There is a set of modifiers, which can be used to limit the rule's application area to certain type of content. These modifiers can also be combined to cover, for example, both images and scripts. @@ -598,9 +606,9 @@ There is a big difference in how AdGuard determines the content type on differen **Examples of content-type modifiers** -* `||example.org^$image` — corresponds to all images from `example.org`. -* `||example.org^$script,stylesheet` — corresponds to all the scripts and styles from `example.org`. -* `||example.org^$~image,~script,~stylesheet` — corresponds to all requests to `example.org` except for the images, scripts and styles. +- `||example.org^$image` — corresponds to all images from `example.org`. +- `||example.org^$script,stylesheet` — corresponds to all the scripts and styles from `example.org`. +- `||example.org^$~image,~script,~stylesheet` — corresponds to all requests to `example.org` except for the images, scripts and styles. #### **`$document`** {#document-modifier} @@ -612,12 +620,12 @@ If this modifier is used with an exclusion rule (`@@`), it completely disables b **Examples** -* `@@||example.com^$document` completely disables filtering on all pages at `example.com` and all subdomains. +- `@@||example.com^$document` completely disables filtering on all pages at `example.com` and all subdomains. -* `||example.com^$document` blocks HTML document request to `example.com` with a blocking page. -* `||example.com^$document,redirect=noopframe` redirects HTML document request to `example.com` to an empty html document. -* `||example.com^$document,removeparam=test` removes `test` query parameter from HTML document request to `example.com`. -* `||example.com^$document,replace=/test1/test2/` replaces `test1` with `test2` in HTML document request to `example.com`. +- `||example.com^$document` blocks HTML document request to `example.com` with a blocking page. +- `||example.com^$document,redirect=noopframe` redirects HTML document request to `example.com` to an empty html document. +- `||example.com^$document,removeparam=test` removes `test` query parameter from HTML document request to `example.com`. +- `||example.com^$document,replace=/test1/test2/` replaces `test1` with `test2` in HTML document request to `example.com`. #### **`$font`** {#font-modifier} @@ -663,8 +671,8 @@ The rule corresponds to requests for built-in pages — HTML tags `frame` and `i **Examples** -* `||example.com^$subdocument` blocks built-in page requests (`frame` and `iframe`) to `example.com` and all its subdomains anywhere. -* `||example.com^$subdocument,domain=domain.com` blocks built-in page requests (`frame` и `iframe`) to `example.com` (and its subdomains) from `domain.com` and all its subdomains. +- `||example.com^$subdocument` blocks built-in page requests (`frame` and `iframe`) to `example.com` and all its subdomains anywhere. +- `||example.com^$subdocument,domain=domain.com` blocks built-in page requests (`frame` и `iframe`) to `example.com` (and its subdomains) from `domain.com` and all its subdomains. #### **`$websocket`** {#websocket-modifier} @@ -706,23 +714,23 @@ The rule applies only to WebRTC connections. **Examples** -* `||example.com^$webrtc,domain=example.org` blocks webRTC connections to `example.com` for `example.org`. -* `@@*$webrtc,domain=example.org` disables the RTC wrapper for `example.org`. +- `||example.com^$webrtc,domain=example.org` blocks webRTC connections to `example.com` for `example.org`. +- `@@*$webrtc,domain=example.org` disables the RTC wrapper for `example.org`. ### Exception rules modifiers {#exception-modifiers} -[//]: # (Please keep them sorted) + -* [`$content`](#content-modifier) -* [`$elemhide`](#elemhide-modifier) -* [`$extension`](#extension-modifier) -* [`$jsinject`](#jsinject-modifier) -* [`$stealth`](#stealth-modifier) -* [`$urlblock`](#urlblock-modifier) -* [Generic rules](#exception-modifiers-generic-rules) - * [`$genericblock`](#genericblock-modifier) - * [`$generichide`](#generichide-modifier) - * [`$specifichide`](#specifichide-modifier) +- [`$content`](#content-modifier) +- [`$elemhide`](#elemhide-modifier) +- [`$extension`](#extension-modifier) +- [`$jsinject`](#jsinject-modifier) +- [`$stealth`](#stealth-modifier) +- [`$urlblock`](#urlblock-modifier) +- [Generic rules](#exception-modifiers-generic-rules) + - [`$genericblock`](#genericblock-modifier) + - [`$generichide`](#generichide-modifier) + - [`$specifichide`](#specifichide-modifier) Exception rules disable the other basic rules for the addresses to which they correspond. They begin with a `@@` mark. All the basic modifiers listed above can be applied to them and they also have a few special modifiers. @@ -738,7 +746,7 @@ Disables [HTML filtering](#html-filtering-rules), [`$hls`](#hls-modifier), [`$re **Examples** -* `@@||example.com^$content` disables all content modifying rules on pages at `example.com` and all its subdomains. +- `@@||example.com^$content` disables all content modifying rules on pages at `example.com` and all its subdomains. #### **`$elemhide`** {#elemhide-modifier} @@ -746,7 +754,7 @@ Disables any [cosmetic rules](#cosmetic-rules) on the pages matching the rule. **Examples** -* `@@||example.com^$elemhide` disables all cosmetic rules on pages at `example.com` and all subdomains. +- `@@||example.com^$elemhide` disables all cosmetic rules on pages at `example.com` and all subdomains. #### **`$extension`** {#extension-modifier} @@ -754,7 +762,7 @@ Disables specific userscripts or all userscripts for a given domain. **Syntax** -``` +```text $extension[="userscript_name1"[|"userscript_name2"[|"userscript_name3"[...]]]] ``` @@ -764,33 +772,32 @@ Userscript names usually contain spaces or other special characters, which is wh You can also exclude a userscript by adding a `~` character before it. In this case, the userscript will not be disabled by the modifier. -``` +```adblock $extension=~"userscript name" ``` **NOTE**: When excluding a userscript, you must place `~` outside the quotes. - If a userscript's name includes quotes (`"`), commas (`,`), or pipes (`|`), they must be escaped with a backslash (`\`). -``` +```adblock $extension="userscript name\, with \"quote\"" ``` **Examples** -* `@@||example.com^$extension="AdGuard Assistant"` disables the `AdGuard Assistant` userscript on `example.com` website. -* `@@||example.com^$extension=MyUserscript` disables the `MyUserscript` userscript on `example.com` website. -* `@@||example.com^$extension='AdGuard Assistant'|'Popup Blocker'` disables both `AdGuard Assistant` and `Popup Blocker` userscripts on `example.com` website. -* `@@||example.com^$extension=~"AdGuard Assistant"` disables all user scripts on `example.com` website, except `AdGuard Assistant`. -* `@@||example.com^$extension=~"AdGuard Assistant"|~"Popup Blocker"` disables all user scripts on `example.com` website, except `AdGuard Assistant` and `Popup Blocker`. -* `@@||example.com^$extension` no userscript will work on webpages on `example.com`. -* `@@||example.com^$extension="AdGuard \"Assistant\""` disables the `AdGuard "Assistant"` userscript on `example.com` website. +- `@@||example.com^$extension="AdGuard Assistant"` disables the `AdGuard Assistant` userscript on `example.com` website. +- `@@||example.com^$extension=MyUserscript` disables the `MyUserscript` userscript on `example.com` website. +- `@@||example.com^$extension='AdGuard Assistant'|'Popup Blocker'` disables both `AdGuard Assistant` and `Popup Blocker` userscripts on `example.com` website. +- `@@||example.com^$extension=~"AdGuard Assistant"` disables all user scripts on `example.com` website, except `AdGuard Assistant`. +- `@@||example.com^$extension=~"AdGuard Assistant"|~"Popup Blocker"` disables all user scripts on `example.com` website, except `AdGuard Assistant` and `Popup Blocker`. +- `@@||example.com^$extension` no userscript will work on webpages on `example.com`. +- `@@||example.com^$extension="AdGuard \"Assistant\""` disables the `AdGuard "Assistant"` userscript on `example.com` website. :::info Compatibility -* Only AdGuard for Windows, Mac, Android are technically capable of using rules with `$extension` modifier. -* `$extension` modifier with specific userscript name is supported by AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.13 or later**. +- Only AdGuard for Windows, Mac, Android are technically capable of using rules with `$extension` modifier. +- `$extension` modifier with specific userscript name is supported by AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.13 or later**. ::: @@ -800,7 +807,7 @@ Forbids adding of javascript code to the page. You can read about scriptlets and **Examples** -* `@@||example.com^$jsinject` disables javascript on pages at `example.com` and all subdomains. +- `@@||example.com^$jsinject` disables javascript on pages at `example.com` and all subdomains. #### **`$stealth`** {#stealth-modifier} @@ -808,7 +815,7 @@ Disables the Stealth Mode module for all corresponding pages and requests. **Syntax** -``` +```text $stealth [= opt1 [| opt2 [| opt3 [...]]]] ``` @@ -816,28 +823,28 @@ $stealth [= opt1 [| opt2 [| opt3 [...]]]] The list of the available modifier options: -* `searchqueries` disables [**Hide your search queries**](../../stealth-mode#searchqueries) option -* `donottrack` disables [**Send Do-Not-Track header**](../../stealth-mode#donottrack) option -* `3p-cookie` disables [**Self-destructing third-party cookies**](../../stealth-mode#3p-cookie) option -* `1p-cookie` disables [**Self-destructing first-party cookies**](../../stealth-mode#1p-cookie) option -* `3p-cache` disables [**Disable cache for third-party requests**](../../stealth-mode#3p-cache) option -* `3p-auth` disables [**Block third-party Authorization header**](../../stealth-mode#3p-auth) option -* `webrtc` disables [**Block WebRTC**](../../stealth-mode#webrtc) option -* `push` disables [**Block Push API**](../../stealth-mode#push) option -* `location` disables [**Block Location API**](../../stealth-mode#location) option -* `flash` disables [**Block Flash**](../../stealth-mode#flash) option -* `java` disables [**Block Java**](../../stealth-mode#java) option -* `referrer` disables [**Hide Referrer from third parties**](../../stealth-mode#miscellaneous) option -* `useragent` disables [**Hide your User-Agent**](../../stealth-mode#useragent) option -* `ip` disables [**Hide your IP address**](../../stealth-mode#ip) option -* `xclientdata` disables [**Remove X-Client-Data header from HTTP requests**](../../stealth-mode#xclientdata) option -* `dpi` disables [**Protect from DPI**](../../stealth-mode#dpi) option - -**Examples** - -* `@@||example.com^$stealth` disables Stealth Mode for `example.com` (and subdomains) requests, except for blocking cookies and hiding tracking parameters (see below). -* `@@||domain.com^$script,stealth,domain=example.com` disables Stealth Mode only for script requests to `domain.com` (and its subdomains) on `example.com` and all its subdomains. -* `@@||example.com^$stealth=3p-cookie|dpi` disables blocking third-party cookies and DPI fooling measures for `example.com`. +- `searchqueries` disables [**Hide your search queries**](../../stealth-mode#searchqueries) option +- `donottrack` disables [**Send Do-Not-Track header**](../../stealth-mode#donottrack) option +- `3p-cookie` disables [**Self-destructing third-party cookies**](../../stealth-mode#3p-cookie) option +- `1p-cookie` disables [**Self-destructing first-party cookies**](../../stealth-mode#1p-cookie) option +- `3p-cache` disables [**Disable cache for third-party requests**](../../stealth-mode#3p-cache) option +- `3p-auth` disables [**Block third-party Authorization header**](../../stealth-mode#3p-auth) option +- `webrtc` disables [**Block WebRTC**](../../stealth-mode#webrtc) option +- `push` disables [**Block Push API**](../../stealth-mode#push) option +- `location` disables [**Block Location API**](../../stealth-mode#location) option +- `flash` disables [**Block Flash**](../../stealth-mode#flash) option +- `java` disables [**Block Java**](../../stealth-mode#java) option +- `referrer` disables [**Hide Referrer from third parties**](../../stealth-mode#miscellaneous) option +- `useragent` disables [**Hide your User-Agent**](../../stealth-mode#useragent) option +- `ip` disables [**Hide your IP address**](../../stealth-mode#ip) option +- `xclientdata` disables [**Remove X-Client-Data header from HTTP requests**](../../stealth-mode#xclientdata) option +- `dpi` disables [**Protect from DPI**](../../stealth-mode#dpi) option + +**Examples** + +- `@@||example.com^$stealth` disables Stealth Mode for `example.com` (and subdomains) requests, except for blocking cookies and hiding tracking parameters (see below). +- `@@||domain.com^$script,stealth,domain=example.com` disables Stealth Mode only for script requests to `domain.com` (and its subdomains) on `example.com` and all its subdomains. +- `@@||example.com^$stealth=3p-cookie|dpi` disables blocking third-party cookies and DPI fooling measures for `example.com`. :::note @@ -847,8 +854,8 @@ Blocking cookies and removing tracking parameters is achieved by using rules wit :::info Compatibility -* Stealth Mode is available in AdGuard for Windows, Mac, and Android, and AdGuard Browser Extension. All other products will ignore the rules with `$stealth` modifier. -* `$stealth` modifier with specific options is supported by AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.10 or later**. +- Stealth Mode is available in AdGuard for Windows, Mac, and Android, and AdGuard Browser Extension. All other products will ignore the rules with `$stealth` modifier. +- `$stealth` modifier with specific options is supported by AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.10 or later**. ::: @@ -858,15 +865,16 @@ Disables blocking of all requests sent from the pages matching the rule and disa **Examples** -* `@@||example.com^$urlblock` — any requests sent from the pages at `example.com` and all subdomains are not going to be blocked. +- `@@||example.com^$urlblock` — any requests sent from the pages at `example.com` and all subdomains are not going to be blocked. #### Generic rules {#exception-modifiers-generic-rules} -Before we can proceed to the next modifiers, we have to make a definition of _generic rules_. The rule is generic if it is not limited to specific domains. +Before we can proceed to the next modifiers, we have to make a definition of *generic rules*. The rule is generic if it is not limited to specific domains. Wildcard character `*` is supported as well. For example, these rules are generic: -``` + +```adblock ###banner *###banner #@#.adsblock @@ -877,7 +885,8 @@ For example, these rules are generic: ``` And these are not: -``` + +```adblock domain.com###banner ||domain.com^$domain=example.com ``` @@ -888,7 +897,7 @@ Disables generic basic rules on pages that correspond to exception rule. **Examples** -* `@@||example.com^$genericblock` disables generic basic rules on any pages at `example.com` and all subdomains. +- `@@||example.com^$genericblock` disables generic basic rules on any pages at `example.com` and all subdomains. #### **`$generichide`** {#generichide-modifier} @@ -896,7 +905,7 @@ Disables all generic [cosmetic rules](#cosmetic-rules) on pages that correspond **Examples** -* `@@||example.com^$generichide` disables generic cosmetic rules on any pages at `example.com` and its subdomains. +- `@@||example.com^$generichide` disables generic cosmetic rules on any pages at `example.com` and its subdomains. #### **`specifichide`** {#specifichide-modifier} @@ -904,7 +913,7 @@ Disables all specific element hiding and CSS rules, but not general ones. Has an **Examples** -* `@@||example.org^$specifichide` disables `example.org##.banner` but not `##.banner`. +- `@@||example.org^$specifichide` disables `example.org##.banner` but not `##.banner`. :::note @@ -920,34 +929,35 @@ Rules with `$specifichide` modifier are **not supported** by AdGuard for iOS and ### Advanced capabilities -[//]: # (Please keep them sorted) - -* [`$all`](#all-modifier) -* [`$badfilter`](#badfilter-modifier) -* [`$cookie`](#cookie-modifier) -* [`$csp`](#csp-modifier) -* [`$hls`](#hls-modifier) -* [`$inline-font`](#inline-font-modifier) -* [`$inline-script`](#inline-script-modifier) -* [`$jsonprune`](#jsonprune-modifier) -* [`$network`](#network-modifier) -* [`$permissions`](#permissions-modifier) -* [`$redirect`](#redirect-modifier) -* [`$redirect-rule`](#redirect-rule-modifier) -* [`$referrerpolicy`](#referrerpolicy-modifier) -* [`$removeheader`](#removeheader-modifier) -* [`$removeparam`](#removeparam-modifier) -* [`$replace`](#replace-modifier) -* [`noop`](#noop-modifier) -* [`$empty` (deprecated)](#empty-modifier) -* [`$mp4` (deprecated)](#mp4-modifier) + + +- [`$all`](#all-modifier) +- [`$badfilter`](#badfilter-modifier) +- [`$cookie`](#cookie-modifier) +- [`$csp`](#csp-modifier) +- [`$hls`](#hls-modifier) +- [`$inline-font`](#inline-font-modifier) +- [`$inline-script`](#inline-script-modifier) +- [`$jsonprune`](#jsonprune-modifier) +- [`$network`](#network-modifier) +- [`$permissions`](#permissions-modifier) +- [`$redirect`](#redirect-modifier) +- [`$redirect-rule`](#redirect-rule-modifier) +- [`$referrerpolicy`](#referrerpolicy-modifier) +- [`$removeheader`](#removeheader-modifier) +- [`$removeparam`](#removeparam-modifier) +- [`$replace`](#replace-modifier) +- [`noop`](#noop-modifier) +- [`$empty` (deprecated)](#empty-modifier) +- [`$mp4` (deprecated)](#mp4-modifier) These modifiers are able to completely change the behaviour of basic rules. #### **`$all`** {#all-modifier} `$all` modifier is made of [all content-types modifiers](#content-type-modifiers) and [`$popup`](#popup-modifier). E.g. rule `||example.org^$all` is converting into rule: -``` + +```adblock ||example.org^$document,subdocument,font,image,media,object,other,ping,script,stylesheet,websocket,xmlhttprequest,popup ``` @@ -959,25 +969,26 @@ The rules with the `$badfilter` modifier disable other basic rules to which they **Examples** -* `||example.com$badfilter` disables `||example.com` -* `||example.com$image,badfilter` disables `||example.com$image` -* `@@||example.com$badfilter` disables `@@||example.com` -* `||example.com$domain=domain.com,badfilter` disables `||example.com$domain=domain.com` +- `||example.com$badfilter` disables `||example.com` +- `||example.com$image,badfilter` disables `||example.com$image` +- `@@||example.com$badfilter` disables `@@||example.com` +- `||example.com$domain=domain.com,badfilter` disables `||example.com$domain=domain.com` Rules with `$badfilter` modifier can disable other basic rules for specific domains if they fulfill the following conditions: + 1. The rule has a `$domain` modifier. -2. The rule does not have a negated domain `~` in `$domain` modifier value. +1. The rule does not have a negated domain `~` in `$domain` modifier value. In that case, the `$badfilter` rule will disable the corresponding rule for domains specified in both the `$badfilter` and basic rules. Please note that [wildcard-TLD logic](#wildcard-for-tld) works here as well. **Examples** -* `/some$domain=example.com|example.org|example.io` is disabled for `example.com` by `/some$domain=example.com,badfilter` -* `/some$domain=example.com|example.org|example.io` is disabled for `example.com` and `example.org` by `/some$domain=example.com|example.org,badfilter` -* `/some$domain=example.com|example.org` and `/some$domain=example.io` are disabled completely by `/some$domain=example.com|example.org|example.io,badfilter` -* `/some$domain=example.com|example.org|example.io` is disabled completely by `/some$domain=example.*,badfilter` -* `/some$domain=example.*` is disabled for `example.com` and `example.org` by `/some$domain=example.com|example.org,badfilter` -* `/some$domain=example.com|example.org|example.io` is NOT disabled for `example.com` by `/some$domain=example.com|~example.org,badfilter` because the value of `$domain` modifier contains a negated domain +- `/some$domain=example.com|example.org|example.io` is disabled for `example.com` by `/some$domain=example.com,badfilter` +- `/some$domain=example.com|example.org|example.io` is disabled for `example.com` and `example.org` by `/some$domain=example.com|example.org,badfilter` +- `/some$domain=example.com|example.org` and `/some$domain=example.io` are disabled completely by `/some$domain=example.com|example.org|example.io,badfilter` +- `/some$domain=example.com|example.org|example.io` is disabled completely by `/some$domain=example.*,badfilter` +- `/some$domain=example.*` is disabled for `example.com` and `example.org` by `/some$domain=example.com|example.org,badfilter` +- `/some$domain=example.com|example.org|example.io` is NOT disabled for `example.com` by `/some$domain=example.com|~example.org,badfilter` because the value of `$domain` modifier contains a negated domain :::info Compatibility @@ -995,21 +1006,26 @@ In case if multiple `$cookie` rules match a single request, we will apply each o **Syntax** -``` +```adblock $cookie [= name[; maxAge = seconds [; sameSite = strategy ]]] ``` + where: - * **`name`** — optional, string or regular expression to match cookie name. - * **`seconds`** — number of seconds for current time to offset the expiration date of cookie. - * **`strategy`** — string for [Same-Site](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) strategy to make cookie use. + +- **`name`** — optional, string or regular expression to match cookie name. +- **`seconds`** — number of seconds for current time to offset the expiration date of cookie. +- **`strategy`** — string for [Same-Site](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) strategy to make cookie use. For example, -``` + +```adblock ||example.org^$cookie=NAME;maxAge=3600;sameSite=lax ``` + every time AdGuard encounters a cookie called `NAME` in a request to `example.org`, it will do the following: - * Set its expiration date to current time plus `3600` seconds - * Makes the cookie use [Same-Site](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) "lax" strategy. + +- Set its expiration date to current time plus `3600` seconds +- Makes the cookie use [Same-Site](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite) "lax" strategy. **Escaping special characters** @@ -1017,18 +1033,18 @@ If regular expression `name` is used for matching, two characters must be escape **Examples** -* `||example.org^$cookie` blocks **all** cookies set by `example.org`; this is an equivalent to setting `maxAge=0` -* `$cookie=__cfduid` blocks CloudFlare cookie everywhere -* `$cookie=/__utm[a-z]/` blocks Google Analytics cookies everywhere -* `||facebook.com^$third-party,cookie=c_user` prevents Facebook from tracking you even if you are logged in +- `||example.org^$cookie` blocks **all** cookies set by `example.org`; this is an equivalent to setting `maxAge=0` +- `$cookie=__cfduid` blocks CloudFlare cookie everywhere +- `$cookie=/__utm[a-z]/` blocks Google Analytics cookies everywhere +- `||facebook.com^$third-party,cookie=c_user` prevents Facebook from tracking you even if you are logged in There are two methods to deactivate `$cookie` rules: the primary method involves using an exception marked with `@@` — `@@||example.org^$cookie`. The alternative method employs a `$urlblock` exception (also included under the `$document` exception alias — `$elemhide,jsinject,content,urlblock,extension`). Here's how it works: -* `@@||example.org^$cookie` unblocks all cookies set by `example.org` -* `@@||example.org^$urlblock` unblocks all cookies set by `example.org` and disables blocking of all requests sent from `example.org` -* `@@||example.org^$cookie=concept` unblocks a single cookie named `concept` -* `@@||example.org^$cookie=/^_ga_/` unblocks every cookie that matches the regular expression +- `@@||example.org^$cookie` unblocks all cookies set by `example.org` +- `@@||example.org^$urlblock` unblocks all cookies set by `example.org` and disables blocking of all requests sent from `example.org` +- `@@||example.org^$cookie=concept` unblocks a single cookie named `concept` +- `@@||example.org^$cookie=/^_ga_/` unblocks every cookie that matches the regular expression :::caution Limitations @@ -1066,17 +1082,17 @@ In case if multiple `$csp` rules match a single request, we will apply each of t **Examples** -* `||example.org^$csp=frame-src 'none'` blocks all frames on example.org and its subdomains. -* `@@||example.org/page/*$csp=frame-src 'none'` disables all rules with the `$csp` modifier exactly matching `frame-src 'none'` on all the pages matching the rule pattern. For instance, the rule above. -* `@@||example.org/page/*$csp` disables all the `$csp` rules on all the pages matching the rule pattern. -* `||example.org^$csp=script-src 'self' 'unsafe-eval' http: https:` disables inline scripts on all the pages matching the rule pattern. -* `@@||example.org^$document` or `@@||example.org^$urlblock` disables all the `$csp` rules on all the pages matching the rule pattern. +- `||example.org^$csp=frame-src 'none'` blocks all frames on example.org and its subdomains. +- `@@||example.org/page/*$csp=frame-src 'none'` disables all rules with the `$csp` modifier exactly matching `frame-src 'none'` on all the pages matching the rule pattern. For instance, the rule above. +- `@@||example.org/page/*$csp` disables all the `$csp` rules on all the pages matching the rule pattern. +- `||example.org^$csp=script-src 'self' 'unsafe-eval' http: https:` disables inline scripts on all the pages matching the rule pattern. +- `@@||example.org^$document` or `@@||example.org^$urlblock` disables all the `$csp` rules on all the pages matching the rule pattern. :::caution Limitations -* There are a few characters forbidden in the `$csp` value: `,`, `$`. -* `$csp` rules support limited list of modifiers: `$domain`, `$important`, `$subdocument`. -* Rules with `report-*` directives are considered invalid. +- There are a few characters forbidden in the `$csp` value: `,`, `$`. +- `$csp` rules support limited list of modifiers: `$domain`, `$important`, `$subdocument`. +- Rules with `report-*` directives are considered invalid. ::: @@ -1098,18 +1114,19 @@ The word "segment" in this document means either a "Media Segment" or a "playlis **Syntax** -* `||example.org^$hls=urlpattern` removes segments whose URL matches the URL pattern `urlpattern`. The pattern works just like the one in basic URL rules, however, the characters `/`, `$` and `,` must be escaped with `\` inside `urlpattern`. -* `||example.org^$hls=/regexp/options` removes segments where the URL or one of the tags (for certain options, if present) is matched by the regular expression `regexp`. Available `options` are: - * `t` — instead of testing the segment's URL, test each of the segment's tags against the regular expression. A segment with a matching tag is removed; - * `i` — make the regular expression case-insensitive. +- `||example.org^$hls=urlpattern` removes segments whose URL matches the URL pattern `urlpattern`. The pattern works just like the one in basic URL rules, however, the characters `/`, `$` and `,` must be escaped with `\` inside `urlpattern`. +- `||example.org^$hls=/regexp/options` removes segments where the URL or one of the tags (for certain options, if present) is matched by the regular expression `regexp`. Available `options` are: + - `t` — instead of testing the segment's URL, test each of the segment's tags against the regular expression. A segment with a matching tag is removed; + - `i` — make the regular expression case-insensitive. The characters `/`, `$` and `,` must be escaped with `\` inside `regexp`. **Exceptions** Basic URL exceptions shall not disable rules with `$hls` modifier. They can be disabled as described below: -* `@@||example.org^$hls` disables all `$hls` rules for responses from URLs matching `||example.org^`. -* `@@||example.org^$hls=text` disables all `$hls` rules with the value of the `$hls` modifier equal to `text` for responses from URLs matching `||example.org^`. + +- `@@||example.org^$hls` disables all `$hls` rules for responses from URLs matching `||example.org^`. +- `@@||example.org^$hls=text` disables all `$hls` rules with the value of the `$hls` modifier equal to `text` for responses from URLs matching `||example.org^`. :::tip @@ -1119,10 +1136,10 @@ Basic URL exceptions shall not disable rules with `$hls` modifier. They can be d **Restrictions** -* `$hls` rules are only allowed in trusted filters -* `$hls` rules are only compatible with the modifiers `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest` -* `$hls` rules only apply to HLS playlists, which are UTF-8 encoded text starting with the line `#EXTM3U`. Any other response will not be modified by these rules -* `$hls` rules do not apply if the size of the original response is more than 3 MB +- `$hls` rules are only allowed in trusted filters +- `$hls` rules are only compatible with the modifiers `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest` +- `$hls` rules only apply to HLS playlists, which are UTF-8 encoded text starting with the line `#EXTM3U`. Any other response will not be modified by these rules +- `$hls` rules do not apply if the size of the original response is more than 3 MB :::note @@ -1132,30 +1149,32 @@ When multiple `$hls` rules match the same request, their effect is cumulative. **Examples** -* `||example.org^$hls=\/videoplayback^?*&source=dclk_video_ads` removes all segments with the matching URL. -* `||example.org^$hls=/\/videoplayback\/?\?.*\&source=dclk_video_ads/i` achieves more or less the same with a regular expression instead of a URL pattern. -* `||example.org^$hls=/#UPLYNK-SEGMENT:.*\,ad/t` removes all segments which have the matching tag. +- `||example.org^$hls=\/videoplayback^?*&source=dclk_video_ads` removes all segments with the matching URL. +- `||example.org^$hls=/\/videoplayback\/?\?.*\&source=dclk_video_ads/i` achieves more or less the same with a regular expression instead of a URL pattern. +- `||example.org^$hls=/#UPLYNK-SEGMENT:.*\,ad/t` removes all segments which have the matching tag. **Anatomy of an HLS playlist** A quick summary of the [specification](https://datatracker.ietf.org/doc/html/rfc8216): + 1. An HLS playlist is a collection of text lines. -2. A line may be empty, a comment (starts with `#`), a tag (also starts with `#`, can only be recognized by name) or a URL. -3. A URL line is called a "segment". -4. Tags may apply to a single segment, i.e. the first URL line after the tag, to all segments following the tag and until the tag with the same name, or to the whole playlist. +1. A line may be empty, a comment (starts with `#`), a tag (also starts with `#`, can only be recognized by name) or a URL. +1. A URL line is called a "segment". +1. Tags may apply to a single segment, i.e. the first URL line after the tag, to all segments following the tag and until the tag with the same name, or to the whole playlist. Some points specific to the operation of `$hls` rules: + 1. When a segment is removed, all of the tags that apply only to that segment are also removed. -2. When there is a tag that applies to multiple segments, and all of those segments are removed, the tag is also removed. -3. Since there is no way to recognize different kinds of tags by syntax, we recognize all of the tags specified by the RFC, plus some non-standard tags that we have seen in the field. Any lines starting with `#` and not recognized as a tag are passed through without modification, and are not matched against the rules. -4. We do not match tags that apply to the whole playlist, and `$hls` rules can not be used to remove them, since `$hls` rules are intended for removing segments. If you know what you are doing, you can use `$replace` rules to remove or rewrite just a single tag from the playlist. +1. When there is a tag that applies to multiple segments, and all of those segments are removed, the tag is also removed. +1. Since there is no way to recognize different kinds of tags by syntax, we recognize all of the tags specified by the RFC, plus some non-standard tags that we have seen in the field. Any lines starting with `#` and not recognized as a tag are passed through without modification, and are not matched against the rules. +1. We do not match tags that apply to the whole playlist, and `$hls` rules can not be used to remove them, since `$hls` rules are intended for removing segments. If you know what you are doing, you can use `$replace` rules to remove or rewrite just a single tag from the playlist. **An example of a transformation done by the rules:**
Original response -``` +```text #EXTM3U #EXT-X-TARGETDURATION:10 #EXTINF,5 @@ -1176,21 +1195,23 @@ preroll.ts 02.ts #EXT-X-ENDLIST ``` +
Applied rules -``` +```adblock ||example.org^$hls=preroll ||example.org^$hls=/#UPLYNK-SEGMENT:.*\,ad/t ``` +
Modified response -``` +```text #EXTM3U #EXT-X-TARGETDURATION:10 #UPLYNK-SEGMENT:abc123,segment @@ -1202,15 +1223,16 @@ preroll.ts 02.ts #EXT-X-ENDLIST ``` +
:::caution Restrictions -* `$hls` rules are only allowed [**in trusted filters**](#trusted-filters). -* `$hls` rules are compatible with the modifiers `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest` only. -* `$hls` rules only apply to HLS playlists, which are UTF-8 encoded text starting with the line `#EXTM3U`. +- `$hls` rules are only allowed [**in trusted filters**](#trusted-filters). +- `$hls` rules are compatible with the modifiers `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest` only. +- `$hls` rules only apply to HLS playlists, which are UTF-8 encoded text starting with the line `#EXTM3U`. Any other response will not be modified by these rules. -* `$hls` rules do not apply if the size of the original response is more than 3 MB. +- `$hls` rules do not apply if the size of the original response is more than 3 MB. ::: @@ -1223,14 +1245,16 @@ Rules with the `$hls` modifier are supported by AdGuard for Windows, Mac, and An #### **`$inline-script`** {#inline-script-modifier} `$inline-script` modifier is a sort of a shortcut for [`$csp`](#csp-modifier) modifier with specific value. E.g. the rule `||example.org^$inline-script` is converting into such a rule: -``` + +```adblock ||example.org^$csp=script-src 'self' 'unsafe-eval' http: https: data: blob: mediastream: filesystem: ``` #### **`$inline-font`** {#inline-font-modifier} `$inline-font` modifier is a sort of a shortcut for [`$csp`](#csp-modifier) modifier with specific value. E.g. the rule `||example.org^$inline-font` is converting into such a rule: -``` + +```adblock ||example.org^$csp=font-src 'self' 'unsafe-eval' http: https: data: blob: mediastream: filesystem: ``` @@ -1243,21 +1267,21 @@ In AdGuard for Windows, Mac, and Android **running CoreLibs v1.11 or later**, `$ **Syntax** -* `||example.org^$jsonprune=expression` removes items that match the modified JSONPath expression `expression` from the response. +- `||example.org^$jsonprune=expression` removes items that match the modified JSONPath expression `expression` from the response. Due to the way rule parsing works, the characters `$` and `,` must be escaped with `\` inside `expression`. The modified JSONPath syntax has the following differences from the original: -1. Script expressions are not supported. -2. The supported filter expressions are: - * `?(has )` — true if the current object has the specified key. - * `?(key-eq )` — true if the current object has the specified key, and its value is equal to the specified value. - * `?(key-substr )` — true if the specified value is a substring of the value of the specified key of the current object. -3. Whitespace outside of double- or single-quoted strings has no meaning. -4. Both double- and single-quoted strings can be used. -5. Expressions ending with `..` are not supported. -6. Multiple array slices can be specified in square brackets. +1. Script expressions are not supported. +1. The supported filter expressions are: + - `?(has )` — true if the current object has the specified key. + - `?(key-eq )` — true if the current object has the specified key, and its value is equal to the specified value. + - `?(key-substr )` — true if the specified value is a substring of the value of the specified key of the current object. +1. Whitespace outside of double- or single-quoted strings has no meaning. +1. Both double- and single-quoted strings can be used. +1. Expressions ending with `..` are not supported. +1. Multiple array slices can be specified in square brackets. There are various online tools that make working with JSONPath expressions more convenient: @@ -1270,15 +1294,16 @@ Keep in mind, though, that all JSONPath implementations have unique features/qui **Exceptions** Basic URL exceptions shall not disable rules with `$jsonprune` modifier. They can be disabled as described below: -* `@@||example.org^$jsonprune` disables all `$jsonprune` rules for responses from URLs matching `||example.org^`. -* `@@||example.org^$jsonprune=text` disable all `$jsonprune` rules with the value of the `$jsonprune` modifier equal to `text` for responses from URLs matching `||example.org^`. + +- `@@||example.org^$jsonprune` disables all `$jsonprune` rules for responses from URLs matching `||example.org^`. +- `@@||example.org^$jsonprune=text` disable all `$jsonprune` rules with the value of the `$jsonprune` modifier equal to `text` for responses from URLs matching `||example.org^`. `$jsonprune` rules can also be disabled by `$document`, `$content` and `$urlblock` exception rules. **Restrictions** -* `$jsonprune` rules are only compatible with `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest` modifiers. -* `$jsonprune` rules do not apply if the size of the original response is more than 3 MB. +- `$jsonprune` rules are only compatible with `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest` modifiers. +- `$jsonprune` rules do not apply if the size of the original response is more than 3 MB. :::note @@ -1288,12 +1313,12 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi **Examples** -* `||example.org^$jsonprune=\$..[one\, "two three"]` removes all occurrences of the keys "one" and "two three" anywhere in the JSON document. +- `||example.org^$jsonprune=\$..[one\, "two three"]` removes all occurrences of the keys "one" and "two three" anywhere in the JSON document.
Input -``` +```json { "one": 1, "two": { @@ -1308,7 +1333,7 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi
Output -``` +```json { "two": { "four five": 45 @@ -1318,12 +1343,12 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi
-* `||example.org^$jsonprune=\$.a[?(has ad_origin)]` removes all children of `a` that have an `ad_origin` key. +- `||example.org^$jsonprune=\$.a[?(has ad_origin)]` removes all children of `a` that have an `ad_origin` key.
Input -``` +```json { "a": [ { @@ -1342,7 +1367,7 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi
Output -``` +```json { "a": [ { @@ -1354,12 +1379,12 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi
-* `||example.org^$jsonprune=\$.*.*[?(key-eq 'Some key' 'Some value')]` removes all items that are at nesting level 3 and have a property "Some key" equal to "Some value". +- `||example.org^$jsonprune=\$.*.*[?(key-eq 'Some key' 'Some value')]` removes all items that are at nesting level 3 and have a property "Some key" equal to "Some value".
Input -``` +```json { "a": {"b": {"c": {"Some key": "Some value"}, "d": {"Some key": "Other value"}}}, "e": {"f": [{"Some key": "Some value"}, {"Some key": "Other value"}]} @@ -1371,7 +1396,7 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi
Output -``` +```json { "a": {"b": {"d": {"Some key": "Other value"}}}, "e": {"f": [{"Some key": "Other value"}]} @@ -1384,12 +1409,12 @@ When multiple `$jsonprune` rules match the same request, they are sorted in lexi In AdGuard for Windows, Mac and Android **running CoreLibs v1.11 or later**, JSONPath expressions may be used as keys in filter expressions. -* `||example.org^$jsonprune=\$.elems[?(has "\$.a.b.c")]` removes all children of `elems` which have a property selectable by the JSONPath expression `$.a.b.c`. +- `||example.org^$jsonprune=\$.elems[?(has "\$.a.b.c")]` removes all children of `elems` which have a property selectable by the JSONPath expression `$.a.b.c`.
Input -``` +```json { "elems": [ { @@ -1409,7 +1434,7 @@ In AdGuard for Windows, Mac and Android **running CoreLibs v1.11 or later**, JSO
Output -``` +```json { "elems": [ { @@ -1422,12 +1447,12 @@ In AdGuard for Windows, Mac and Android **running CoreLibs v1.11 or later**, JSO
-* `||example.org^$jsonprune=\$.elems[?(key-eq "\$.a.b.c" "abc")]` removes all children of `elems` which have a property selectable by the JSONPath expression `$.a.b.c` with a value equal to `"abc"`. +- `||example.org^$jsonprune=\$.elems[?(key-eq "\$.a.b.c" "abc")]` removes all children of `elems` which have a property selectable by the JSONPath expression `$.a.b.c` with a value equal to `"abc"`.
Input -``` +```json { "elems": [ { @@ -1445,7 +1470,7 @@ In AdGuard for Windows, Mac and Android **running CoreLibs v1.11 or later**, JSO
Output -``` +```json { "elems": [ { @@ -1459,8 +1484,8 @@ In AdGuard for Windows, Mac and Android **running CoreLibs v1.11 or later**, JSO :::caution Restrictions -* `$jsonprune` rules are only compatible with these specific modifiers: `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest`. -* `$jsonprune` rules do not apply if the size of the original response is more than 3 MB. +- `$jsonprune` rules are only compatible with these specific modifiers: `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and `$xmlhttprequest`. +- `$jsonprune` rules do not apply if the size of the original response is more than 3 MB. ::: @@ -1489,12 +1514,12 @@ The `$network` modifier can only be used in rules together with the `$app` and ` **Examples** -* `174.129.166.49:3478^$network` blocks access to `174.129.166.49:3478` (but not to `174.129.166.49:34788`). -* `[2001:4860:4860::8888]:443^$network` blocks access to `[2001:4860:4860::8888]:443`. -* `174.129.166.49$network` blocks access to `174.129.166.49:*`. -* `@@174.129.166.49$network` makes AdGuard bypass data to the endpoint. No other rules will be applied. -* `/.+:3[0-9]{4}/$network` blocks access to any port from 30000 to 39999. -* `/8.8.8.(:?8|4)/$network` blocks access to both `8.8.8.8` and `8.8.8.4`. +- `174.129.166.49:3478^$network` blocks access to `174.129.166.49:3478` (but not to `174.129.166.49:34788`). +- `[2001:4860:4860::8888]:443^$network` blocks access to `[2001:4860:4860::8888]:443`. +- `174.129.166.49$network` blocks access to `174.129.166.49:*`. +- `@@174.129.166.49$network` makes AdGuard bypass data to the endpoint. No other rules will be applied. +- `/.+:3[0-9]{4}/$network` blocks access to any port from 30000 to 39999. +- `/8.8.8.(:?8|4)/$network` blocks access to both `8.8.8.8` and `8.8.8.4`. :::info Compatibility @@ -1527,11 +1552,11 @@ The list of the available directives is available [here](https://developer.mozil **Examples** -* `||example.org^$permissions=sync-xhr=()` disallows synchronous `XMLHttpRequest` requests across `example.org`. -* `@@||example.org/page/*$permissions=sync-xhr=()` disables all rules with the `$permissions` modifier exactly matching `sync-xhr=()` on all the pages matching the rule pattern. For instance, the rule above. -* `@@||example.org/page/*$permissions` disables all the `$permissions` rules on all the pages matching the rule pattern. -* `$domain=example.org|example.com,permissions=oversized-images=()\, sync-script=()\, unsized-media=()` disallows oversized images, synchronous scripts and unsized media features across `example.org` and `example.com`. -* `@@||example.org^$document` or `@@||example.org^$urlblock` disables all the `$permission` rules on all the pages matching the rule pattern. +- `||example.org^$permissions=sync-xhr=()` disallows synchronous `XMLHttpRequest` requests across `example.org`. +- `@@||example.org/page/*$permissions=sync-xhr=()` disables all rules with the `$permissions` modifier exactly matching `sync-xhr=()` on all the pages matching the rule pattern. For instance, the rule above. +- `@@||example.org/page/*$permissions` disables all the `$permissions` rules on all the pages matching the rule pattern. +- `$domain=example.org|example.com,permissions=oversized-images=()\, sync-script=()\, unsized-media=()` disallows oversized images, synchronous scripts and unsized media features across `example.org` and `example.com`. +- `@@||example.org^$document` or `@@||example.org^$urlblock` disables all the `$permission` rules on all the pages matching the rule pattern. :::caution Limitations @@ -1560,10 +1585,10 @@ The value of the `$redirect` modifier must be the name of the resource that will ##### Disabling `$redirect` rules -* `||example.org/script.js$script,redirect=noopjs` — this rule redirects all requests to `example.org/script.js` to the resource named `noopjs`. -* `||example.org/test.mp4$media,redirect=noopmp4-1s` — this rule redirects all requests to `example.org/test.mp4` to the resource named `noopmp4-1s`. -* `@@||example.org^$redirect` will disable all `$redirect` rules for URLs that match `||example.org^`. -* `@@||example.org^$redirect=nooptext` will disable all rules with `$redirect=nooptext` for any request that matches `||example.org^`. +- `||example.org/script.js$script,redirect=noopjs` — this rule redirects all requests to `example.org/script.js` to the resource named `noopjs`. +- `||example.org/test.mp4$media,redirect=noopmp4-1s` — this rule redirects all requests to `example.org/test.mp4` to the resource named `noopmp4-1s`. +- `@@||example.org^$redirect` will disable all `$redirect` rules for URLs that match `||example.org^`. +- `@@||example.org^$redirect=nooptext` will disable all rules with `$redirect=nooptext` for any request that matches `||example.org^`. More information on redirects and their usage is available [on GitHub](https://github.com/AdguardTeam/Scriptlets#redirect-resources). @@ -1575,7 +1600,7 @@ Allowlist rules with `@@` mark have higher priority than `$redirect` rules. If a basic rule with the `$important` modifier and the `$redirect` rule matches the same URL, the latter is overridden unless it's also marked as `$important`. -[//]: # (Please do not replace `>` by `→`) + **In short: `$important` > `@@` > `$redirect` > `basic rules`.** @@ -1583,8 +1608,8 @@ Go to [rules priorities](#rule-priorities) for more details. :::info Compatibility -* Rules with `$redirect` modifier are not supported by AdGuard Content Blocker, AdGuard for iOS and Safari. -* `$redirect` in uBlock Origin supports specifying priority, e.g. `$redirect=noopjs:42`. AdGuard does not support it and instead just discards the priority postfix. +- Rules with `$redirect` modifier are not supported by AdGuard Content Blocker, AdGuard for iOS and Safari. +- `$redirect` in uBlock Origin supports specifying priority, e.g. `$redirect=noopjs:42`. AdGuard does not support it and instead just discards the priority postfix. ::: @@ -1598,7 +1623,7 @@ Negating `$redirect-rule` works exactly the same way as for regular `$redirect` **Examples** -``` +```adblock ||example.org/script.js ||example.org^$redirect-rule=noopjs ``` @@ -1624,9 +1649,9 @@ If a request matches multiple `$referrerpolicy` rules not disabled by exceptions **Examples** -* `||example.com^$referrerpolicy=unsafe-url` overrides the referrer policy for `example.com` with `unsafe-url`. -* `@@||example.com^$referrerpolicy=unsafe-url` disables the previous rule. -* `@@||example.com/abcd.html^$referrerpolicy` disables all `$referrerpolicy` rules on `example.com/abcd.html`. +- `||example.com^$referrerpolicy=unsafe-url` overrides the referrer policy for `example.com` with `unsafe-url`. +- `@@||example.com^$referrerpolicy=unsafe-url` disables the previous rule. +- `@@||example.com/abcd.html^$referrerpolicy` disables all `$referrerpolicy` rules on `example.com/abcd.html`. :::caution Restrictions @@ -1652,8 +1677,8 @@ Just like `$csp`, `$redirect`, `$removeparam`, and `$cookie`, this modifier exis **Basic syntax** -* `||example.org^$removeheader=header-name` removes a **response** header called `header-name` -* `||example.org^$removeheader=request:header-name` removes a **request** header called `header-name` +- `||example.org^$removeheader=header-name` removes a **response** header called `header-name` +- `||example.org^$removeheader=request:header-name` removes a **request** header called `header-name` `$removeheader` is case-insensitive, but we suggest always using lower case. @@ -1663,8 +1688,8 @@ This type of rules works pretty much the same way it works with `$csp` and `$red Use `@@` to negate `$removeheader`: -* `@@||example.org^$removeheader` negates **all** `$removeheader` rules for URLs that match `||example.org^`. -* `@@||example.org^$removeheader=header` negates the rule with `$removeheader=header` for any request matching `||example.org^`. +- `@@||example.org^$removeheader` negates **all** `$removeheader` rules for URLs that match `||example.org^`. +- `@@||example.org^$removeheader=header` negates the rule with `$removeheader=header` for any request matching `||example.org^`. `$removeheader` rules can also be disabled by `$document` and `$urlblock` exception rules. But basic exception rules without modifiers will not do that. For example, `@@||example.com^` will not disable `$removeheader=p` for requests to `example.com`, but `@@||example.com^$urlblock` will. @@ -1676,70 +1701,71 @@ In case of multiple `$removeheader` rules matching a single request, we will app **Examples** -* `||example.org^$removeheader=refresh` removes `Refresh` header from all HTTP responses returned by `example.org` and its subdomains. -* `||example.org^$removeheader=request:x-client-data` removes `X-Client-Data` header from all HTTP requests. -* Next block of rules removes `Refresh` and `Location` headers from all HTTP responses returned by `example.org` save for requests to `example.org/path/*`, for which no headers will be removed: - ``` - ||example.org^$removeheader=refresh - ||example.org^$removeheader=location - @@||example.org/path/$removeheader - ``` +- `||example.org^$removeheader=refresh` removes `Refresh` header from all HTTP responses returned by `example.org` and its subdomains. +- `||example.org^$removeheader=request:x-client-data` removes `X-Client-Data` header from all HTTP requests. +- Next block of rules removes `Refresh` and `Location` headers from all HTTP responses returned by `example.org` save for requests to `example.org/path/*`, for which no headers will be removed: + + ```adblock + ||example.org^$removeheader=refresh + ||example.org^$removeheader=location + @@||example.org/path/$removeheader + ``` :::caution Restrictions 1. This type of rules can be used [**only in trusted filters**](#trusted-filters). -2. In order to avoid compromising the security `$removeheader` cannot remove headers from the list below: - * `access-control-allow-origin` - * `access-control-allow-credentials` - * `access-control-allow-headers` - * `access-control-allow-methods` - * `access-control-expose-headers` - * `access-control-max-age` - * `access-control-request-headers` - * `access-control-request-method` - * `origin` - * `timing-allow-origin` - * `allow` - * `cross-origin-embedder-policy` - * `cross-origin-opener-policy` - * `cross-origin-resource-policy` - * `content-security-policy` - * `content-security-policy-report-only` - * `expect-ct` - * `feature-policy` - * `origin-isolation` - * `strict-transport-security` - * `upgrade-insecure-requests` - * `x-content-type-options` - * `x-download-options` - * `x-frame-options` - * `x-permitted-cross-domain-policies` - * `x-powered-by` - * `x-xss-protection` - * `public-key-pins` - * `public-key-pins-report-only` - * `sec-websocket-key` - * `sec-websocket-extensions` - * `sec-websocket-accept` - * `sec-websocket-protocol` - * `sec-websocket-version` - * `p3p` - * `sec-fetch-mode` - * `sec-fetch-dest` - * `sec-fetch-site` - * `sec-fetch-user` - * `referrer-policy` - * `content-type` - * `content-length` - * `accept` - * `accept-encoding` - * `host` - * `connection` - * `transfer-encoding` - * `upgrade` - -3. `$removeheader` rules are only compatible with `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and [content type modifiers](#content-type-modifiers) such as `$script` and `$stylesheet`. The rules which have any other modifiers are considered invalid and will be discarded. +1. In order to avoid compromising the security `$removeheader` cannot remove headers from the list below: + - `access-control-allow-origin` + - `access-control-allow-credentials` + - `access-control-allow-headers` + - `access-control-allow-methods` + - `access-control-expose-headers` + - `access-control-max-age` + - `access-control-request-headers` + - `access-control-request-method` + - `origin` + - `timing-allow-origin` + - `allow` + - `cross-origin-embedder-policy` + - `cross-origin-opener-policy` + - `cross-origin-resource-policy` + - `content-security-policy` + - `content-security-policy-report-only` + - `expect-ct` + - `feature-policy` + - `origin-isolation` + - `strict-transport-security` + - `upgrade-insecure-requests` + - `x-content-type-options` + - `x-download-options` + - `x-frame-options` + - `x-permitted-cross-domain-policies` + - `x-powered-by` + - `x-xss-protection` + - `public-key-pins` + - `public-key-pins-report-only` + - `sec-websocket-key` + - `sec-websocket-extensions` + - `sec-websocket-accept` + - `sec-websocket-protocol` + - `sec-websocket-version` + - `p3p` + - `sec-fetch-mode` + - `sec-fetch-dest` + - `sec-fetch-site` + - `sec-fetch-user` + - `referrer-policy` + - `content-type` + - `content-length` + - `accept` + - `accept-encoding` + - `host` + - `connection` + - `transfer-encoding` + - `upgrade` + +1. `$removeheader` rules are only compatible with `$domain`, `$third-party`, `$app`, `$important`, `$match-case`, and [content type modifiers](#content-type-modifiers) such as `$script` and `$stylesheet`. The rules which have any other modifiers are considered invalid and will be discarded. ::: @@ -1765,7 +1791,7 @@ Rules with `$removeparam` modifier are intended to strip query parameters from r **Basic syntax** -* `$removeparam=param` removes query parameter with the name `param` from URLs of any request, e.g. a request to `http://example.com/page?param=1&another=2` will be transformed into `http://example.com/page?another=2`. +- `$removeparam=param` removes query parameter with the name `param` from URLs of any request, e.g. a request to `http://example.com/page?param=1&another=2` will be transformed into `http://example.com/page?another=2`. `$removeparam` basic syntax is supported starting with v1.7 of [CoreLibs](https://adguard.com/en/blog/introducing-corelibs.html) and v3.6 of AdGuard Browser Extension. @@ -1773,7 +1799,7 @@ Rules with `$removeparam` modifier are intended to strip query parameters from r You can also use regular expressions to match query parameters and/or their values: -* `$removeparam=/regexp/[options]` — removes query parameters that matches the `regexp` regular expression from URLs of any request. Unlike basic syntax, it means *"remove query parameters normalized to a `name=value` string which match the `regexp` regular expression"*. `[options]` here is the list of regular expression options. At the moment, the only supported option is `i` which makes matching case-insensitive. +- `$removeparam=/regexp/[options]` — removes query parameters that matches the `regexp` regular expression from URLs of any request. Unlike basic syntax, it means *"remove query parameters normalized to a `name=value` string which match the `regexp` regular expression"*. `[options]` here is the list of regular expression options. At the moment, the only supported option is `i` which makes matching case-insensitive. **Escaping special characters** @@ -1786,22 +1812,23 @@ Regexp-type rules target both name and value of the parameter. To minimize mista ::: We will try to detect and ignore unescaped `$` automatically using a simple rule of thumb — it is not an options delimiter if all three are true: + 1. It looks like `$/`; -2. There is another slash character `/` to the left of it; -3. There is another unescaped dollar sign `$` to the left of that slash character. +1. There is another slash character `/` to the left of it; +1. There is another unescaped dollar sign `$` to the left of that slash character. **Remove all query parameters** Specify naked `$removeparam` to remove all query parameters: -* `||example.org^$removeparam` — removes all query parameters from URLs matching `||example.org^`. +- `||example.org^$removeparam` — removes all query parameters from URLs matching `||example.org^`. **Inversion** Use `~` to apply inversion: -* `$removeparam=~param` — removes all query parameters with the name different from `param`. -* `$removeparam=~/regexp/` — removes all query parameters that do not match the `regexp` regular expression. +- `$removeparam=~param` — removes all query parameters with the name different from `param`. +- `$removeparam=~/regexp/` — removes all query parameters that do not match the `regexp` regular expression. **Negating `$removeparam`** @@ -1809,9 +1836,9 @@ This sort of rules work pretty much the same way it works with [`$csp`](#csp-mod Use `@@` to negate `$removeparam`: -* `@@||example.org^$removeparam` negates all `$removeparam` rules for URLs that match `||example.org^`. -* `@@||example.org^$removeparam=param` negates the rule with `$removeparam=param` for any request matching `||example.org^`. -* `@@||example.org^$removeparam=/regexp/` negates the rule with `$removeparam=/regexp/` for any request matching `||example.org^`. +- `@@||example.org^$removeparam` negates all `$removeparam` rules for URLs that match `||example.org^`. +- `@@||example.org^$removeparam=param` negates the rule with `$removeparam=param` for any request matching `||example.org^`. +- `@@||example.org^$removeparam=/regexp/` negates the rule with `$removeparam=/regexp/` for any request matching `||example.org^`. **Multiple rules matching a single request** @@ -1819,7 +1846,7 @@ In the case when multiple `$removeparam` rules match a single request, each of t **Examples** -``` +```adblock $removeparam=/^(utm_source|utm_medium|utm_term)=/ $removeparam=/^(utm_content|utm_campaign|utm_referrer)=/ @@||example.com^$removeparam @@ -1827,15 +1854,15 @@ $removeparam=/^(utm_content|utm_campaign|utm_referrer)=/ With these rules some [UTM parameters](https://en.wikipedia.org/wiki/UTM_parameters) will be stripped out from any request, except that requests to `example.com` will not be stripped at all, e.g. `http://google.com/page?utm_source=s&utm_referrer=fb.com&utm_content=img` will be transformed to `http://google.com/page`, but `http://example.com/page?utm_source=s&utm_referrer=fb.com&utm_content=img` will not be affected by the blocking rule. -* `$removeparam=utm_source` removes `utm_source` query parameter from all requests. +- `$removeparam=utm_source` removes `utm_source` query parameter from all requests. -* `$removeparam=/utm_.*/` — removes all `utm_* query` parameters from URL queries of any request, e.g. a request to `http://example.com/page?utm_source=test` will be transformed to `http://example.com/page`. +- `$removeparam=/utm_.*/` removes all `utm_* query` parameters from URL queries of any request, e.g. a request to `http://example.com/page?utm_source=test` will be transformed to `http://example.com/page`. -* `$removeparam=/^utm_source=campaign$/` — removes `utm_source` query parameter with the value equal to `campaign`. It does not touch other `utm_source` parameters. +- `$removeparam=/^utm_source=campaign$/` removes `utm_source` query parameter with the value equal to `campaign`. It does not touch other `utm_source` parameters. **Negating one `$removeparam` rule and replacing it with a different rule** -``` +```adblock $removeparam=/^(gclid|yclid|fbclid)=/ @@||example.com^$removeparam=/^(gclid|yclid|fbclid)=/ ||example.com^$removeparam=/^(yclid|fbclid)=/ @@ -1845,7 +1872,7 @@ With these rules, Google, Yandex, and Facebook Click IDs will be removed from al **Negating `$removeparam` for all parameters** -``` +```adblock $removeparam=/^(utm_source|utm_medium|utm_term)=/ $removeparam=/^(utm_content|utm_campaign|utm_referrer)=/ @@||example.com^$removeparam @@ -1857,16 +1884,16 @@ With these rules, specified UTM parameters will be removed from any request save :::caution Restrictions -* Rules with `$removeparam` modifier can be used [**only in trusted filters**](#trusted-filters). -* `$removeparam` rules are compatible with [basic modifiers](#basic-rules-common-modifiers), [content-type modifiers](#content-type-modifiers), and with `$important` and `$app` modifiers. The rules which have any other modifiers are considered invalid and will be discarded. +- Rules with `$removeparam` modifier can be used [**only in trusted filters**](#trusted-filters). +- `$removeparam` rules are compatible with [basic modifiers](#basic-rules-common-modifiers), [content-type modifiers](#content-type-modifiers), and with `$important` and `$app` modifiers. The rules which have any other modifiers are considered invalid and will be discarded. ::: :::info Compatibility -* Rules with `$removeparam` modifier are supported by AdGuard for Windows, Mac, and Android and AdGuard Browser Extension for Chrome, Firefox, and Edge. -* `$removeparam` syntax for regular expressions is supported by AdGuard Browser Extension v4.0 and AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.8 or later**. -* `POST` request types are supported only by AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.10 or later**. +- Rules with `$removeparam` modifier are supported by AdGuard for Windows, Mac, and Android and AdGuard Browser Extension for Chrome, Firefox, and Edge. +- `$removeparam` syntax for regular expressions is supported by AdGuard Browser Extension v4.0 and AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.8 or later**. +- `POST` request types are supported only by AdGuard for Windows, Mac, and Android, **running CoreLibs version 1.10 or later**. ::: @@ -1878,11 +1905,11 @@ You will need some knowledge of regular expressions to use `$replace` modifier. **Features** -* `$replace` rules apply to any text response, but will not apply to binary (`media`, `image`, `object`, etc.). -* `$replace` rules do not apply if the size of the original response is more than 3MB. -* `$replace` rules have a higher priority than other basic rules (**including** exception rules). So if a request corresponds to two different rules one of which has the `$replace` modifier, this rule will be applied. -* Document-level exception rules with `$content` or `$document` modifiers do disable `$replace` rules for requests matching them. -* Other document-level exception rules (`$generichide`, `$elemhide` or `$jsinject` modifiers) are applied alongside `$replace` rules. It means that you can modify the page content with a `$replace` rule and disable cosmetic rules there at the same time. +- `$replace` rules apply to any text response, but will not apply to binary (`media`, `image`, `object`, etc.). +- `$replace` rules do not apply if the size of the original response is more than 3MB. +- `$replace` rules have a higher priority than other basic rules (**including** exception rules). So if a request corresponds to two different rules one of which has the `$replace` modifier, this rule will be applied. +- Document-level exception rules with `$content` or `$document` modifiers do disable `$replace` rules for requests matching them. +- Other document-level exception rules (`$generichide`, `$elemhide` or `$jsinject` modifiers) are applied alongside `$replace` rules. It means that you can modify the page content with a `$replace` rule and disable cosmetic rules there at the same time. `$replace` value can be empty in the case of exception rules. See examples section for further information. @@ -1894,26 +1921,27 @@ In case if multiple `$replace` rules match a single request, we will apply each In general, `$replace` syntax is similar to replacement with regular expressions [in Perl](http://perldoc.perl.org/perlrequick.html#Search-and-replace). -``` +```text replace = "/" regexp "/" replacement "/" modifiers ``` -* **`regexp`** — a regular expression. -* **`replacement`** — a string that will be used to replace the string corresponding to `regexp`. -* **`modifiers`** — a regular expression flags. For example, `i` — insensitive search, or `s` — single-line mode. +- **`regexp`** — a regular expression. +- **`replacement`** — a string that will be used to replace the string corresponding to `regexp`. +- **`modifiers`** — a regular expression flags. For example, `i` — insensitive search, or `s` — single-line mode. In the `$replace` value, two characters must be escaped: comma `,` and dollar sign `$`. Use backslash `\` for it. For example, an escaped comma looks like this: `\,`. **Examples** -``` +```adblock ||example.org^$replace=/()[\s\S]*<\/VAST>/\$1<\/VAST>/i ``` There are three parts in this rule: -* `regexp` - `()(.|\s)*<\/VAST>`; -* `replacement` — `\$1<\/VAST>` where `$` is escaped; -* `modifiers` — `i` for insensitive search. + +- `regexp` - `()(.|\s)*<\/VAST>`; +- `replacement` — `\$1<\/VAST>` where `$` is escaped; +- `modifiers` — `i` for insensitive search. You can see how this rule works here: http://regexr.com/3cesk @@ -1924,13 +1952,13 @@ http://regexr.com/3cesk 2. `||example.org^$replace=/Z/Y/` 3. `@@||example.org/page/*$replace=/Z/Y/` -* Both rule 1 and 2 will be applied to all requests sent to `example.org`. -* Rule 2 is disabled for requests matching `||example.org/page/`, **but rule 1 still works!** +- Both rule 1 and 2 will be applied to all requests sent to `example.org`. +- Rule 2 is disabled for requests matching `||example.org/page/`, **but rule 1 still works!** **Disabling `$replace` rules** -* `@@||example.org^$replace` will disable all `$replace` rules matching `||example.org^`. -* `@@||example.org^$document` or `@@||example.org^$content` will disable all `$replace` rules **originated from** pages of `example.org` **including the page itself**. +- `@@||example.org^$replace` will disable all `$replace` rules matching `||example.org^`. +- `@@||example.org^$document` or `@@||example.org^$content` will disable all `$replace` rules **originated from** pages of `example.org` **including the page itself**. :::caution Limitations @@ -1950,7 +1978,7 @@ Rules with `$replace` modifier are supported by AdGuard for Windows, Mac, and An **Examples** -``` +```adblock ||example.com$_,removeparam=/^ss\\$/,_,image ||example.com$replace=/bad/good/,___,~third-party ``` @@ -1971,11 +1999,11 @@ but the support shall be removed in the future. ::: -Usually, blocked requests look like a server error to browser. If you use `$empty` modifier, AdGuard will emulate a blank response from the server with` 200 OK` status. +Usually, blocked requests look like a server error to browser. If you use `$empty` modifier, AdGuard will emulate a blank response from the server with`200 OK` status. **Examples** -* `||example.org^$empty` returns an empty response to all requests to `example.org` and all subdomains. +- `||example.org^$empty` returns an empty response to all requests to `example.org` and all subdomains. :::info Compatibility @@ -1997,7 +2025,7 @@ As a response to blocked request AdGuard returns a short video placeholder. **Examples** -* `||example.com/videos/$mp4` blocks all video downloads from `||example.com/videos/*` and changes the response to a video placeholder. +- `||example.com/videos/$mp4` blocks all video downloads from `||example.com/videos/*` and changes the response to a video placeholder. :::info Compatibility @@ -2032,8 +2060,8 @@ The base priority of any rule is 1. If the calculated priority is a floating-poi :::info Compatibility -* The concept of priority has been introduced in tsurlfilter v2.1.0 and CoreLibs v1.13. Before that AdGuard didn't have any special priority computation algorithm and collisions handling could be different depending on AdGuard product and version. -* AdGuard for iOS, Safari, and AdGuard Content Blocker rely on the browsers implementation and they cannot follow the rules specified here. +- The concept of priority has been introduced in tsurlfilter v2.1.0 and CoreLibs v1.13. Before that AdGuard didn't have any special priority computation algorithm and collisions handling could be different depending on AdGuard product and version. +- AdGuard for iOS, Safari, and AdGuard Content Blocker rely on the browsers implementation and they cannot follow the rules specified here. ::: @@ -2045,50 +2073,52 @@ Modifier aliases (`1p`, `3p`, etc.) are not included in these categories, howeve #### Basic modifiers, the presence of each adds 1 to the priority {#priority-category-1} -[//]: # (Please keep them sorted) + - * [`$app`](#app-modifier) with negated applications using `~`, - * [`$denyallow`](#denyallow-modifier), - * [`$dnsrewrite`](#dnsrewrite-modifier), - * [`$domain`](#domain-modifier) with negated domains using `~`, - * [`$match-case`](#match-case-modifier), - * [`$method`](#method-modifier) with negated methods using `~`, - * [`$third-party`](#third-party-modifier), - * [`$to`](#to-modifier), - * restricted [content-types](#content-type-modifiers) with `~`. +- [`$app`](#app-modifier) with negated applications using `~`, +- [`$denyallow`](#denyallow-modifier), +- [`$dnsrewrite`](#dnsrewrite-modifier), +- [`$domain`](#domain-modifier) with negated domains using `~`, +- [`$match-case`](#match-case-modifier), +- [`$method`](#method-modifier) with negated methods using `~`, +- [`$third-party`](#third-party-modifier), +- [`$to`](#to-modifier), +- restricted [content-types](#content-type-modifiers) with `~`. When dealing with a negated domain, app, method, or content-type, we add **1 point** for the existence of the modifier itself, regardless of the quantity of negated domains or content-types. This is because the rule's scope is already infinitely broad. Put simply, by prohibiting multiple domains, content-types, methods or apps, the scope of the rule becomes only minimally smaller. #### Defined content-type modifiers, defined methods, defined headers, $popup, special exceptions {#priority-category-2} All allowed content types: -[//]: # (Please keep them sorted) - -* [`$document`](#document-modifier), -* [`$font`](#font-modifier), -* [`$image`](#image-modifier), -* [`$media`](#media-modifier), -* [`$object`](#object-modifier), -* [`$other`](#other-modifier), -* [`$ping`](#ping-modifier), -* [`$script`](#script-modifier), -* [`$stylesheet`](#stylesheet-modifier), -* [`$subdocument`](#subdocument-modifier), -* [`$websocket`](#websocket-modifier), -* [`$xmlhttprequest`](#xmlhttprequest-modifier); + + +- [`$document`](#document-modifier), +- [`$font`](#font-modifier), +- [`$image`](#image-modifier), +- [`$media`](#media-modifier), +- [`$object`](#object-modifier), +- [`$other`](#other-modifier), +- [`$ping`](#ping-modifier), +- [`$script`](#script-modifier), +- [`$stylesheet`](#stylesheet-modifier), +- [`$subdocument`](#subdocument-modifier), +- [`$websocket`](#websocket-modifier), +- [`$xmlhttprequest`](#xmlhttprequest-modifier); This also includes rules that implicitly add the modifier `$document`: -* [`$popup`](#popup-modifier); + +- [`$popup`](#popup-modifier); Or special exceptions that implicitly add `$document,subdocument`: -* [`$content`](#content-modifier), -* [`$elemhide`](#elemhide-modifier), -* [`$extension`](#extension-modifier), -* [`$genericblock`](#genericblock-modifier), -* [`$generichide`](#generichide-modifier), -* [`$jsinject`](#jsinject-modifier), -* [`$specifichide`](#specifichide-modifier), -* [`$urlblock`](#urlblock-modifier); + +- [`$content`](#content-modifier), +- [`$elemhide`](#elemhide-modifier), +- [`$extension`](#extension-modifier), +- [`$genericblock`](#genericblock-modifier), +- [`$generichide`](#generichide-modifier), +- [`$jsinject`](#jsinject-modifier), +- [`$specifichide`](#specifichide-modifier), +- [`$urlblock`](#urlblock-modifier); Or allowed methods via [`$method`](#method-modifier). @@ -2115,25 +2145,25 @@ Modifier values that are regexps or tld will be interpreted as normal entries of #### `$redirect` rules {#priority-category-6} -[//]: # (Please keep them sorted) + -* [`$redirect`](#redirect-modifier), -* [`$redirect-rule`](#redirect-rule-modifier). +- [`$redirect`](#redirect-modifier), +- [`$redirect-rule`](#redirect-rule-modifier). Each of which adds `10^3` to rule priority. #### Specific exceptions {#priority-category-4} -[//]: # (Please keep them sorted) + -* [`$content`](#content-modifier), -* [`$elemhide`](#elemhide-modifier), -* [`$extension`](#extension-modifier), -* [`$genericblock`](#genericblock-modifier), -* [`$generichide`](#generichide-modifier), -* [`$jsinject`](#jsinject-modifier), -* [`$specifichide`](#specifichide-modifier), -* [`$urlblock`](#urlblock-modifier); +- [`$content`](#content-modifier), +- [`$elemhide`](#elemhide-modifier), +- [`$extension`](#extension-modifier), +- [`$genericblock`](#genericblock-modifier), +- [`$generichide`](#generichide-modifier), +- [`$jsinject`](#jsinject-modifier), +- [`$specifichide`](#specifichide-modifier), +- [`$urlblock`](#urlblock-modifier); Each of which adds `10^4` to the priority. @@ -2226,6 +2256,7 @@ Rule weight: base weight + allowed content type, [category 2](#priority-category Rule weight: base weight + allowed content types, [category 2](#priority-category-2): `1 + (50 + 50/12) = 55`. + # Non-basic rules However, the capabilities of the basic rules may not be sufficient to block ads. Sometimes you need to hide an element or change part of the HTML code of a web page without breaking anything. The rules described in this section are created specifically for this purpose. @@ -2246,13 +2277,13 @@ Element hiding rules may operate differently [depending on the platform](#cosmet #### Syntax {#non-basic-rules-modifiers-syntax} -``` +```text rule = [domains] "##" selector domains = [domain0, domain1[, ...[, domainN]]] ``` -* **`selector`** — [CSS selector](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors), defines the elements to be hidden. -* **`domains`** — domain restriction for the rule. +- **`selector`** — [CSS selector](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors), defines the elements to be hidden. +- **`domains`** — domain restriction for the rule. If you want to limit the rule application area to certain domains, just enter them separated with commas. For example: `example.org,example.com##selector`. @@ -2271,9 +2302,9 @@ Element hiding rules are not dependent on each other. If there is a rule `exampl **Examples** -* `example.com##div.textad` — hides a `div` with a class `textad` at `example.com` and all subdomains. -* `example.com,example.org###adblock` — hides an element with attribute `id` equals `adblock` at `example.com`, `example.org` and all subdomains. -* `~example.com##.textad` — hides an element with a class `textad` at all domains, except `example.com` and its subdomains. +- `example.com##div.textad` — hides a `div` with a class `textad` at `example.com` and all subdomains. +- `example.com,example.org###adblock` — hides an element with attribute `id` equals `adblock` at `example.com`, `example.org` and all subdomains. +- `~example.com##.textad` — hides an element with a class `textad` at all domains, except `example.com` and its subdomains. **Limitations** @@ -2284,22 +2315,26 @@ Safari does not support both permitted and restricted domains. So the rules like Exceptions can disable some rules on particular domains. They are very similar to usual exception rules, but instead of `##` you have to use `#@#`. For example, there is a rule in filter: -``` + +```adblock ##.textad ``` If you want to disable it for `example.com`, you can create an exception rule: -``` + +```adblock example.com#@#.textad ``` Sometimes, it may be necessary to disable all restriction rules. For example, to conduct tests. To do this, use the exclusion rule without specifying a domain. It will completely disable matching CSS elemhide rule on ALL domains: -``` + +```adblock #@#.textad ``` The same can be achieved by adding this rule: -``` + +```adblock *#@#.textad ``` @@ -2311,18 +2346,18 @@ Sometimes, simple hiding of an element is not enough to deal with advertising. F **Syntax** -``` +```text rule = [domains] "#$#" selector "{" style "}" domains = [domain0, domain1[, ...[, domainN]]] ``` -* **`selector`** — [CSS selector](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors), that defines the elements we want to apply the style to. -* **`domains`** — domain restriction for the rule. Same principles as in [element hiding rules](#elemhide-syntax). -* **`style`** — CSS style, that we want to apply to selected elements. +- **`selector`** — [CSS selector](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors), that defines the elements we want to apply the style to. +- **`domains`** — domain restriction for the rule. Same principles as in [element hiding rules](#elemhide-syntax). +- **`style`** — CSS style, that we want to apply to selected elements. **Examples** -``` +```adblock example.com#$#body { background-color: #333!important; } ``` @@ -2334,12 +2369,14 @@ Just like with element hiding, there is a type of rules that disable the selecte Exception rules syntax is almost the same, you just have to change `#$#` to `#@$#`. For example, there is a rule in filter: -``` + +```adblock #$#.textad { visibility: hidden; } ``` If you want to disable it for `example.com`, you can create an exception rule: -``` + +```adblock example.com#@$#.textad { visibility: hidden; } ``` @@ -2363,19 +2400,19 @@ CSS rules may operate differently [depending on the platform](#cosmetic-rules-pr ### Extended CSS selectors {#extended-css-selectors} -* [Limitations](#extended-css-limitations) -* [Pseudo-class `:has()`](#extended-css-has) -* [Pseudo-class `:contains()`](#extended-css-contains) -* [Pseudo-class `:matches-css()`](#extended-css-matches-css) -* [Pseudo-class `:matches-attr()`](#extended-css-matches-attr) -* [Pseudo-class `:matches-property()`](#extended-css-property) -* [Pseudo-class `:xpath()`](#extended-css-xpath) -* [Pseudo-class `:nth-ancestor()`](#extended-css-nth-ancestor) -* [Pseudo-class `:upward()`](#extended-css-upward) -* [Pseudo-class `:remove()` and pseudo-property `remove`](#remove-pseudos) -* [Pseudo-class `:is()`](#extended-css-is) -* [Pseudo-class `:not()`](#extended-css-not) -* [Pseudo-class `:if-not()` (removed)](#extended-css-if-not) +- [Limitations](#extended-css-limitations) +- [Pseudo-class `:has()`](#extended-css-has) +- [Pseudo-class `:contains()`](#extended-css-contains) +- [Pseudo-class `:matches-css()`](#extended-css-matches-css) +- [Pseudo-class `:matches-attr()`](#extended-css-matches-attr) +- [Pseudo-class `:matches-property()`](#extended-css-property) +- [Pseudo-class `:xpath()`](#extended-css-xpath) +- [Pseudo-class `:nth-ancestor()`](#extended-css-nth-ancestor) +- [Pseudo-class `:upward()`](#extended-css-upward) +- [Pseudo-class `:remove()` and pseudo-property `remove`](#remove-pseudos) +- [Pseudo-class `:is()`](#extended-css-is) +- [Pseudo-class `:not()`](#extended-css-not) +- [Pseudo-class `:if-not()` (removed)](#extended-css-if-not) CSS 3.0 is not always enough to block ads. To solve this problem AdGuard extends CSS capabilities by adding support for the new pseudo-elements. We have developed a separate [open-source library](https://github.com/AdguardTeam/ExtendedCss) for non-standard element selecting and applying CSS styles with extended properties. @@ -2397,17 +2434,17 @@ Regardless of the CSS pseudo-classes you are using in the rule, you can use spec The syntax for extended CSS rules: -* `#?#` — for element hiding, `#@?#` — for exceptions -* `#$?#` — for CSS rules, `#@$?#` — for exceptions +- `#?#` — for element hiding, `#@?#` — for exceptions +- `#$?#` — for CSS rules, `#@$?#` — for exceptions We **strongly recommend** using these markers any time when you use an extended CSS selector. **Examples** -* `example.org#?#div:has(> a[target="_blank"][rel="nofollow"])` — this rule blocks all `div` elements containing a child node that has a link with the attributes `[target="_blank"][rel="nofollow"]`. The rule applies only to `example.org` and its subdomains. -* `example.com#$?#h3:contains(cookies) { display: none!important; }` — this rule sets the style `display: none!important` to all `h3` elements that contain the word `cookies`. The rule applies only to `example.com` and all its subdomains. -* `example.net#?#.banner:matches-css(width: 360px)` — this rule blocks all `.banner` elements with the style property `width: 360px`. The rule applies only to `example.net` and its subdomains. -* `example.net#@?#.banner:matches-css(width: 360px)` — this rule will disable the previous rule. +- `example.org#?#div:has(> a[target="_blank"][rel="nofollow"])` — this rule blocks all `div` elements containing a child node that has a link with the attributes `[target="_blank"][rel="nofollow"]`. The rule applies only to `example.org` and its subdomains. +- `example.com#$?#h3:contains(cookies) { display: none!important; }` — this rule sets the style `display: none!important` to all `h3` elements that contain the word `cookies`. The rule applies only to `example.com` and all its subdomains. +- `example.net#?#.banner:matches-css(width: 360px)` — this rule blocks all `.banner` elements with the style property `width: 360px`. The rule applies only to `example.net` and its subdomains. +- `example.net#@?#.banner:matches-css(width: 360px)` — this rule will disable the previous rule. You can apply standard CSS selectors using the ExtendedCss library by using a rule marker `#?#`, e.g. `#?#div.banner`. @@ -2450,9 +2487,10 @@ Synonyms `:-abp-has()` is supported by ExtendedCss for better compatibility. **Syntax** -``` +```text [target]:has(selector) ``` + - `target` — optional, standard or extended CSS selector, can be missed for checking *any* element - `selector` — required, standard or extended CSS selector @@ -2463,6 +2501,7 @@ A selector list can be set in `selector` as well. In this case **all** selectors ##### `:has()` limitations {#extended-css-has-limitations} Usage of the `:has()` pseudo-class is [restricted for some cases (2, 3)](https://bugs.chromium.org/p/chromium/issues/detail?id=669058#c54): + - disallow `:has()` inside the pseudos accepting only compound selectors; - disallow `:has()` after regular pseudo-elements. @@ -2473,6 +2512,7 @@ Native implementation does not allow any usage of `:scope` inside `:has()` argum **Examples** `div:has(.banner)` selects all `div` elements which **include** an element with the `banner` class: + ```html
Not selected
@@ -2482,6 +2522,7 @@ Native implementation does not allow any usage of `:scope` inside `:has()` argum ``` `div:has(> .banner)` selects all `div` elements which **include** an `banner` class element as a *direct child* of `div`: + ```html
Not selected
@@ -2491,6 +2532,7 @@ Native implementation does not allow any usage of `:scope` inside `:has()` argum ``` `div:has(+ .banner)` selects all `div` elements **preceding** `banner` class element which *immediately follows* the `div` and both are children of the same parent: + ```html
Not selected
@@ -2500,6 +2542,7 @@ Native implementation does not allow any usage of `:scope` inside `:has()` argum ``` `div:has(~ .banner)` selects all `div` elements **preceding** `banner` class element which *follows* the `div` but *not necessarily immediately* and both are children of the same parent: + ```html
Not selected
@@ -2509,6 +2552,7 @@ Native implementation does not allow any usage of `:scope` inside `:has()` argum ``` `div:has(span, .banner)` selects all `div` elements which **include both** `span` element and `banner` class element: + ```html
Not selected
@@ -2525,7 +2569,6 @@ is supported but **not recommended**. ::: - #### Pseudo-class `:contains()` {#extended-css-contains} The `:contains()` pseudo-class principle is very simple: it allows to select the elements that contain specified text or which content matches a specified regular expression. Regexp flags are supported. @@ -2542,15 +2585,17 @@ Synonyms `:-abp-contains()` and `:has-text()` are supported for better compatibi **Syntax** -``` +```text [target]:contains(match) ``` + - `target` — optional, standard or extended CSS selector, can be missed for checking *any* element - `match` — required, string or regular expression for matching element `textContent`. Regular expression flags are supported. **Examples** For such DOM: + ```html
Not selected
@@ -2559,7 +2604,8 @@ For such DOM: ``` the element `div#match` can be selected by any on these extended selectors: -``` + +```adblock ! plain text div:contains(banner) @@ -2589,9 +2635,10 @@ The `:matches-css()` pseudo-class allows to match the element by its current sty **Syntax** -``` +```text [target]:matches-css([pseudo-element, ] property: pattern) ``` + - `target` — optional, standard or extended CSS selector, can be missed for checking *any* element - `pseudo-element` — optional, valid standard pseudo-element, e.g. `before`, `after`, `first-line`, etc. - `property` — required, a name of CSS property to check the element for @@ -2606,6 +2653,7 @@ For **regexp** patterns `\` should be **escaped**, e.g. `:matches-css(background **Examples** For such DOM: + ```html