declarativeNetRequest Permission — Chrome Extension Reference

4 min read

declarativeNetRequest Permission — Chrome Extension Reference

Overview

Permission Variants

manifest.json Setup

{
  "permissions": ["declarativeNetRequest"],
  "declarative_net_request": {
    "rule_resources": [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules.json"
    }]
  }
}

Key APIs

Static Rules (rules.json)

[{
  "id": 1,
  "priority": 1,
  "action": { "type": "block" },
  "condition": {
    "urlFilter": "tracker.example.com",
    "resourceTypes": ["script", "image"]
  }
}]

Dynamic Rules

chrome.declarativeNetRequest.updateDynamicRules({
  addRules: [{
    id: 1000,
    priority: 1,
    action: { type: "block" },
    condition: { urlFilter: "ads.example.com" }
  }],
  removeRuleIds: [999]
});

Session Rules

chrome.declarativeNetRequest.updateSessionRules({
  addRules: [{ id: 2000, priority: 1, action: { type: "block" }, condition: { urlFilter: "temp.example.com" } }]
});

Rule Actions

Condition Matching

Common Patterns

Ad/Tracker Blocker

Request Redirect

Header Modification

Runtime Permission Check

import { checkPermission } from '@theluckystrike/webext-permissions';
const result = await checkPermission('declarativeNetRequest');

Debugging

Limits Summary

| Type | Max Rules | |——|———–| | Static | 300,000 (shared) | | Dynamic | 30,000 | | Session | 5,000 | | Regex | 1,000 |

Gotchas

Common Errors

API Reference

Frequently Asked Questions

What is declarativeNetRequest used for?

declarativeNetRequest allows extensions to block or modify network requests declaratively (without seeing the request content), which is required in Manifest V3.

Is declarativeNetRequest free to use?

Yes, the declarativeNetRequest API is free and doesn’t require any special approval, though there are ruleset size limits. —

Part of the Chrome Extension Guide by theluckystrike. Built at zovo.one.

No previous article
No next article