Skip to main content

Plugin Configuration

The Maestro.yaml configuration file defines all settings for the Maestro Plugin, including airport configuration, runway modes, trajectories, and display preferences.

Configuration File Location​

The configuration file should be placed in the vatSys profile directory. vMaestro searches the following locations in order:

  1. {ProfileDirectory}/Plugins/Configs/Maestro/Maestro.yaml
  2. {ProfileDirectory}/Plugins/Configs/Maestro.yaml
  3. {ProfileDirectory}/Plugins/Maestro.yaml
  4. {ProfileDirectory}/Maestro.yaml
  5. {PluginDirectory}/Maestro.yaml

For most installations, {ProfileDirectory}/Maestro.yaml is recommended.

Configuration Structure​

The configuration file contains the following sections:

  1. CheckForUpdates: Plugin update behaviour
  2. Logging: Log file settings
  3. Server: Server connection and permissions
  4. Labels: Colour schemes and label layouts
  5. Airports: Airport-specific configuration

Plugin Settings​

Update Checks​

CheckForUpdates: false
PropertyTypeDefaultDescription
CheckForUpdatesbooleantrueWhether to check for updates on startup. Set to false to maintain control over plugin versions.

Logging​

Logging:
LogLevel: Information
MaxFileAgeDays: 7
PropertyTypeRequiredDescription
LogLevelstringYesMinimum level to log: Verbose, Debug, Information, Warning, Error, Fatal
MaxFileAgeDaysintegerYesDays to retain log files before deletion

Use Information for normal operation. Use Debug or Verbose for troubleshooting.

Server Configuration​

Configures the connection to the vMaestro server for online operation.

Server:
Uri: https://maestro.example.com/hub
Environments:
- VATSIM
- SweatBox-1
TimeoutSeconds: 30
Permissions:
ChangeTerminalConfiguration: [Flow]
ChangeLandingRates: [Flow]
MoveFlight: [Approach, Flow]
ChangeFeederFixEstimate: [Enroute, Flow]
ManageSlots: [Flow]
InsertFlight: [Approach, Flow]
MakePending: [Enroute, Approach, Flow]
ChangeRunway: [Enroute, Approach, Flow]
ManualDelay: [Enroute, Approach, Flow]
MakeStable: [Enroute, Flow]
Recompute: [Enroute, Flow]
Desequence: [Enroute, Approach, Flow]
Resequence: [Flow]
RemoveFlight: [Enroute, Approach, Flow]
ChangeApproachType: [Enroute, Approach, Flow]
ModifyWinds: [Approach, Flow]
PropertyTypeRequiredDefaultDescription
UristringYes-SignalR hub endpoint (must end in /hub)
EnvironmentsarrayYes["Default"]Available environments for session isolation
TimeoutSecondsintegerNo30Connection timeout
PermissionsobjectYes-Maps actions to permitted roles

Environments​

Environments allow multiple independent sequences for the same airport. Use cases include:

  • Separating live operations from training
  • Running concurrent training sessions

Permissions​

Available roles: Enroute, Approach, Flow

Available actions:

ActionDescription
ChangeTerminalConfigurationChange runway modes
ChangeLandingRatesModify acceptance rates
MoveFlightReorder flights in the sequence
ChangeFeederFixEstimateModify ETA_FF manually
ManageSlotsCreate, modify, or delete slots
InsertFlightAdd flights to the sequence
MakePendingReturn flights to the pending list
ChangeRunwayChange assigned runway
ManualDelayAssign delay limits
MakeStableForce flights to Stable state
RecomputeRecalculate flight parameters
DesequenceRemove flights to desequenced list
ResequenceReturn flights from desequenced list
RemoveFlightDelete flights from sequence
ChangeApproachTypeChange approach type
ModifyWindsManually adjust wind directions and speeds

Labels Configuration​

Defines colours and layouts for flight labels.

Global Colours​

Labels:
GlobalColours:
States:
Unstable: 255, 205, 105
Stable: 0, 0, 96
SuperStable: 255, 255, 255
Frozen: 96, 0, 0
Landed: 0, 235, 235

