Config File Reference
This page documents the public and advanced-user configuration surface for
alb-config.json.
A sample file is available here: alb-config.json
Overview
alb-config.json is the live operational ALB config.
Important packaging facts:
- EuroScope should load
ALB.dll ALB.dllloadsALBCore.dllalb-config.jsonis the live config and must not be silently overwritten by the loaderalb-config.default.jsonis the shipped template/default file
Place alb-config.json in the same plugin folder as ALB.dll and
ALBCore.dll.
After changing config, apply it with .alb reload or the [Reload config]
entry in the Timelines menu. A successful reload now preserves the active
runtime session more cleanly than older builds, including current policy
selections such as EAT, ETA, and HLW, while also trying to keep the
current timeline zoom. If a restored active timeline still depends on a
configured legacy default AR or scenario baseline, reload reapplies that
configured baseline instead of leaving the active AR state undefined. Reload
does not auto-open the ALB window again if it is currently closed.
Current config version support
The current ALB runtime supports:
configFormatVersion: 2configFormatVersion: 3
For new configs, use:
"configFormatVersion": 3
Encoding note
The plugin uses the EuroScope font, which is based on ANSI/Windows-1252.
If you use special symbols in static tag fields, save the JSON file using
ANSI encoding.
Scope of this page
This page documents the operational and advanced-user config surface.
A live config file may also contain additional developer-only keys used for internal validation workflows. Those are intentionally not described on the public documentation site.
Disabling blocks with -off / _off
When loading timelines and tagLayouts, any key ending with -off or _off
(case-insensitive) is skipped.
Examples:
"EKCH 04L/04R-SI_off""Expanded-off"
This disable pattern does not apply globally to all config keys. For many top-level settings, the runtime reads only the exact expected key name.
Top-Level Options
| Property | Type | Default | Description |
|---|---|---|---|
aircraftLastSeenSweepMinutes |
int | 2 |
How often ALB sweeps persisted aircraft state for expiry. Applied only if greater than 0. |
aircraftOfflineResetMinutes |
int | 5 |
Threshold after which unseen aircraft have persisted sequencing/state cleared. Applied only if greater than 0. |
airports |
object | optional | Airport-specific fallback circles, runway metadata, and advanced airport tuning. |
backendPeerHealth |
object | defaults below | Passive backend peer update-cycle health monitoring and warning thresholds. |
backendSeqSync |
object | defaults below | Backend sequence synchronization transport mode and TX-budget settings. |
configFormatVersion |
int | required in practice | Config schema version. Use 3 for new configs. |
defaultTimeline |
string | absent | Optional exact configured timeline identifier to select when no prior active timeline can be restored. |
eatModeOnStartup |
string | AR |
Startup EAT mode, applied only during the initial config load. Accepted values are AR, TF, and LT case-insensitively. |
etaModeOnStartup |
string | ES |
Startup ETA source, applied only during the initial config load. Accepted values are ES and ALB case-insensitively. |
glEatCombiDisplay |
object | defaults below | Optional display mapping for the combined glEatCombi field. |
holdEatLockWindowMinutes |
int | 5 |
Hold/EAT lock window in minutes. Applied only if greater than 0. |
holdEatRecentChangeMinutes |
int | 2 |
Recent-change window for hold/EAT logic in minutes. Applied only if greater than 0. |
holdEatWriteOnStartup |
bool | false |
Startup state for local HLW, applied only during the initial config load. |
housekeeping |
object | defaults below | Startup housekeeping settings for ALB logs and backend recording folders. |
layout |
object | defaults below | EAT display precision/suffix formatting settings. |
logging |
bool | false |
Enables ALB runtime text logging. |
openAutomatically |
bool | true |
Opens the ALB window on the initial config load. It does not re-open the window on later config reloads. |
scratchpadRunwayOverride |
bool | false |
Enables scratchpad runway override parsing for assignedRunwayOverride. |
soundMute |
object | all false |
Startup mute state for ALB sounds. |
startupShowStatistics |
bool | true |
Initial ALBCore startup presentation: show the statistics and arrival-planning block. |
startupShowTimeline |
bool | true |
Initial ALBCore startup presentation: show the timeline area. |
tagLayouts |
object | required | Tag layout definitions. |
timeSyncBeacons |
bool | false |
Enables time-sync beacon support. |
timelineSort |
string | targetFixEta |
Default timeline sort mode. Accepted values include target / tfe and landing / lde / lnd. |
timelines |
object | required | Timeline definitions. |
tmaAreas |
array | optional | TMA polygon definitions. |
Startup-only policy keys
eatModeOnStartup, etaModeOnStartup, and holdEatWriteOnStartup are read
only during the initial config load.
That means:
- they are useful for your preferred startup baseline
- they do not force the runtime back to those values on every
Reload config - missing or invalid values fall back independently to safe defaults
Current independent fallbacks are:
eatModeOnStartup->ARetaModeOnStartup->ESholdEatWriteOnStartup->false
Startup timeline and presentation
These top-level settings affect local startup selection and presentation. They do not change FMR authority, planning policy, or shared traffic state.
{
"defaultTimeline": "EKCH-SI",
"startupShowTimeline": true,
"startupShowStatistics": true
}
| Key | Type | Default | Meaning |
|---|---|---|---|
defaultTimeline |
string | absent | Exact configured timeline identifier to select only when ALB cannot restore a prior active timeline. It is not an ICAO, runway, or layout name. |
startupShowTimeline |
bool | true |
Shows the timeline on the first successful ALBCore startup config load. |
startupShowStatistics |
bool | true |
Shows the statistics block on the first successful ALBCore startup config load. |
startupShowTimeline and startupShowStatistics are consumed once at initial
startup. After that, the local TL and STAT buttons own the presentation for
the controller session, including after a window close/reopen or .alb reload.
Missing or invalid values safely behave as true.
defaultTimeline is considered only when no previous active timeline can be
restored. A valid existing selection, including a surviving partial
multi-timeline selection, takes precedence. Apply any config change with
.alb reload or restart ALB.
Housekeeping
housekeeping controls startup cleanup of ALB runtime files.
Example:
"housekeeping": {
"enabled": true,
"textLogRetentionDays": 16,
"textLogMaxFilesPerFamily": 20,
"backendRecordingRetentionDays": 16,
"backendRecordingMaxFolderMb": 500
}
| Property | Type | Default | Accepted range | Description |
|---|---|---|---|---|
backendRecordingMaxFolderMb |
int | 500 |
50-10000 |
Max size for backend recording folder before pruning. |
backendRecordingRetentionDays |
int | 14 |
1-365 |
Retention period for backend recording material. |
enabled |
bool | true |
n/a | Enables runtime housekeeping. |
textLogMaxFilesPerFamily |
int | 20 |
5-500 |
Max number of files kept per text-log family. |
textLogRetentionDays |
int | 14 |
1-365 |
Retention period for ALB text log families. |
If values are invalid, the runtime falls back to defaults and logs a warning. Out-of-range integers are clamped.
Sound Mute
soundMute sets the startup mute state for ALB audio categories.
Example:
"soundMute": {
"all": false,
"missed": false,
"ar": {
"all": false,
"unselected": false
}
}
| Property | Type | Default | Description |
|---|---|---|---|
all |
bool | false |
Mutes all ALB sounds. |
ar.all |
bool | false |
Mutes all arrival-rate related sounds. |
ar.unselected |
bool | false |
Mutes arrival-rate sounds for unselected/non-focused contexts. |
missed |
bool | false |
Mutes missed-approach/go-around related sounds. |
Layout
layout controls how EAT-style times are displayed in the timeline.
Example:
"layout": {
"EatDisplayPrecisionSec": 15,
"EatDisplayRecalcPeriodSec": 15,
"EatDisplayIntervalChars": ["", "a", "b", "c", "d"]
}
| Property | Type | Default | Accepted values | Description |
|---|---|---|---|---|
EatDisplayIntervalChars |
string[] | ["","a","b","c","d"] |
up to 5 one-character strings | Suffix characters used by HHMMx / HH:MMx formats. |
EatDisplayPrecisionSec |
int | 60 |
15 or 60 |
Display precision for EAT-style time presentation. |
EatDisplayRecalcPeriodSec |
int | 0 |
0-600 |
Display regeneration throttle. 0 means automatic. |
Precision and suffix behavior
If EatDisplayPrecisionSec is 60, ALB displays normal minute precision.
If EatDisplayPrecisionSec is 15, ALB uses five second-bucket suffix slots
across each minute. With the default suffix characters this behaves roughly as:
00:00to00:07.5-> no suffix00:07.5to00:22.5->a00:22.5to00:37.5->b00:37.5to00:52.5->c00:52.5to01:00->d
Recalc throttle
EatDisplayRecalcPeriodSec controls how often display strings are regenerated.
0= automatic- automatic means
15seconds when precision is15 - automatic means
1second when precision is60
Backend SeqSync
backendSeqSync controls backend sequence synchronization load-management.
This block affects how ALB sends canonical backend sequence state to peers. It
does not change FMR ownership, EAT:AR versus EAT:LT, scratchpad fallback,
or the local sequencing algorithms themselves.
Example:
"backendSeqSync": {
"mode": "normal",
"txMaxSet2PerSecond": 10,
"txMaxSet2PerPoll": 10,
"txQueueMaxAgeSec": 30,
"authorityLeadMinutes": 10
}
Accepted mode values:
normalthrottledhorizonsuspend
Fallback behavior:
- missing
modefalls back tonormal - malformed or unknown
modefalls back tonormal
| Property | Type | Default | Accepted range or values | Description |
|---|---|---|---|---|
authorityLeadMinutes |
int | 10 |
1-60 |
Horizon relevance window in minutes. Used by horizon to distinguish near-horizon traffic from far-floating traffic. |
mode |
string | normal |
normal, throttled, horizon, suspend |
Backend seqsync transport mode. In normal, operational transitions stay immediate while estimate-only canonical refreshes may be shaped automatically. |
txMaxSet2PerPoll |
int | 10 |
1-200 |
Per-poll budget for queued canonical SET2 transmission. Used by the same queued or recovery paths as above. |
txMaxSet2PerSecond |
int | 10 |
1-200 |
Per-second budget for queued canonical SET2 transmission. Used by throttled, horizon, suspend recovery, and temporary normal recovery drain. |
txQueueMaxAgeSec |
int | 30 |
1-600 |
Queue age budget for backend seqsync queue handling. |
Operational notes:
normalkeeps operational transitions immediate, but estimate-only canonical refreshes may be shaped automaticallythrottled,horizon,suspend, and temporary recovery drain use the TX queue budgetshorizonmay suppress far-floating canonical candidates while keeping operationally relevant or uncertain aircraft canonicalsuspendsuppresses normal canonicalSET2TX, but operationalDELremains allowed and bounded- returning from
throttledorhorizontonormaluses temporary bounded recovery drain until inherited queue backlog is empty - there is no separate config key or runtime command just for the normal-mode estimate shaping; it is part of current
normal - edit this block in
alb-config.jsonwhen you want different startup or default transport behavior, then apply it with.alb reloador by restarting ALB - use
.alb seqsync normal,.alb seqsync throttled,.alb seqsync horizon, or.alb seqsync suspendwhen you want to change the live runtime mode immediately without editing config - use
.alb seqsync statusto inspect the current live mode and queue picture
Backend Peer Health
backendPeerHealth controls passive backend peer update-cycle health
monitoring.
This is an advanced diagnostic block. It does not change FMR ownership or canonical seqsync rules. It helps the FMR detect when a peer appears slow to apply shared backend updates and surfaces backend-only warn or recover events.
Example:
"backendPeerHealth": {
"enabled": true,
"warnAverageMs": 333,
"recoverAverageMs": 200,
"windowSec": 30,
"consecutiveWarnWindows": 3,
"consecutiveRecoverWindows": 2,
"repeatWarnCooldownSec": 60
}
| Property | Type | Default | Accepted range | Description |
|---|---|---|---|---|
consecutiveRecoverWindows |
int | 2 |
1-10 |
Number of good windows required before recovery. |
consecutiveWarnWindows |
int | 3 |
1-10 |
Number of bad windows required before warning. |
enabled |
bool | true |
n/a | Enables passive backend peer health monitoring. |
recoverAverageMs |
int | 200 |
50-warnAverageMs |
Average cycle threshold below which ALB may treat the peer as recovered. |
repeatWarnCooldownSec |
int | 60 |
30-600 |
Cooldown before repeat warnings may be sent again. |
warnAverageMs |
int | 333 |
100-5000 |
Average cycle threshold above which ALB starts treating a peer cycle window as slow. |
windowSec |
int | 30 |
10-300 |
Measurement window length in seconds. |
Operational notes:
- these warnings are passive monitoring, not transport control
- warnings are backend-only and intended to help the FMR notice slow peer update cycles
.alb seqsync statuscan show peer-health summary fields when this monitoring is enabled
glEatCombiDisplay
This block controls what the glEatCombi field shows depending on arrival
state, hold state, and recent passage timing.
Example:
"glEatCombiDisplay": {
"unknownState": "SwitchGainLooseEat",
"unsequencedState": "SwitchGainLooseEat",
"sequenced1State": "GainLoose",
"sequenced2State": "Eat",
"frozen1State": "Countdown",
"frozen2State": "Countdown",
"switchPeriodSec": 2,
"gainLooseEmptyText": "",
"holdXSec": 120,
"holdGtXState": "Eat",
"holdLeXState": "Countdown",
"afterPassYMinutes": 2,
"afterPassFirstYState": "DeltaAtPassage",
"afterPassAfterYState": "Blank"
}
Accepted state values are case-insensitive and normalized. Common values:
GainLooseorGLEatCountdownorCDDeltaAtPassageorDeltaSwitchGainLooseEatBlank
| Property | Type | Description |
|---|---|---|
afterPassAfterYState |
string | Display after the first Y minutes after passage. |
afterPassFirstYState |
string | Display in the first Y minutes after passage. |
afterPassYMinutes |
int | After-passage window length in minutes. Values below 0 are clamped to 0. |
frozen1State |
string | Display for frozen state 1. |
frozen2State |
string | Display for frozen state 2. |
gainLooseEmptyText |
string | Optional trimmed placeholder used only when GainLoose is the selected display state but the actual Gain/Lose value is empty. |
holdGtXState |
string | Display while in hold and remaining time is greater than X. |
holdLeXState |
string | Display while in hold and remaining time is less than or equal to X. |
holdXSec |
int | Hold threshold in seconds. Values below 0 are clamped to 0. |
sequenced1State |
string | Display for sequenced state 1. |
sequenced2State |
string | Display for sequenced state 2. |
switchPeriodSec |
int | Cycling period for SwitchGainLooseEat. Values below 1 are clamped to 1. |
unknownState |
string | Display when arrival state is unknown. |
unsequencedState |
string | Display when aircraft is unsequenced. |
Operational notes:
gainLooseEmptyTextis optional and is only used whenglEatCombiis in a Gain/Lose-based state and the real Gain/Lose text is empty- if
gainLooseEmptyTextis blank or omitted, ALB keeps the older behavior and simply shows nothing in that case - this placeholder does not replace normal EAT, PLT, countdown, or post-passage behavior
holdXSecandholdGtXStateseed the local runtime hold-display control on startup and on a successful config reload- the top-row hold-display button then lets each client adjust that threshold and pre-threshold hold display locally at runtime
- the normal hold-display button cycle is
Eat->GainLoose->SwitchGainLooseEat->Blank-> back toEat holdLeXStateis the inside-threshold display and is normally kept asCountdown- unsupported
holdGtXStatevalues are normalized toBlank
The hold-display button uses compact labels such as:
2 EAT2 GL2 SW2 ---
The number is the minutes before EAT where ALB switches to countdown. The
suffix shows what glEatCombi displays while the aircraft is still farther out
than that threshold.
Timelines
timelines maps a timeline id to a timeline definition.
| Property | Type | Default | Description |
|---|---|---|---|
ArrivalScenarios |
object | {} |
Optional legacy scenario-name to integer-array mapping. Retained for compatibility/history; not recommended as the normal operating method. Arrays must match the number of non-placeholder via-fixes. |
defaultTimeSpan |
uint | 30 |
Initial visible timeline span in minutes. |
destinationAirports |
string[] | [] |
Optional destination ICAO filter. If non-empty, only matching destinations are included. Active-timeline destination coverage also controls whether glEatCombi can appear for that traffic. |
forceSingleTimeline |
bool | false |
Forces a single timeline even when two target fixes are configured. |
runways |
string[] | [] |
Optional runways relevant for this timeline. |
tagLayout |
string | none | Tag layout id to use. Must exist in tagLayouts. |
targetFixes |
string[] | required | Aircraft expected to pass one of these fixes are shown in the timeline. Exactly two fixes create a dual timeline unless forceSingleTimeline is true. |
viaFixColors |
string[] | palette | Optional custom RGB colors for real via-fix lanes. |
viaFixes |
string[] | [] |
Optional via-fix lanes. The placeholder "-----" can be used as a visual separator. |
Notes on ArrivalScenarios
- Operational note:
ArrivalScenariosis retained for compatibility and history. Scenarios are no longer part of the recommended normal ALB workflow. Current operation should normally useEAT:LTlanding-timeline monitoring and correction instead of scenario switching. - On successful config reload, if a restored active timeline still depends on a configured legacy default scenario, ALB reapplies that configured baseline so the retained AR picture does not come back undefined.
- The loader reads the key exactly named
ArrivalScenarios - alternate scenario blocks under other names are ignored
- placeholder via-fixes such as
"-----"do not consume scenario values - JSON order is preserved for scenario display menus
Tag Layouts
tagLayouts maps a layout id to a layout definition.
Two formats are supported:
- legacy array format
- object format with metadata plus
items
Recommended format:
"Maestro-Feeder": {
"hideDeselectedViaFixes": true,
"timelineLayout": "Feeder",
"timelineSort": "targetFixEta",
"items": [
{ "source": "callsign", "width": 8 }
]
}
Layout properties
| Property | Type | Default | Description |
|---|---|---|---|
hideDeselectedViaFixes |
bool | false |
If true, aircraft in deselected via-fix lanes are hidden from the timeline. |
items |
array | required | Ordered list of tag items. |
timelineLayout |
string | runtime default | Layout hint. Accepted values include runway and feeder. |
timelineSort |
string | runtime default | Optional per-layout sort mode. |
Tag Item Properties
| Property | Type | Default | Description |
|---|---|---|---|
defaultValue |
string | "" |
Fallback/default value, especially for static. |
format |
string | "" |
Optional time formatting override for time-backed sources. |
isViaFixIndicator |
bool | false |
Colors the field using the via-fix lane color. |
rightAligned |
bool | false |
Right-aligns the rendered value. |
source |
string | "" |
Source field to render. |
width |
uint | 1 |
Reserved character width. |
format strings for time values
Supported format values are:
| Format | Width | Meaning |
|---|---|---|
HHMM |
4 | UTC time as 2359 |
HH:MM |
5 | UTC time as 23:59 |
HHMMSS |
6 | UTC time as 235959 |
HH:MM:SS |
8 | UTC time as 23:59:59 |
HHMMx |
5 | HHMM plus optional EAT precision suffix |
HH:MMx |
6 | HH:MM plus optional EAT precision suffix |
If a recognized format is present, ALB infers the effective field width from
the format, so the explicit width value is no longer the controlling width.
Common time-capable sources for format
These sources can use a format string:
estimatedLandingTimeestimatedLandingTimeAlbestimatedLandingTimeEsestimatedLandingTimeSsoplannedLandingTimeplannedLandingTimeAlbplannedLandingTimeEsplannedLandingTimeSsotimelineAnchortimelineAnchorHmsunderlyingEATunderlyingEATAlbunderlyingEATEsunderlyingEAThmsviaFixETOviaFixETOhms
Tag Item Sources
Below are the common operational and advanced layout sources used by the current runtime.
| Source | Meaning |
|---|---|
acno |
Internal aircraft ordinal number. |
aircraftType |
ICAO aircraft type. |
aircraftWtc |
Wake turbulence category. |
altitude |
Altitude/flight level display. |
arrivalSeqDisp |
Display sequence number. |
arrivalSeqFrontier |
Sequencing frontier marker. |
arrivalSeqMax |
Maximum assigned arrival sequence number. |
arrivalSeqMin |
Minimum airborne arrival sequence number. |
arrivalSeqNo |
Raw arrival sequence number. |
ArrivalState |
Determined arrival state. |
assignedRunway |
Assigned landing runway. |
assignedRunwayOverride |
Scratchpad-based runway override. |
assignedStar |
Assigned STAR. |
ATCLong |
Tracking controller long id. |
ATCShort |
Tracking controller short id. |
bookingStatus |
Backend booking/event-slot status text. |
cadAssignedHeading |
Controller-assigned heading. |
cadAssignedRate |
Controller-assigned rate. |
cadAssignedSpeedMach |
Controller-assigned speed (K...) or Mach (M...). |
cadClearanceFlag |
Clearance flag (CLR). |
cadFinalAlt |
Controller-assigned final altitude. |
cadGroundState |
Controller-assigned ground state. |
cadScratchpad |
CAD scratchpad mirror. |
cadTempAlt |
Controller-assigned temporary altitude. Special values 1 and 2 display as cINS and cVIS. |
callsign |
Aircraft callsign. |
directRouting |
Direct-to or next-route-fix display. Explicit Direct-To takes precedence; otherwise the fallback shows the aircraft's current semantic next route fix. |
distanceGapNmToPrevious |
NM spacing/gap to the previous aircraft. |
estimatedLandingTime |
Active estimated landing time. |
estimatedLandingTimeAlb / estimatedLandingTimeSso |
SSO/ALB landing ETA branch. |
estimatedLandingTimeEs |
ES landing ETA branch. |
etaSource |
Current ETA branch/source identifier. |
FlightPhase |
Determined flight phase. |
glEatCombi |
Combined gain/lose and EAT field. For radar-tag/Combi use, ALB now leaves it blank unless the aircraft destination belongs to a currently active timeline. |
groundSpeed |
Ground speed. |
groundSpeed10 |
Ground speed in tens. |
holdPhase |
Holding phase indicator. |
holdingEAT |
Hold-related EAT text. |
holdingEATm |
Manual-hold-EAT marker. |
holdingFix |
Holding fix if available. |
inboundGrouping |
Current inbound grouping bucket. |
isPastViaFix |
Y/N flag for via-fix passage. |
landingLooseGain |
Landing/threshold-based gain/lose display. |
landingSeqIndexCurrent |
Current landing sequence index. |
landingSeqIndexFixed |
Fixed landing sequence index. |
minutesBehindPreceedingRounded |
Spacing behind the preceding aircraft in rounded minutes. |
obsNote3 |
3-character observation/note abbreviation. |
plannedLandingTime |
Active planned landing time. |
plannedLandingTimeAlb / plannedLandingTimeSso |
SSO/ALB planned landing time. |
plannedLandingTimeEs |
ES planned landing time. |
remainingDistance |
Remaining distance to target fix in NM. |
remainingDistance1d |
Remaining distance with one decimal place. |
scratchPad |
Scratchpad text. |
static |
Static text from defaultValue. |
targetFix |
Active target fix for the aircraft. |
targetFixATCTime |
Estimated time over target fix including delay logic. |
targetFixEta |
Estimated time over target fix. |
timeBehindPreceeding |
Spacing behind the preceding aircraft in mm:ss. |
timelineAnchor / timelineAnchorHms |
Active timeline anchor time used for ordering/display. |
timelineAnchorSource |
Source of the timeline anchor. |
transitionAltitude |
Transition altitude. |
underlyingEAT |
Active underlying EAT display value. |
underlyingEATAlb / underlyingEATSso |
SSO/ALB-side underlying EAT branch. |
underlyingEATEs |
ES-side underlying EAT branch. |
underlyingEAThms |
Underlying EAT with seconds. |
viaACToViaFixSec |
Seconds from aircraft to via-fix. |
viaFix |
Via-fix lane. |
viaFixDistNmToGo |
Remaining NM to the via-fix. |
viaFixETE |
Estimated time enroute to via-fix. |
viaFixETO |
Estimated time over via-fix. |
viaFixETOhms |
Estimated time over via-fix with seconds. |
viaFixLooseGain |
Via-fix gain/lose display. |
viaFixSeqIndexCurrent |
Current per-via-fix sequence index. |
viaFixSeqIndexFixed |
Fixed per-via-fix sequence index. |
viaFixToLandingSec |
Planned seconds from via-fix to landing. |
viaFixToLandingSecEs |
ES-based via-fix-to-landing seconds. |
viaFixToLandingSecSso |
SSO/ALB-based via-fix-to-landing seconds. |
If a source string is unknown to the runtime, it typically renders blank.
TMA Areas
tmaAreas is an array of polygon definitions used for TMA matching.
| Property | Type | Description |
|---|---|---|
airport |
string | v3 single-airport form. |
airports |
string[] | Alternate multi-airport form. |
center |
object | Legacy fallback circle form. |
id |
string | Optional human-readable identifier. |
poly |
{lat,lon}[] |
Required polygon points. |
runways |
string[] | Runways this polygon applies to. |
Matching summary:
- the timeline airport comes from
destinationAirports[0] - the first matching area with airport and runway overlap is used
- if no polygon matches, v3 config can fall back to
airports.<ICAO>.tmaFallback
Airports
airports maps airport ICAO to airport-specific metadata.
Common airport properties
| Property | Type | Description |
|---|---|---|
runways |
object | Runway metadata keyed by runway id, e.g. "04L": {"elevFt": 17}. |
tmaFallback |
object | Optional fallback circle using center plus radiusNm. |
tmaFallback
Example:
"tmaFallback": {
"center": { "lat": 55.64336491, "lon": 12.24763954 },
"radiusNm": 29
}
runways
Example:
"runways": {
"04L": { "elevFt": 17 },
"04R": { "elevFt": 17 }
}
Advanced airport options
These are used by the current runtime and are valid advanced config.
eat_lt_spacing
Airport-specific WTC-aware landing-spacing and Expected LR settings for
EAT:LT.
This block is optional. If it is missing, ALB uses complete built-in defaults. Existing configs therefore remain valid, and no config-format version increase was required for this feature.
Example:
"eat_lt_spacing": {
"unknownCategory": "M",
"expectedRateWindowMinutes": 30,
"behindSec": {
"L": { "L": 30, "M": 30, "H": 30, "J": 30 },
"M": { "L": 60, "M": 60, "H": 60, "J": 60 },
"H": { "L": 120, "M": 120, "H": 120, "J": 120 },
"J": { "L": 180, "M": 180, "H": 180, "J": 180 }
},
"inFrontSec": {
"L": { "L": 120, "M": 120, "H": 120, "J": 120 },
"M": { "L": 60, "M": 60, "H": 60, "J": 60 },
"H": { "L": 60, "M": 60, "H": 60, "J": 60 },
"J": { "L": 60, "M": 60, "H": 60, "J": 60 }
}
}
| Property | Type | Default | Accepted values or range | Description |
|---|---|---|---|---|
behindSec |
object | built-in matrix | complete L/M/H/J matrix of integer seconds |
Minimum spacing behind the leader. |
expectedRateWindowMinutes |
int | 30 |
5-120 |
Future canonical-PLT window used for the Expected LR forecast. |
inFrontSec |
object | built-in matrix | complete L/M/H/J matrix of integer seconds |
Minimum space required in front of the follower. |
unknownCategory |
string | M |
L, M, H, J |
Fallback WTC category used when an aircraft WTC is missing, blank, or unrecognized. |
All matrix values are seconds.
Valid WTC categories are:
LMHJ
Matrix orientation matters:
behindSec[row leader][column follower]inFrontSec[row follower][column leader]
Built-in default matrices:
Default behindSec
| Leader \ follower | L | M | H | J |
|---|---|---|---|---|
| L | 30 | 30 | 30 | 30 |
| M | 60 | 60 | 60 | 60 |
| H | 120 | 120 | 120 | 120 |
| J | 180 | 180 | 180 | 180 |
Default inFrontSec
| Follower \ leader | L | M | H | J |
|---|---|---|---|---|
| L | 120 | 120 | 120 | 120 |
| M | 60 | 60 | 60 | 60 |
| H | 60 | 60 | 60 | 60 |
| J | 60 | 60 | 60 | 60 |
Validation behavior:
unknownCategorymust be a valid WTC category or the airport keeps the built-in default fallback ofMexpectedRateWindowMinutesmust be an integer from5through120- each matrix must be a complete
L/M/H/Jobject-of-objects - each matrix value must be a finite non-negative integer number of seconds
- malformed or incomplete matrix definitions are rejected as a whole rather than partly applied
Operational notes:
- config overrides are optional
- a complete valid airport matrix can override the built-in defaults
- unknown WTC uses the configured airport fallback category
- Expected LR remains a local read-only forecast based on canonical future PLTs
viafix_track_nm_orange
Maps STAR name to configured track miles for ALB's orange timing model.
Orange timing is ALB's route or STAR-based timing estimate from the via-fix or holding-fix area toward touchdown. The value gives ALB a configured distance basis when it builds the corrected ALB estimate branch (ELT-ALB or ETA:ALB) before terminal or post-via live estimates become the better source.
This is advanced airport tuning. Wrong values can make ELT-ALB, EAT planning, and landing-timeline scheduling too early or too late.
Example:
"viafix_track_nm_orange": {
"TESPI4C": 84.8,
"TUDLO4C": 93.0
}
Rules:
- values must be numeric
- values must be greater than
0 - values must be less than
500
How ALB uses these values:
- ALB first tries an exact STAR-name match for the aircraft's assigned or persisted STAR
- if there is no exact STAR match, ALB may fall back by via-fix and use the largest configured orange distance among STARs that map to that same via-fix
- the configured value represents track miles from the via-fix or holding-area side of the arrival toward touchdown
Orange timing model behind ELT-ALB
Before the aircraft is deep into terminal or post-via handling, ALB can build its own landing estimate branch from:
- the current via-fix timing anchor or EVTO
- the configured orange distance
- a descent-speed model that converts track miles into seconds
The generic baseline model splits the orange distance into three buckets:
- final
10 NM - the preceding
20 NMTMA segment - any remaining higher-distance segment before that
The baseline bucket assumptions are roughly:
- higher segment: about
250 KIASnearFL100 - TMA segment: about
180 KIAS - final
10 NM: about145 KIAS
ALB then converts those IAS assumptions into approximate TAS and time. In the generic fallback model that is roughly:
250 KIAS-> about290 KTAS180 KIAS-> about185 KTAS145 KIAS-> about149 KTAS
Aircraft-aware refinement, wind, and clamping
When aircraft performance data is available, ALB can refine the orange timing using the flight plan's descent-speed information instead of only the generic jet baseline.
The current aircraft-aware model generally uses:
- a higher descent speed around the aircraft's filed level
- a lower descent speed around
6000 ft - a final descent speed around
3000 ft - wake-category-aware bounds so the final segment does not become unrealistic
When upper-wind data is available, ALB also lets that wind influence the orange timing by adjusting the approximate ground speed along the route.
To avoid an unrealistically optimistic ALB branch, the orange result is also
bounded against the live ES branch. In practice that means ELT-ALB is not
allowed to run too far ahead of the live EuroScope-based landing estimate.
Current timing guards also reject a grossly implausible near-via route ETO before it is allowed to cascade into the ALB branch. In that situation ALB can fall back to the live ES branch or retain a still-trusted prior ALB branch until the timing evidence becomes credible again.
Practical tuning guidance
- treat
viafix_track_nm_orangeas airport-specific planning calibration, not as a cosmetic display tweak - if the value is too short,
ELT-ALBand ALB-based landing planning become too early - if the value is too long,
ELT-ALBand ALB-based landing planning become too late - once the aircraft is terminal or post-via, ALB should stop relying on orange distance timing and follow the live ES branch where appropriate
- close to the via-fix, a route timing jump that is physically implausible may now be rejected instead of being propagated into the ALB branch
For a more operational explanation, see
ICAO / Airport Setups. For the behavior boundary between
ELT-ES and ELT-ALB, see
Sequencing Model.
eat_lt_sequence_lock
Airport-specific lock threshold tuning for EAT/LT sequence behavior.
Example:
"eat_lt_sequence_lock": {
"enabled": true,
"baseDistanceNm": 115.0,
"extraDistanceNm": 10.0,
"extraBufferIasKt": 280.0,
"extraBufferAltFt": 15000.0
}
| Property | Type | Description |
|---|---|---|
baseDistanceNm |
number | Base distance used in threshold derivation. |
enabled |
bool | Enables this advanced airport-specific threshold. |
extraBufferAltFt |
number | Altitude used with IAS for buffer time estimation. |
extraBufferIasKt |
number | IAS used to estimate the extra buffer conversion to time. |
extraDistanceNm |
number | Additional buffer distance. |
Common Ignored or Legacy Keys
Unknown keys are ignored by the current loader.
In real configs you may commonly see keys like these:
timelineSort-offglEatCombiDisplay-offviaFixColors-safeaimingPointFtArrivalScenarios-ssoBackupArrivalScenarios-ssoBackup2
Important:
- only the exact key
glEatCombiDisplayis read - only the exact key
timelineSortis read - only the exact key
ArrivalScenariosis read viaFixColors-safeandaimingPointFtare not read by the current loader