> ## 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.

# Who gets a plugin

> Give a plugin to all pilots, to pilots you pick, or to pilots who match a rule on their rank, pilot ID or anything else your crew system returns.

Every plugin you add goes to **All pilots** unless you say otherwise. You can instead pick **Specific pilots** by hand, or give it out **By rule**, for example only to pilots at rank level 3 and above. A rule is checked by Stratos on each pilot's computer, against the details your crew system returns when they sign in.

> [!NOTE]
>
> **At a glance**
>
> * Choose who gets a plugin at the top right of its page in **Plugins**: **Specific pilots**, **By rule** or **All pilots**.
> * A rule matches on **Rank level**, **Rank**, **Pilot ID**, or any other key your crew system returns for the pilot.
> * **Specific pilots** and **By rule** come with [Pro and Pro+](https://skyvexsoftware.com/pricing). Flight Tracking always goes to all pilots.
> * Pilots get or lose a plugin at their next check, never in the middle of a flight.

## Choose who gets a plugin

Open **Plugins**, select the plugin, and use the switch beside its **⋯** menu.

![Landing Analyser's header, with Specific pilots, By rule and All pilots beside its menu](https://mintcdn.com/skyvexsoftware/bs1lqmNtmj0XilDu/images/screenshots/console-settings/audience-control-light.webp?fit=max\&auto=format\&n=bs1lqmNtmj0XilDu\&q=85\&s=40ea2b4dfeb55d21f73493939ebfb9a1)

| Option | Who gets it |
| - | - |
| **All pilots** | Every pilot, including pilots who join later. |
| **Specific pilots** | Only the pilots you tick. Everyone else stops getting it. **Edit pilots** changes the list. |
| **By rule** | Pilots whose sign-in details match your rule. **Edit rule** changes it. |

Switching back to **All pilots** asks you to confirm, then clears your list of picked pilots or removes your rule. The plugin list under **Installed** shows each plugin's audience, such as "All pilots", "12 pilots" or "When rank level is at least 3".

When you add a plugin from **Browse**, you can choose **All pilots** or **Specific pilots** straight away. To use a rule, add the plugin first, then choose **By rule** on its page.

Only the airline's owner can change who gets a plugin.

## Give a plugin out by rule

**1. Open the rule editor**

On the plugin's page, choose **By rule**. **Who gets** opens with a starting rule of **Rank level** **is at least** 3.

**2. Set the conditions**

Each condition is a key, an operator and, for most operators, a value. **+ Condition** adds another. With more than one, choose whether pilots get the plugin when **all** or **any** of them are true.

**3. Try it**

**Try it on a pilot** holds an example of a pilot's sign-in details as Stratos stores them. Edit it to match one of your pilots, and the editor says whether they get the plugin. Nothing in it is saved.

**4. Save**

The line at the bottom reads the rule back in words, for example "Pilots get it when rank level is at least 3 and custom.beta\_tester is true." Click **Save rule**.

![Who gets Landing Analyser: rank level is at least 3 and custom.beta\_tester is true, with Try it on a pilot beside it](https://mintcdn.com/skyvexsoftware/bs1lqmNtmj0XilDu/images/screenshots/console-settings/rule-editor-light.webp?fit=max\&auto=format\&n=bs1lqmNtmj0XilDu\&q=85\&s=a43da584dd85c0f1ee9afdef407203eb)

Saving a rule clears any list of picked pilots, and it shows in the [Activity](/console/activity.md) log as "Changed who gets" the plugin.

## Match on your own fields

**Another key…** matches any other value your crew system returns for the pilot. Type its path, using dots to reach inside an object. If your Stratos module returns `"custom": { "hub": "NZAA", "beta_tester": true }`, then:

* `custom.hub` **is** `NZAA` gives the plugin to pilots based at Auckland.
* `custom.beta_tester` **is true** gives it to your beta testers.

The stock phpVMS Stratos module returns the standard pilot fields only. To match on anything else, add it to your module's pilot response; the [Core API](/guide/stratos-api/core.md) covers the module, and the [API reference](/api-reference/introduction.md) lists the pilot session fields (`POST /pilot/login` and `GET /pilot/verify`). Use **Rank level**, **Rank** and **Pilot ID** for those three fields rather than **Another key…**: Stratos stores them under its own names, `rankLevel`, `rank` and `pilotID`.

## When pilots get or lose the plugin

Stratos checks rules on the pilot's computer:

* when Stratos starts,
* when the pilot signs in to your airline,
* when you change your plugins in Console.

A pilot who matches gets the plugin like any other airline plugin. A pilot who stops matching loses it at the next check. Stratos doesn't tell the pilot either way. A plugin is never added or removed during a flight: it waits until the flight ends. See [How changes reach your pilots](/guide/how-changes-reach-pilots.md).

Stratos reads the pilot's details from your crew system when they sign in, and again each time they start a flight. So after a promotion, the new rank counts from the pilot's next flight (or sooner if they sign in again), and the plugin appears or goes at the next check after that. Pilots don't need to do anything.

## Plans and versions

**Specific pilots** and **By rule** come with [Pro and Pro+](https://skyvexsoftware.com/pricing). On Free they show a lock. If your airline moves to Free, a rule you already saved stays in place.

Flight Tracking always goes to all pilots, because every pilot needs it to track and file flights.

Rules need a recent Stratos core (2.54.0 or later for every condition). Stratos updates itself each time it opens, so this only matters for a pilot who hasn't opened Stratos in a long time.

## Reference

> **Keys and operators**
>
> | Key | Type | Operators |
> | - | - | - |
> | **Rank level** | Number | **is**, **is not**, **is at least**, **is at most** |
> | **Rank** | Text | **is**, **is not**, **contains**, **starts with** |
> | **Pilot ID** | Text | **is**, **is not**, **contains**, **starts with** |
> | **Another key…** | Anything | **is true**, **is false**, **is**, **is not**, **contains**, **is at least**, **is at most**, **exists** |
>
> * Text comparisons ignore case: **Rank** **is** `captain` matches "Captain".
> * **is at least** and **is at most** compare numbers.
> * **is true** accepts `true`, `"true"` or `1`; **is false** accepts `false`, `"false"` or `0`.
> * **exists** is true when the key is there and isn't empty (`null`).
> * **is not** is true when the key is missing.
> * A value that's an object is compared as its JSON.

> **Limits**
>
> * 1 to 20 conditions in a rule.
> * A path for **Another key…** is up to 200 characters of letters, numbers, `_` and `-`, with dots between the parts.
> * A value is up to 200 characters.
> * A pilot with no sign-in details (signed out of your airline) never matches a rule.

> **Where the values stay**
>
> Console stores and sends only the rule. Stratos checks it on the pilot's computer against their sign-in details, so the pilot's values never reach Skyvex Software.

## Related

* [How changes reach your pilots](/guide/how-changes-reach-pilots.md)
* [Stratos Core API](/guide/stratos-api/core.md)
* [Staff and roles](/console/staff-and-roles.md)
* [Activity](/console/activity.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.