> ## Documentation Index
> Fetch the complete documentation index at: https://extension.js.org/llms.txt
> Use this file to discover all available pages before exploring further.

# JSON resources in extensions

> Use JSON resources like declarative net request rulesets and managed schemas in extensions. Extension.js validates and emits referenced JSON assets.

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

| Capability                | What it gives you                                                              |
| ------------------------- | ------------------------------------------------------------------------------ |
| Manifest resource support | Handle Declarative Net Request (DNR) rulesets and managed schema files cleanly |
| JSON validation           | Fail early on malformed JSON and invalid resource shape                        |
| Dev dependency tracking   | Recompile when referenced JSON resources change                                |
| Placeholder replacement   | Resolve supported `$EXTENSION_*` placeholders in emitted JSON                  |

## JSON support

Common manifest fields:

| Manifest field                           | File type expected |
| ---------------------------------------- | ------------------ |
| `declarative_net_request.rule_resources` | .json              |
| `storage.managed_schema`                 | .json              |

## Sample JSON declaration in `manifest.json`

Example JSON declaration in `manifest.json`:

```json theme={null}
{
  "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):

```plaintext theme={null}
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 may require a dev server restart.

## 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 continuous integration (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

* Continue with [icons in development](/docs/implementation-guide/icons).
* Learn about [manifest development behavior](/docs/implementation-guide/manifest-json).