ControlActions:
Expedite: 0, 105, 0
NoDelay: 0, 0, 96
Resume: 0, 0, 96
SpeedReduction: 0, 235, 235
PathStretching: 255, 255, 255
Holding: 235, 235, 0

DeferredRunwayMode: 255, 255, 255

Colours are RGB values (0-255).

Label Layouts​

Labels:
Layouts:
- Identifier: Enroute
Items:
- {Type: LandingTime, Width: 2, Padding: 1}
- {Type: Runway, Width: 3, Padding: 1, ColourSources: [RunwayMode, Runway]}
- {Type: Callsign, Width: 10, Padding: 1, ColourSources: [State]}
- {Type: ApproachType, Width: 1, Padding: 1, ColourSources: [ApproachType]}
- {Type: HighSpeed, Width: 1, Padding: 0, Symbol: '+'}
- {Type: ManualDelay, Width: 1, Padding: 0, ZeroDelaySymbol: '#', ManualDelaySymbol: '%'}
- {Type: CouplingStatus, Width: 1, Padding: 1, UncoupledSymbol: '*'}
- {Type: RequiredDelay, Width: 3, Padding: 1, ColourSources: [RequiredControlAction]}
- {Type: RemainingDelay, Width: 3, Padding: 0, ColourSources: [RemainingControlAction]}

Item Types​

TypeDescriptionSpecial Properties
CallsignAircraft callsign
AircraftTypeAircraft type code
AircraftWakeCategoryWake category (L/M/H/J)
RunwayAssigned runway
ApproachTypeApproach type
LandingTimeScheduled landing time
FeederFixTimeScheduled feeder fix time
RequiredDelayDelay assigned at scheduling timeComponent
RemainingDelayRemaining delay to absorbComponent
ManualDelayManual delay indicatorZeroDelaySymbol, ManualDelaySymbol
HighSpeedHigh speed indicatorSymbol
CouplingStatusCoupling statusUncoupledSymbol

Item Properties​

PropertyTypeRequiredDescription
TypestringYesItem type
WidthintegerYesDisplay width in characters
PaddingintegerNoPadding in characters
ColourSourcesarrayNoColour sources in priority order

Delay Component​

The Component property on RequiredDelay and RemainingDelay controls which portion of the split delay is displayed. Defaults to Total.

ValueDescription
TotalSum of enroute and terminal delay
EnrouteEnroute delay only
TmaTerminal delay only

Colour Sources​

  • Runway - From airport runway colours
  • ApproachType - From airport approach colours
  • FeederFix - From airport feeder fix colours
  • State - From global state colours
  • RunwayMode - From global runway mode colour
  • RequiredControlAction - From global control action colours representing the required delay
  • RemainingControlAction - From global control action colours representing the remaining delay

Airport Configuration​

Each airport requires its own configuration section.

Basic Settings​

Airports:
- Identifier: YSSY
FeederFixes: [RIVET, WELSH, BOREE, YAKKA, MARLN]
Runways: [34L, 34R, 16L, 16R, "07", "25"]

DefaultAircraftType: B738
DefaultPendingFlightState: Stable
DefaultDepartureFlightState: Unstable
DefaultDummyFlightState: Frozen
ManualInteractionState: Stable

MaximumAutoActivationLeadTimeMinutes: 120
MinimumAutoActivationFlightTimeMinutes: 25
AutoActivateDepartures: true
MinimumUnstableMinutes: 5
StabilityThresholdMinutes: 25
FrozenThresholdMinutes: 15

MaxLandedFlights: 5
LandedFlightTimeoutMinutes: 10
LostFlightTimeoutMinutes: 10

AverageLandingSpeed: 150
UpperWindAltitude: 6000
PropertyTypeDefaultDescription
Identifierstring-ICAO code
FeederFixesarray-Feeder fix identifiers
Runwaysarray-Runway identifiers (quote numeric-only runways)
DefaultAircraftTypestringB738Fallback aircraft type
DefaultPendingFlightStatestringStableState for pending insertions
DefaultDepartureFlightStatestringUnstableState for departures
DefaultDummyFlightStatestringFrozenState for dummy flights
ManualInteractionStatestringStableState after manual changes
MaximumAutoActivationLeadTimeMinutesinteger120Flights with a landing estimate further out than this will not be auto-activated
MinimumAutoActivationFlightTimeMinutesinteger25Flights with an estimated flight time shorter than this value will not be auto-activated
AutoActivateDeparturesbooleantrueWhen true, flights from departure airports auto-activate once airborne, using the same criteria as any other arrival. When false, they are never auto-activated and must be inserted manually from the Pending List.
MinimumUnstableMinutesinteger5Minimum time in Unstable state
StabilityThresholdMinutesinteger25Minutes before ETA_FF to become Stable
FrozenThresholdMinutesinteger15Minutes before STA to become Frozen
MaxLandedFlightsinteger5Landed flights to retain
LandedFlightTimeoutMinutesinteger10Landed flight retention time
LostFlightTimeoutMinutesinteger10Timeout for lost flights
AverageLandingSpeedinteger150Average landing speed (TAS) in knots for distance calculations
UpperWindAltitudeinteger6000Altitude in feet for upper winds from GRIB data
DefaultMaxEnrouteLinearDelayMinutesinteger8Default enroute delay capacity used when no matching enroute trajectory is configured
DefaultOffModeSeparationSecondsinteger-Required. Default separation applied to flights landing on a runway not defined in the active runway mode. Used when an individual runway mode does not specify its own OffModeSeparationSeconds.

Flight states: Unstable, Stable, SuperStable, Frozen

Airport Colours​

Airports:
- Identifier: YSSY
Colours:
Runways:
34L: 255, 0, 0
34R: 0, 255, 0

ApproachTypes:
I: 255, 255, 0
V: 0, 255, 255

FeederFixes:
RIVET: 96, 0, 0
WELSH: 96, 0, 0

All airport colours are optional. Values are RGB (0-255).

Runway Modes​

RunwayModes:
- Identifier: 34IVA
DependencyRateSeconds: 0
OffModeSeparationSeconds: 300
Runways:
- Identifier: 34L
ApproachType: I
LandingRateSeconds: 180
FeederFixes: [RIVET, WELSH]
- Identifier: 34R
LandingRateSeconds: 180
FeederFixes: [BOREE, YAKKA, MARLN]

Runway Mode Properties​

PropertyTypeDefaultDescription
Identifierstring-Mode name
DependencyRateSecondsinteger0Additional separation for dependent runways
OffModeSeparationSecondsintegerairport DefaultOffModeSeparationSecondsSeparation for off-mode runways. When omitted, the airport-level default is used.
Runwaysarray-Runway configurations

Runway Configuration​

PropertyTypeDefaultDescription
Identifierstring-Runway identifier
ApproachTypestring-Approach type to assign
LandingRateSecondsinteger-Acceptance rate
FeederFixesarray[]Preferred feeder fixes

Trajectories​

Trajectories define the path from a feeder fix to a runway threshold as a sequence of segments. TTG is computed at runtime from segment geometry, aircraft approach speed, and upper wind.

Trajectories can be generated using the maestro-tools extract-stars command and edited manually to add pressure and max-pressure segments. See Maestro Tools for details.

Trajectories:
- FeederFix: MARGO
RunwayIdentifier: '23'
ApproachType: A
TransitionFix: BUGSU
Segments:
- {Identifier: BUGSU, Track: 143.3, DistanceNM: 28.7}
- {Identifier: GLOBE, Track: 90, DistanceNM: 8.8}
- {Identifier: ANPUT, Track: 57, DistanceNM: 7.7}
- {Identifier: VIRAT, Track: 140.5, DistanceNM: 5}
- {Identifier: '23', Track: 229.9, DistanceNM: 14}

Trajectory Properties​

