Skip to main content
Use JSON resources for extension features like rulesets and managed schemas with validation and predictable output handling. Extension.js processes manifest-referenced JSON resources and validates them for known feature types. It watches them during development and emits output assets when needed.

JSON capabilities

CapabilityWhat it gives you
Manifest resource supportHandle Declarative Net Request (DNR) rulesets and managed schema files cleanly
JSON validationFail early on malformed JSON and invalid resource shape
Dev dependency trackingRecompile when referenced JSON resources change
Placeholder replacementResolve supported $EXTENSION_* placeholders in emitted JSON

JSON support

Common manifest fields:
Manifest fieldFile type expected
declarative_net_request.rule_resources.json
storage.managed_schema.json

Sample JSON declaration in manifest.json

Example JSON declaration in manifest.json:
{
  "manifest_version": 3,
  "name": "My Extension",
  "version": "1.0.0",
  "declarative_net_request": {
    "rule_resources": [
      {
        "id": "ruleset_1",
        "enabled": true,
        "path": "rules/ruleset.json"
      }
    ]
  },
  "storage": {
    "managed_schema": "schema/storage-schema.json"
  }
}

Output path

Extension.js emits JSON resources by feature context (for example, DNR and storage schema outputs):
declarative_net_request/<ruleset-id>.json
storage/managed_schema.json

Development behavior

  • Extension.js tracks manifest-referenced JSON files as file dependencies.
  • JSON edits trigger recompilation.
  • Some structural manifest changes related to JSON can require you to restart the dev server.

Validation behavior

Extension.js validates:
  • JSON syntax for referenced resources
  • DNR ruleset shape (array-based ruleset expectations)
  • managed storage schema shape (object-based expectations)

Environment placeholders

Extension.js replaces $EXTENSION_* placeholders in emitted .json assets during compilation, using the same pass as static HTML placeholder replacement.

Best practices

  • Keep manifest-referenced JSON focused on browser-required resource formats.
  • Validate JSON resources in CI before packaging.
  • Prefer stable file paths in manifest to reduce restart-required structural changes in development.
  • For app data consumed by code, consider JSON imports in JS/TS modules separately from manifest resource JSON.

Next steps