# Porter Json

`porter/config/porter.json` is the **root config** that PorterWP reads first. It has three top‑level keys:

```
version   ⇠ cache‑buster
premium   ⇠ feature toggles that require the premium plugin
settings  ⇠ everything else (theme‑support, public assets, admin assets…)
```

```jsonc
{
  "version": "1.3.0",

  "premium": {
    "filters": true                 // enable Premium Filters block assets
  },

  "settings": {
    "theme-support": {
      "align-wide": true,
      "responsive-embeds": true,
      "editor-styles": true
    },

    "admin": {
      "editor_scripts": {
        "fontawesome": {
          "src": "//kit.fontawesome.com/XXXXXXXX.js",
          "args": { "in_footer": true }
        }
      },
      "editor_styles": {
        "admin_css": {
          "src": "./assets/dist/css/editor.min.css",
          "deps": []
        }
      }
    },

    "public": {
      "scripts": {
        "main": {
          "src": "./assets/dist/js/main.min.js",
          "deps": ["wp-i18n"],
          "ver": "1.0.0",
          "args": { "in_footer": true, "strategy": "defer" },
          "data": { "crossorigin": "anonymous", "async": true }
        }
      },
      "styles": {
        "theme": { "src": "./assets/dist/css/theme.min.css", "deps": [] }
      }
    }
  }
}
```

| Path                            | Type   | Purpose                                                                                                  |
| ------------------------------- | ------ | -------------------------------------------------------------------------------------------------------- |
| `version`                       | string | Increment to invalidate PorterWP’s object‑cache slice for this file.                                     |
| `premium`                       | object | Feature switches. \*\*Currently only \*\*\`\` (boolean) is read by `Porter_Premium_Features::filters()`. |
| `settings.theme-support`        | object | Keys forwarded to `add_theme_support()`.                                                                 |
| `settings.admin.editor_scripts` | object | Register/enqueue **block‑editor‑only** scripts. Same schema as `public.scripts`.                         |
| `settings.admin.editor_styles`  | object | Register/enqueue **editor‑only** stylesheets.                                                            |
| `settings.public.scripts`       | object | Front‑end scripts (see sample above).                                                                    |
| `settings.public.styles`        | object | Front‑end stylesheets.                                                                                   |

***

## Enqueue logic cheat‑sheet

| Context                   | Source file                         | Hook                                                  | Notes                                                              |
| ------------------------- | ----------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------ |
| **Public scripts/styles** | `includes/porter-config-public.php` | `wp_enqueue_scripts`                                  | Adds `<script>` attributes from `data` via `script_loader_tag`.    |
| **Admin scripts/styles**  | `includes/porter-config-admin.php`  | `enqueue_block_editor_assets`, `enqueue_block_assets` | Only loaded inside the block editor.                               |
| **Premium Filters**       | `includes/premium-features.php`     | `init`                                                | Loads premium PHP classes **only if** `premium.filters` is truthy. |

***

⇐ [Back to Config Index](https://whoisandywhite.gitbook.io/porterwp/documentation/configuration-files)