PropertyTypeRequiredDescription
FeederFixstringYesFeeder fix identifier
RunwayIdentifierstringYesDestination runway
ApproachTypestringNoRestricts to a specific approach type (e.g., I, V)
TransitionFixstringNoRestricts to routes passing through this fix (e.g. a common point on a STAR with transitions via the feeder fixes)
SegmentsarrayYesOrdered segments from feeder fix to runway threshold
PressureSegmentsarrayNoSegments representing a small delay-absorption extension
MaxPressureSegmentsarrayNoSegments representing the maximum delay-absorption capacity

Segment Properties​

Each segment in Segments, PressureSegments, and MaxPressureSegments has the following properties:

PropertyTypeRequiredDescription
IdentifierstringNoFix name at which this segment terminates (informational only)
TracknumberYesTrue bearing in degrees
DistanceNMnumberYesSegment length in nautical miles

Pressure and Maximum Pressure​

PressureSegments represent a small path extension ATC can use to absorb minor delays, such as extending the downwind leg.

MaxPressureSegments represent the maximum delay that can be absorbed through vectoring or speed control within the TMA. This may include extended off-STAR routing or similar.

Both lists are optional. A trajectory with no pressure segments will result in all delay needing to be absorbed prior to the feeder fix (i.e. in the enroute phase)

Trajectories:

# RIVET -> 34L
# Illustrates branching pressure trajectories
- FeederFix: RIVET
RunwayIdentifier: 34L
Segments:
- {Identifier: BIGEM, Track: 61.6, DistanceNM: 12.6}
- {Identifier: TAMMI, Track: 61.5, DistanceNM: 9.9}
- {Identifier: BOOGI, Track: 61.5, DistanceNM: 10}
- {Identifier: DUDOK, Track: 133.6, DistanceNM: 5}
- {Identifier: NASHO, Track: 167.9, DistanceNM: 7.1}
- {Identifier: BASE, Track: 065.0, DistanceNM: 6.5}
- {Identifier: FINAL, Track: 335.2, DistanceNM: 12.8}

# Pressure trajectory: extends downwind after the NASHO segment from the normal trajectory
Pressure:
After: NASHO
Segments:
- {Identifier: DOWNWIND, Track: 167.9, DistanceNM: 3.0}
- {Identifier: BASE, Track: 065.0, DistanceNM: 6.5}
- {Identifier: FINAL, Track: 335.2, DistanceNM: 15.8}

# Max pressure trajectory: further extends downwind after NASHO
MaxPressure:
After: NASHO
Segments:
- {Identifier: DOWNWIND, Track: 167.9, DistanceNM: 6.0}
- {Identifier: BASE, Track: 065.0, DistanceNM: 6.5}
- {Identifier: FINAL, Track: 335.2, DistanceNM: 18.8}
Pressure and Maximum Pressure Properties​

Each segment in Segments, PressureSegments, and MaxPressureSegments has the following properties:

PropertyTypeRequiredDescription
AfterstringYesThe name of the segment in the normal trajectory where this trajectory extends from
SegmentsarrayYesOrdered segments from the branching point to runway threshold

Enroute Trajectories​

Enroute trajectories define how much delay can be absorbed in the enroute phase for flights arriving via each feeder fix. When a flight's route passes through a matching entry point, that trajectories values are used. Flights with no matching entry use DefaultMaxEnrouteLinearDelayMinutes.

EnrouteTrajectories:

# Example: Arrivals via VELGI can take a shortcut (i.e. cutting the corner) to gain 3 minutes
- EntryPoint: VELGI
FeederFix: RIVET
MaxEnrouteLinearDelayMinutes: 8
ShortcutTimeToGainMinutes: 3

# Example: Arrivals via NONUP spend less time in the enroute phase, and have a lower threshold before holding is required
- EntryPoint: NONUP
FeederFix: RIVET
MaxEnrouteLinearDelayMinutes: 6
PropertyTypeRequiredDescription
EntryPointstringYesWaypoint along the flight plan route where the enroute phase begins
FeederFixstringYesFeeder fix this entry applies to
MaxEnrouteLinearDelayMinutesintegerYesMaximum delay absorbable in the enroute phase via speed reduction or holding
ShortcutTimeToGainMinutesintegerNoTime that can be gained by flying a direct routing through the enroute area. Default: 0

