plugin.json and the shell renders a settings UI for pilots automatically — no settings page required in your plugin.
Declaring Settings
Add anavailableSettings array to your plugin.json:
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 select | default?, options (required) |
radio | Radio group | default?, options (required) |
date | Date picker | default? |
json | Monospace textarea | default? |
list and radio types, options is an array of { value: string; label: string } objects.
Setting Scopes
"user" scope
Appears in the Stratos Settings page under your plugin’s section. Each pilot can configure their own value independently. Use user-scoped settings for:
- Unit system preferences (imperial vs metric)
- Display toggles (show/hide sections)
- Notification preferences
- Refresh intervals
"airline" scope
Managed by the VA admin platform and pushed to all pilots. Read-only in the client. The shell fetches airline-scoped values from the platform when the pilot authenticates. Use airline-scoped settings for:
- Welcome messages and branding
- Quick links and resources
- Event detection rules
- Route configurations
- Any content the VA wants to control centrally
Reading Settings in the UI
UseusePluginContext() to access settings from any component:
useShellConfig() hook directly:
Reading Settings in a Background Module
Background config access usesctx.config and is async:
Always Provide Defaults
Your plugin should work out of the box without any settings configured. The second argument toconfig.get is the fallback value returned when the setting has not been set: