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

# Plugin Manifest

> Complete reference for plugin.json fields.

Every plugin must include a `plugin.json` at its root. The shell reads this file to discover, validate, and register your plugin before loading any code.

Point your editor at the JSON Schema for autocomplete and inline validation:

```json theme={null}
{
  "$schema": "https://cdn.skyvexsoftware.com/schemas/stratos-plugin.json"
}
```

***

## Required Fields

### `id`

**Type:** `string`

Unique identifier for your plugin. Used internally for routing, IPC namespacing, config storage, and CDN distribution paths.

Rules: lowercase alphanumeric and hyphens only. Must be unique across all installed plugins.

```json theme={null}
{ "id": "fleet-manager" }
```

### `name`

**Type:** `string`

Display name shown in the sidebar and settings screens.

```json theme={null}
{ "name": "Fleet Manager" }
```

### `version`

**Type:** `string`

Semantic version string. Must match the version in `latest.json` on the CDN when distributing updates.

```json theme={null}
{ "version": "1.2.0" }
```

### `description`

**Type:** `string`

Short description of what the plugin does. Displayed in the plugin info panel.

```json theme={null}
{ "description": "Browse and book available flights across the fleet." }
```

### `type`

**Type:** `"user" | "airline"`

Controls how the plugin is distributed:

* **`"airline"`** — Managed by the VA admin platform. Required plugins are synced automatically to all pilots when they authenticate. The VA admin controls which version pilots receive.
* **`"user"`** — Installed by individual pilots from the plugin store. Each pilot can install or remove it independently.

```json theme={null}
{ "type": "airline" }
```

### `author`

**Type:** `PluginAuthor`

| Field     | Type     | Description                                                |
| --------- | -------- | ---------------------------------------------------------- |
| `id`      | `string` | Unique developer slug (e.g. `"my-va"`). Used in CDN paths. |
| `name`    | `string` | Display name (e.g. `"My Virtual Airline"`).                |
| `contact` | `string` | Optional contact email.                                    |

```json theme={null}
{
  "author": {
    "id": "my-va",
    "name": "My Virtual Airline",
    "contact": "dev@my-va.com"
  }
}
```

### `icon_light` and `icon_dark`

**Type:** `string`

Relative paths to sidebar icons — one for light theme, one for dark theme.

```json theme={null}
{
  "icon_light": "icon-light.svg",
  "icon_dark": "icon-dark.svg"
}
```

**Icon requirements:**

* Place files in `assets/` at the plugin root (e.g. `assets/icon-light.svg`)
* SVG or PNG format
* Square aspect ratio
* Both variants required — the shell switches between them based on the active theme

***

## Background Modules

Background modules do **not** require any manifest configuration. The shell discovers them automatically by convention — if a `background/index.js` file exists in your plugin's root directory, the shell loads it as a background service in the Electron main process. See [Background Module](/sdk/background/overview) for the module contract.

## Optional Fields

### `homepage`

**Type:** `string`

Optional URL pointing to the plugin's homepage, documentation site, or GitHub repository. When set, the plugin info panel in Stratos Settings renders it as a clickable link that opens in the user's default browser.

Must be a fully-qualified `http://` or `https://` URL. Other schemes are ignored.

```json theme={null}
{ "homepage": "https://www.example.com/" }
```

### `availableSettings`

**Type:** `array`

Declares configurable settings for your plugin. The shell renders these automatically in the Settings page. Each setting has:

| Field         | Type                  | Description                             |
| ------------- | --------------------- | --------------------------------------- |
| `key`         | `string`              | Unique key used to read/write the value |
| `name`        | `string`              | Display label                           |
| `description` | `string`              | Optional help text                      |
| `type`        | `string`              | Input type (see table below)            |
| `scope`       | `"user" \| "airline"` | Who can configure this setting          |
| `default`     | any                   | Default value                           |

**Setting types:**

| Type       | Rendered As        | Extra Fields                                            |
| ---------- | ------------------ | ------------------------------------------------------- |
| `boolean`  | Toggle switch      | `default?: boolean`                                     |
| `text`     | Text input         | `default?`, `pattern?`, `placeholder?`                  |
| `longtext` | Textarea           | `default?`, `placeholder?`                              |
| `number`   | Number input       | `default?`, `min?`, `max?`, `step?`                     |
| `range`    | Slider             | `default?`, `min` (required), `max` (required), `step?` |
| `list`     | Dropdown           | `default?`, `options` (required)                        |
| `radio`    | Radio group        | `default?`, `options` (required)                        |
| `date`     | Date picker        | `default?`                                              |
| `json`     | Monospace textarea | `default?`                                              |

**Scopes:**

* **`"user"`** — Each pilot configures their own value in Stratos Settings.
* **`"airline"`** — Controlled by the VA admin platform. Read-only in the client. Use for VA-wide config like welcome messages, branding, event rules, or feature flags.

***

## Full Example

```json theme={null}
{
  "$schema": "https://cdn.skyvexsoftware.com/schemas/stratos-plugin.json",
  "id": "fleet-manager",
  "type": "airline",
  "name": "Fleet Manager",
  "version": "2.0.0",
  "description": "Browse and book available flights across the fleet.",
  "author": {
    "id": "my-va",
    "name": "My Virtual Airline",
    "contact": "dev@my-va.com"
  },
  "icon_light": "icon-light.svg",
  "icon_dark": "icon-dark.svg",
  "homepage": "https://my-va.com/stratos-plugins/fleet-manager",
  "availableSettings": [
    {
      "key": "welcome_message",
      "name": "Welcome Message",
      "description": "Custom message displayed on the dashboard",
      "type": "longtext",
      "scope": "airline",
      "placeholder": "Enter a welcome message..."
    },
    {
      "key": "show_map",
      "name": "Show Map",
      "description": "Display the flight map on the main page",
      "type": "boolean",
      "scope": "user",
      "default": true
    },
    {
      "key": "units",
      "name": "Unit System",
      "type": "list",
      "scope": "user",
      "default": "imperial",
      "options": [
        { "value": "imperial", "label": "Imperial (ft, kts, lbs)" },
        { "value": "metric", "label": "Metric (m, km/h, kg)" }
      ]
    }
  ]
}
```