Departure Airports​

DepartureAirports:
- {Identifier: YPMQ, Aircraft: [JET], Distance: 209, EstimatedFlightTimeMinutes: 44}
- {Identifier: YPMQ, Aircraft: [NONJET], Distance: 209, EstimatedFlightTimeMinutes: 41}
PropertyTypeDescription
IdentifierstringICAO code
AircraftarrayAircraft types/categories
DistancenumberDistance in nautical miles
EstimatedFlightTimeMinutesintegerFlight time to the managed airport

Views​

Define how the sequence is displayed.

Views:
- Identifier: GUN/BIK
LabelLayout: Enroute
TimeWindowMinutes: 30
Reference: FeederFixTime
Direction: Down
Ladders:
- FeederFixes: [RIVET]
Runways: []
- FeederFixes: [WELSH]

- Identifier: RWY
LabelLayout: TMA
TimeWindowMinutes: 45
Reference: LandingTime
Ladders:
- Runways: [34L, 16R, "07"]
- Runways: [34R, 16L, "25"]
PropertyTypeDefaultDescription
Identifierstring-View name
LabelLayoutstring-Label layout identifier
TimeWindowMinutesinteger-Time range to display
Referencestring-FeederFixTime or LandingTime
DirectionstringDownUp or Down
Laddersarray-Ladder configurations

Ladder Properties​

PropertyTypeDefaultDescription
FeederFixesarray[]Filter by feeder fixes
Runwaysarray[]Filter by runways

Coordination Messages​

GlobalCoordinationMessages:
- WX Dev have commenced.
- Standby for configuration change.
- Flow Planning in progress - do not use delay times until advised.

FlightCoordinationMessages:
- '{Callsign} MEDEVAC'
- '{Callsign} diverting'
- '{Callsign} request high speed descent'

Flight messages support {Callsign} placeholder.

Aircraft Performance Configuration​

vMaestro uses aircraft speed profiles to calculate the TTG for a particular trajectory. Each profile defines how fast an aircraft flies at various distances from the runway threshold, allowing TTG to account for the speed reductions as aircraft near the runway.

Profiles are matched to aircraft using descriptors. An exact type code match takes priority over a category match.

AircraftPerformance:
- AircraftTypes: [Jet, DH8D]
Speeds:
- {ThresholdNM: 45, SpeedKnots: 330}
- {ThresholdNM: 35, SpeedKnots: 310}
- {ThresholdNM: 25, SpeedKnots: 280}
- {ThresholdNM: 15, SpeedKnots: 250}
- {ThresholdNM: 0, SpeedKnots: 210}

- AircraftTypes: [Prop]
Speeds:
- {ThresholdNM: 45, SpeedKnots: 280}
- {ThresholdNM: 35, SpeedKnots: 260}
- {ThresholdNM: 25, SpeedKnots: 230}
- {ThresholdNM: 15, SpeedKnots: 200}
- {ThresholdNM: 0, SpeedKnots: 160}

Speed Profile Properties​

PropertyTypeRequiredDescription
AircraftTypesarrayYesDescriptors identifying which aircraft this profile applies to. Supports type codes (e.g. DH8D), category keywords (Jet, Prop), wake categories (Light, Medium, Heavy, Super), or All.
SpeedsarrayYesSpeed bands ordered descending by ThresholdNM.

Speed Band Properties​

PropertyTypeRequiredDescription
ThresholdNMnumberYesThis band's speed applies when distance-to-run is greater than this value (NM). Set to 0 to define the floor speed covering the final approach.
SpeedKnotsintegerYesTrue airspeed in knots for this distance band.

Validation​

vMaestro validates configuration on startup:

  • Required fields are present
  • Runway identifiers match airport runways
  • Feeder fixes match airport feeder fixes
  • Referenced label layouts exist
  • Aircraft descriptors are valid

Check log files for error details if configuration fails to load.

Example Configuration​

See Maestro.example.yaml for a complete annotated example.