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:
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.
name
Type: string
Display name shown in the sidebar and settings screens.
version
Type: string
Semantic version string. Must match the version in latest.json on the CDN when distributing updates.
description
Type: string
Short description of what the plugin does. Displayed in the plugin info panel.
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.
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. |
icon_light and icon_dark
Type: string
Relative paths to sidebar icons — one for light theme, one for dark theme.
- 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
Optional Fields
background
Type: PluginBackgroundDefinition
Declares a background module that runs in the Electron main process. Omit this field entirely if your plugin is UI-only.
| Field | Type | Description |
|---|---|---|
entryModule | string | Relative path to the background module entry point |
settings
Type: PluginSettingsDefinition
Declares a custom settings panel rendered in the Stratos Settings page under your plugin’s section. If omitted, the shell renders a default settings panel from your availableSettings declarations.
| Field | Type | Description |
|---|---|---|
panel | string? | Relative path to a settings React component |
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 |
| 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? |
"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.
shell
Type: PluginShellRequirements
Minimum shell version required to run this plugin. The shell will refuse to load the plugin if the installed version is older.
| Field | Type | Description |
|---|---|---|
minVersion | string | Minimum shell version (semver) |