Skip to main content
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:
{
  "$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.
{ "id": "fleet-manager" }

name

Type: string Display name shown in the sidebar and settings screens.
{ "name": "Fleet Manager" }

version

Type: string Semantic version string. Must match the version in latest.json on the CDN when distributing updates.
{ "version": "1.2.0" }

description

Type: string Short description of what the plugin does. Displayed in the plugin info panel.
{ "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.
{ "type": "airline" }

author

Type: PluginAuthor
FieldTypeDescription
idstringUnique developer slug (e.g. "my-va"). Used in CDN paths.
namestringDisplay name (e.g. "My Virtual Airline").
contactstringOptional contact email.
{
  "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.
{
  "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

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.
FieldTypeDescription
entryModulestringRelative path to the background module entry point
{
  "background": {
    "entryModule": "background/index.ts"
  }
}
See Background Module for the module contract.

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.
FieldTypeDescription
panelstring?Relative path to a settings React component
{
  "settings": {
    "panel": "ui/SettingsPanel.tsx"
  }
}

availableSettings

Type: array Declares configurable settings for your plugin. The shell renders these automatically in the Settings page. Each setting has:
FieldTypeDescription
keystringUnique key used to read/write the value
namestringDisplay label
descriptionstringOptional help text
typestringInput type (see table below)
scope"user" | "airline"Who can configure this setting
defaultanyDefault value
Setting types:
TypeRendered AsExtra Fields
booleanToggle switchdefault?: boolean
textText inputdefault?, pattern?, placeholder?
longtextTextareadefault?, placeholder?
numberNumber inputdefault?, min?, max?, step?
rangeSliderdefault?, min (required), max (required), step?
listDropdowndefault?, options (required)
radioRadio groupdefault?, options (required)
dateDate pickerdefault?
jsonMonospace textareadefault?
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.

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.
FieldTypeDescription
minVersionstringMinimum shell version (semver)
{
  "shell": {
    "minVersion": "1.20.0"
  }
}

Full Example

{
  "$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",
  "background": {
    "entryModule": "background/index.ts"
  },
  "shell": {
    "minVersion": "1.20.0"
  },
  "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)" }
      ]
    }
  ]
}