Get notified by a loud, looping alarm when key events happen during long flights while you’re away from the keyboard. Click
🔔 Alerts in the map header to open the configuration modal. The left column lists five independent alarm types you can mix and match for a single flight; each one you add shows up as a card on the right with its own enable toggle, sound selection, and per-type settings.
Hover any alarm icon or title in a card for a plain-English description of what it does and when it fires.
The six alarm types:
- ⏰ Timer — a simple clock / countdown timer, independent of aircraft position. Two modes: Countdown (set hours / minutes / seconds; alarm fires after that delay) or At specific time (native time picker for the local clock; if past today, fires tomorrow). Useful for "wake me in 30 minutes" or "alarm me at 14:30". The card readout shows the absolute target time AND the live remaining countdown. Survives a page reload — if you set a Timer for 14:30 and refresh the page at 14:25, it still fires at 14:30. Repeat (v3.18.0, Countdown mode only) — when the Repeat toggle is on, the alarm auto-dismisses and reschedules after each firing so it repeats at the same interval indefinitely — no manual reset needed. Each cycle plays the full audio/visual alert before auto-dismissing after ~5 seconds. Turn off Repeat (or disable the alarm) to stop the cycle.
- ⊙ Geofence — clicking this closes the modal, hands you a crosshair cursor, and shows a banner across the top of the map. Click and drag on the map to draw a circle (radius shown live in nautical miles), release to confirm, then pick a label, trigger (ENTER, EXIT, or both), and sound in the sub-modal that appears. The orange circle stays visible on the map and re-renders across sessions.
- 📍 Waypoint — trips at the moment your aircraft passes a chosen waypoint in the loaded SimBrief flight plan. Uses closest-point-of-approach (CPA) detection, so it fires even when your track is a few nm off the planned line. Specifically: it watches the distance to the next un-tripped waypoint each tick, and fires when that distance starts increasing again (the CPA moment) — provided the closest approach was within 5 nm. Skipped while on the ground (so taxi doesn't trip it), resets on sim restart / new flight load, and cascades tight clusters (two waypoints sitting within 5 nm of each other fire on the same pass). Scope picker: Every waypoint, TOC (top of climb — first cruise-stage fix), TOD (top of descent — first descent-stage fix after cruise), or Specific waypoints (multi-select checkbox list). Selected waypoints get a cyan ring overlay on the route plot so you can see where they are.
Shortcut: right-click any waypoint dot on the plotted route to add a one-off alarm for just that fix — a small modal opens with the ident, position, and a sound picker.
- ─ Cruise Reached — one-shot alarm that fires when the aircraft reaches cruise. Two explicit modes (Mode dropdown on the card, v2.90.5+): Adaptive — the default; uses the phase detector (v3.16.0+: fires when the 5-second windowed VS settles within
|VS| ≤ 200 fpm from a prior CLIMB phase; previously a variable deadband sustained for 35 s). At specific altitude — switches the trigger to a climbing-through-altitude crossing (accepts 35000, 35,000, or FL350); the NEXT ALERT countdown also shows live time-to-cruise computed from current altitude and vertical speed. v2.87.0: gated on confirmed wheels-up (sustained GS > 40 kt for 10 s) so it cannot fire while still on the ground at high-elevation airports. v2.87.1: a second structural gate requires peakClimbVS > +200 fpm observed in this session before the climb → cruise transition can happen — so sustained-level ground operations can’t false-trigger cruise. v3.16.0: if you re-enable or add a new Cruise Reached alarm while the aircraft is already in cruise phase, it waits silently for the aircraft to leave cruise and re-enter before firing — guaranteeing it always fires on a genuine new cruise entry rather than the current one.
Only above (v3.16.0+) — an optional “Only above” altitude field appears on every Cruise Reached card. When set, the alarm skips cruise transitions detected at or below that altitude. This lets you filter out ATC-assigned climb-and-maintain altitudes (e.g. “climb and maintain FL240”) so the alarm only fires when the aircraft actually settles at your true cruise altitude. Accepts feet or FL form; leave blank to fire at any altitude.
Step climbs (v2.90.5+) — the Cruise Reached alarm is one-shot per flight, so a single alarm cannot re-fire when you level off after a step climb. To handle step climbs, add one Cruise Reached alarm per level-off altitude in At specific altitude mode — e.g. set three alarms at FL210, FL280, and FL380 for a stepped trans-oceanic profile. Each carries its own crossing-detection state, so each fires independently as the aircraft climbs through its threshold. Dismissing one auto-disables only that one; the others stay armed for the next step. Combine with per-alert names (v2.89.0+) like “Initial cruise — FL210” / “Step climb 1 — FL280” / “Step climb 2 — FL380” to keep them straight in the trip overlay, the Alert History log, and on map pins. Leave them ungrouped — group cascade would defeat the per-step alerting.
- ↘ Descent Started — one-shot alarm that fires when sustained descent begins from cruise. v3.18.2+: phase detector promotes to descent when the 30-second trend VS reads
< -400 fpm (a wider trend window and a higher threshold than the cruise-entry path uses — extended turbulence with the autopilot engaged cannot fake a sustained 30 s, 200 ft net altitude loss; v3.16.0 introduced the asymmetric two-window model at 15 s / ±200 fpm and v3.18.2 widened both to suppress false TOD calls). Same wheels-up gate as Cruise (v2.87.0+). v3.16.0: if you re-enable or add a new Descent Started alarm while the aircraft is already in descent phase, it waits silently for the aircraft to leave descent and re-enter before firing — mirroring the Cruise Reached re-arm guard.
- ↕ Altitude — trips when your aircraft crosses through an altitude you set. Pick Descending through or Climbing through; the alarm only fires when you actually cross the threshold in the chosen direction. It will NOT fire if you arm the alarm already on the “wrong” side — e.g. if you arm a Descending through FL100 alarm while you're at FL080, it waits for you to climb above FL100 and then descend back through. The input box accepts both plain feet (e.g.
10000 or 10,000) and flight levels (e.g. FL350, FL 200). The hint next to the input echoes the parsed value as you type so you can see how it was interpreted. v2.87.0: Altitude alarms now auto-rearm when the aircraft returns to the ground (same behaviour as Cruise / Descent), so a single armed alarm can fire across multiple consecutive flights without manually toggling it off and on between segments.
- 📡 Loss of Telemetry (CTD) (v2.90.0+, seconds unit added v2.91.0) — your “did MSFS just crash?” canary. Fires when all three conditions hold simultaneously: FSUIPC Live tracking is ON (with no live source the alarm sits quiet); the aircraft is airborne (any phase except
ground); AND no fresh telemetry update has arrived for the configured timeout (default 5 minutes, range 10 s – 60 min via the minutes / seconds unit picker). The 5-minute default is sized generously to tolerate normal MSFS pause-menu trips — opening Map / ATC / Settings (which pauses the sim and freezes FSUIPC pushes) will not false-alarm. Catches the situations where the green aircraft icon would otherwise just go stale silently with no audio cue: MSFS crash-to-desktop, MSFS freeze / hang, FSUIPC server crash, the user accidentally closing FSUIPC mid-flight. Why a special watchdog? The regular alarm tick runs inside the live-aircraft fix-arrival path — a real CTD freezes those fixes, which would freeze the very loop that could detect the freeze. This alarm has a separate 15-second watchdog interval that keeps running independent of fix arrivals, so it can still fire when the telemetry stream is the thing that went silent. Note: the 15 s watchdog interval also sets a floor on detection latency — a 15 s threshold actually trips somewhere between 15 s and 30 s after onset. Re-arms automatically on the next ground transition.
- 🧩 Conditional (v2.91.0+) — fire when a custom combination of live telemetry parameters is met. Each alarm carries one or more condition rows; each row picks a parameter, a comparator (
> or <), and a threshold. The combinator (top of the editor) chooses AND (every enabled row must currently be met) or OR (any one enabled row met fires). Available parameters: Altitude (MSL), IAS, GS, VS (signed fpm), Distance to destination, Distance to waypoint (with a waypoint picker, requires a SimBrief plan), Track miles remaining, Track deviation (v3.6.2 — nm abeam the SimBrief route, default 10 nm), Remaining time, Elapsed time, Alert ETA, Alert distance (v3.76.0 — nautical miles to the closest armed geofence or waypoint alert's trigger point; only meaningful for those two alert types, so it reads “awaiting data” whenever none is armed even if another alert type is next overall). Time-based fields accept seconds (3600), H:MM:SS / M:SS, or H/M/S token form (1h 30m 22s); altitude accepts feet or FL. Per-row checkbox lets you disable conditions without removing them so you can iterate without losing your setup. New rows are added in the disabled state (v2.92.3+) — configure the parameter, comparator and threshold first, then toggle the row on. This makes it safe to build a conditional alarm mid-flight without it firing the instant you add a row whose default threshold happens to be satisfied by current telemetry. One-shot per flight — fires once, auto-disables on dismiss, auto-rearms on next ground transition. Example: "alert me when GS > 400 kt AND altitude > FL350 AND elapsed > 1h 15m".
Sounds — five synthesized tones (Digital Clock, Klaxon, Soft Chime, Urgent Beeper, Gentle Bell) picked per alarm. Click the ▶ button in any card or the geofence sub-modal to preview without arming.
Sound duration — each alarm has a
Sound for picker:
Auto-dismiss after… a seconds value (the sound auto-stops after the chosen interval and the alarm is dismissed automatically) OR
Indefinite (until dismissed) (the sound loops until you click DISMISS ALL or the ✕ on the trip overlay row).
v3.3.0: new alarms now default to
Auto-dismiss after 10 seconds (or your saved preference) instead of indefinite, so an alarm you miss stops on its own; switch any card to
Indefinite if you want it to keep sounding. If you change the seconds value, it’s saved as your default for future new alarms. The
Sound for picker also appears on the Geofence and Waypoint quick-add modals so you can set the duration up-front without revisiting the main Alerts modal afterwards.
Send to phone from the quick-add modals (v3.3.0) — the Geofence and Add Waypoint Alarm pop-ups now carry a
Send to phone checkbox, so you can forward those alarms to your phone at creation time instead of opening the alarm card afterward. The checkbox only appears once a Mobile Alerts provider is configured (Live → Mobile Alerts).
Drag any number to scrub it (v3.3.0) — every numeric field in the Alerts panel and the Geofence / Waypoint pop-ups (timer h/m/s, geofence radius, auto-dismiss seconds, telemetry-loss threshold, altitudes) now supports the same click-and-drag gesture: press on the field and drag up to increase or down to decrease (drag farther to move faster). A plain click still focuses the field for keyboard entry.
Keyboard shortcut — on the per-geofence sub-modal and per-waypoint quick-add modal, press
Enter to commit the alarm without reaching for the Add Alarm button.
Reorder & prioritize — grab the
⋮⋮ handle on the far left of any alarm card and drag it up or down to re-rank. The
expand/collapse chevron sits immediately after the drag handle (▶ collapsed, ▼ expanded); the enable toggle and ✕ delete button stay on the right.
List order IS sound priority. There is no separate priority number — the alarm closest to the TOP of the list wins the audio channel when several alarms are tripped at once. Implications:
- If you care more about hearing certain alarms than others (e.g. 📡 Loss of Telemetry should always override a quiet timer), drag those alarms to the top of the list.
- Sounds never overlap — only one plays at a time. Additional alarms that pile on are still added to the trip overlay list visually; their sound simply waits in queue.
- Dismissing the leading alarm via the ✕ on its row in the trip overlay seamlessly swaps audio to the next-highest still-tripped alarm.
- List order also drives Save / Load file ordering and the on-card per-alarm sequence in the trip overlay, so reordering helps with visual scanning too.
Auto-disable on dismiss (v2.76.0+) — whenever an alarm fires and you dismiss it (manually via DISMISS ALL / ✕, or via the seconds-mode auto-dismiss), its enable toggle flips off automatically. Re-arming for the next use is now an explicit user action: click the toggle on the card. The Alerts toolbar badge counts only enabled alarms, so it visibly decrements as each alarm goes off — you always know at a glance how many alarms are still armed.
⛓ Alert Groups (v2.83.0+) — bundle 2 or more related alarms so the first one to fire is treated as the answer for the whole group. Every other member of the group is prevented from firing (v2.87.1+) and visually disabled in the same tick. When the user dismisses the firing member — or it auto-dismisses via its duration timer — the cascade then propagates: every member's audio stops, the trip overlay clears for the whole group, and every member's enable toggle is left in the off position.
The "one fires, rest go silent" contract is now an enforcement rather than an aspiration: any sibling whose own conditions later satisfy still cannot fire while the parent is tripped, so duplicate Mobile Alerts pushes for the same logical event are no longer possible.
Create a group three ways: (1) drag one alarm onto the MIDDLE of another (a green "+ Group" indicator shows the drop target — the top/bottom 30% of each card still reorders as before); (2) right-click any alarm for a context menu with
New group with…,
Add to existing group…,
Remove from group,
Rename group,
Ungroup; (3) Shift-click multiple alarms to multi-select, then click the
⛓ Group N Selected button in the modal footer.
Add an alert to an existing group by dragging its card onto the group’s header row (the row with the group name and mode pill) — the header highlights green with “+ Add to group” as you hover. This works even when the group is collapsed. Groups can be
named (click the name label at the top of the group),
collapsed as a unit (chevron next to the name), and members can be dragged in or out at any time.
Reorder a whole group (v3.31.0) — grab the
⋮⋮ grip on the far left of the group header and drag it up or down to move every member together (their internal order is preserved), including onto the top / bottom drop zones. Groups
auto-dissolve when membership drops below 2.
Group mode — three options (v2.91.0 added CASCADE/AND; v2.92.0 expanded to three explicit modes) — a pill on the group header (default
CASCADE) cycles through the three modes on click:
- CASCADE — the pre-v2.91.0 behaviour. The first member to trip fires the user-visible alert and every other member is auto-dismissed and disabled. One acknowledgement covers the whole bundle. Best for "any one of these is a problem, alert me about it" scenarios.
- CONCURRENT (renamed from AND in v2.92.0; semantics reworked in v2.95.0) — the group fires its single composite alert at the moment every enabled member is currently in tripped status at the same tick. Members can trip, un-trip (geofence "both" trigger re-exit; manual dismiss), and re-trip independently during the flight without breaking the group's progress — the check is just "are they all currently tripped right now?". While the group is incomplete, individual trips are silent (no overlay, no sound, no mobile push) but show a small ✓ pip on the card so you can see progress. Best for "all these conditions must currently be true at the same moment" scenarios — e.g. [🧩 Conditional: GS > 400] + [🧩 Conditional: alt > FL350] fires only while both are currently true. Dismissal behaviour (v2.95.0+): dismissing a fired CONCURRENT group re-arms all members (clears tripped status, resets transient state) so each member can independently re-trip later in the flight if its condition fires again. The group itself does NOT re-fire this mission — the per-group
_fired flag stays set until the next ground transition. So you get one composite alert per group per flight, but the underlying alarms remain useful as individual sentries for the rest of the mission.
- SEQUENTIAL (new in v2.92.0) — each member's first trip is silently noted and persists for the rest of the flight (via the per-alarm
state.everTripped flag), even if that member is later dismissed individually or its condition reverts. The ✓ pip on the card stays lit. When every enabled member has tripped at any point this mission (sequentially is fine — no overlap required), the group fires its single composite alert. Best for compound-milestone scenarios where the events happen at different times — e.g. [Cruise Reached] + [Waypoint TOD] + [Altitude descending through FL100] fires only after all three have happened during the flight. Ground transition clears the ✓ pip flags so the group re-arms for the next flight. Same v2.95.0 dismissal behaviour as CONCURRENT: dismissing a fired sequential group re-arms members; group doesn't re-fire this mission.
Dismissal — mode-aware (v2.95.0+): CASCADE mode dismisses disable every member (the documented "one fires, rest go silent" contract). CONCURRENT / SEQUENTIAL mode dismisses re-arm every member (members can keep tripping individually for the rest of the flight; the group's
_fired flag prevents the composite alert from re-firing until ground transition). A mode-aware toast surfaces the impact: CASCADE shows
"dismissed N siblings (X also-tripped + Y still-armed)"; non-cascade shows
"Group fired. N members re-armed — group will not re-fire this mission." Save / Load JSON files preserve the mode; the legacy
and value from v2.91.0 reads back as
concurrent.
Hover a collapsed card to see a tooltip summary of its current settings (sound, duration, alarm-specific params) without expanding it.
Collapse cards to declutter — each card has a small chevron button in its top-right action bar that toggles the editor body (sound picker, duration, type-specific inputs). The card header (icon, title, subtitle) stays visible so you can monitor every alarm at a glance. Collapsed state is per-card and survives reloads. Newly-added cards default to expanded so the configuration options are immediately visible.
Cards imported from file default to collapsed so a large saved set doesn’t flood the modal; expand any card individually to review or adjust its settings.
When an alarm trips a full-screen overlay appears with a pulsing red
ALARM header listing every alarm currently tripped. The sound loops continuously until you click
DISMISS ALL. The browser tab title also flashes
⚠ ALARM — SimFly as a cross-window cue.
Only one alarm sound plays at a time — the highest-priority alarm wins, so additional alarms that pile on just get added to the overlay list.
Enable All / Disable All (modal footer, next to Delete All) flip every configured alert in one click.
Disable All disarms everything, removes geofence circles and waypoint highlights from the map, and stops any active sound — configuration is preserved so a follow-up
Enable All (v2.88.0+) re-arms the whole queue and reschedules any timer countdowns.
Delete All permanently removes every alert from the queue. The per-card ✕ button does the same for a single alert. The footer has two rows: row 1 holds the tool buttons (Test Sound, Alert History, Group selected) | Load Alerts / Save Alerts | Load Defaults / Save Defaults; row 2 holds the three bulk state-flip buttons (Enable All, Disable All, Delete All).
Load Alerts behaviour (v2.87.1+) — importing an alarm file always produces a ready-to-fire configuration: every imported alarm is set to
enabled regardless of whatever
enabled state was saved in the file, and per-type transient state (cruise / descent / alt-min
fired sentinels, geofence
wasInside, waypoint
trippedFixes) is freshly seeded so the next live tick treats each alarm as just-armed.
Airborne import warning: if the aircraft is actively flying (live source connected and groundspeed > 30 kt, or |VS| > 100 fpm, or wheels-up confirmed) AA shows a confirmation dialog before applying the import — some alarm types can fire on the first tick post-load if the current flight state already satisfies their conditions (e.g., a Cruise alarm with a target altitude below your current FL). You can Cancel or Load Anyway.
⭐ Default Alerts (v3.33.0) — configure your go-to alert set once, then have it load automatically with every flight plan. Three steps: (1) build your standard alerts in the Alerts modal; (2) click
⭐ Save Defaults in the footer to save them to localStorage (it asks before overwriting an existing default set, and is disabled when no alerts are configured); (3) enable
⭐ Auto-load Default Alerts in the
🔌 Live menu. From that point on, loading a SimBrief flight plan replaces the queue with your defaults automatically. The same auto-load fires at app startup if the queue is empty. You can also pull your saved defaults into the modal at any time with
⭐ Load Defaults (disabled when none are saved; it replaces the current queue).
Safeguards: auto-load is silently skipped if the aircraft is airborne (groundspeed > 30 kt, vertical speed > 100 fpm, or wheels-up confirmed) — your in-mission alerts are never touched. Re-fetching the same plan (same origin, destination, and waypoint count) after you have already customised your alerts also skips the re-apply, so adding alarms on top of the defaults is safe. The chooser screen’s
Load SimBrief Flight Plan card shows the same checkbox when defaults are saved, giving you a one-click way to toggle the setting right before you load.
Right-click ⭐ Load Defaults to clear saved defaults and reset the toggle. Defaults include your Mobile Alerts provider configuration so the whole setup travels with a single save.
Persistence — alarms are saved to
localStorage and survive page reloads (with their
enabled state preserved — that's distinct from file import, which always re-enables everything). If the loaded SimBrief flight plan changes (different origin/destination/fix count), any
Specific waypoints picks are automatically cleared (since the old fix idents no longer apply) and you’re notified by toast.
🔊 Test Sound (v2.87.0, picker in v2.88.0) — a button at the bottom of the Alerts modal that previews one of the five built-in sounds for ~2.5 seconds so you can verify audio is working without arming an alarm. Plain click cycles through the library.
Shift-click or
right-click opens a popup picker so you can preview any specific sound directly. If an alarm is actively tripped and sounding when you click, the preview takes over briefly and the original alarm sound resumes automatically afterwards.
🔊→All — bulk set sound or duration (duration added v3.3.0) — a button at the bottom of the Alerts modal opens a two-section picker. The top section applies one chosen sound to every alarm at once; the bottom section sets the
Sound for auto-dismiss duration (Indefinite, or 5 / 10 / 30 / 60 seconds) on every alarm at once. A toast confirms how many alarms changed.
📜 Alert History (v2.87.0) — a separate modal (also opened from the bottom of the Alerts modal) showing the last
100 alert events on this device. Each row captures the local + UTC timestamp the alarm tripped, the alarm type and label, every configurable parameter that was set on the alarm, the eventual dismissal reason (
user dismissed,
duration timer, or
group cascade), and a full aircraft telemetry snapshot at trip time (position, altitude, GS, IAS, heading, vertical speed, phase, source, aircraft ident).
Per-row 📍 Pin to Map drops a labelled gold pin at the captured lat/lon so you can review where each alert fired during the flight; click again to remove the pin.
Per-row ✕ deletes that single entry.
⤓ Save Log (v3.17.0+) in the footer saves all entries to a JSON file on disk regardless of the current filter — useful for post-flight review or sharing with someone for troubleshooting.
Clear History wipes the whole log. The log is FIFO — once full, the oldest entry is evicted to make room for each new event. Storage is local to this browser (
localStorage key
simfly_aa_afk_alert_history); it does not sync across machines and survives reloads.
Group cascades are recorded fully: when one alarm in a group fires, its own entry is logged with role
group fired; each sibling that was also tripped is marked dismissed via
group cascade; and each armed sibling that was auto-disabled by the cascade gets a synthetic entry noting it never actually fired but was auto-dismissed because a different alarm in the group did.
High-elevation airport guards (v2.87.0) — ground detection now uses GS + VS instead of the old
MSL altitude < 1000 ft test, so taxi at airports like MMAS (6,112 ft) or El Alto (13,300 ft) no longer fools the phase detector into thinking the aircraft is airborne. As a backstop, Cruise Reached and Descent Started additionally require a confirmed wheels-up event (sustained GS > 40 kt for 10 s) before either can fire.
Sources required — Alerts need a live aircraft source (FSUIPC Live or STKP Live) to evaluate. Waypoint, TOC, and TOD alarms additionally need a SimBrief flight plan loaded.