Modes & decoders
Around 21 modes, every one of them a crate, every one feeding the same outputs. This page is honest about exactly how mature each decoder is — from production-validated to spec-anchored.
You select a decoder with --mode <name> on the CLI, or mode = "…"in a station file. Every multi-channel mode can decode any number of channels from a single capture.
Maturity, plainly
Decode cores are anchored to public specs or ported from reference implementations. What varies is how far the demodulator has been validated against real-world signals:
● liveValidated off-air. Decoded from real recordings or live radio and fenced by a CI regression gate. Safe to rely on.
◐ growingDecode core validated, demod maturing. The frame/application decode is anchored to spec or oracle vectors; the demodulator may still be synthetic. Useful, but expect rough edges.
Flagship modes
The safe starting set. All are validated against real off-air captures and benchmarked against the established tools — frequently beating them.
| --mode | Signal | Band | What you get | |
|---|---|---|---|---|
acars | VHF ACARS (ARINC 618) | 118–137 MHz | Full application layer: ADS-C, CPDLC text, OOOI, MIAM, FEC bit-repair, many channels per capture | ● live |
vdl2 | VDL Mode 2 | 136.6–137 MHz | ACARS-over-AVLC, full ATN-B1 (protected CPDLC, CM logon, X.25/CLNP) | ● live |
hfdl | HFDL (ARINC 635) | 2.8–22 MHz | Squitters, logons, mapped positions, OTA system-table persistence | ● live |
aero | Inmarsat Aero L | 1545–1547 MHz | P-channel 600/1200 bps + 10.5 kbps OQPSK; ACARS/ADS-C/CPDLC; C-channel voice | ● live |
std-c | Inmarsat STD-C / EGC | 1537–1542 MHz | NCS TDM, EGC SafetyNET/FleetNET, geographic-area decode to coordinates | ● live |
iridium | Iridium | 1616–1626.5 MHz | Ring alerts with sat positions, IBC/ITL, ACARS over SBD, pager, voice classification, IP frames | ● live |
ais | AIS (ITU-R M.1371) | 161.975 / 162.025 MHz | NMEA AIVDM + field decode types 1–27, Inland-AIS, SART/MOB/EPIRB distress | ● live |
adsb | Mode S / ADS-B | 1090 MHz | CPR positions, Comm-B, ACAS RA, TIS-B/ADS-R; SBS + Beast out; native 2.4 MS/s | ● live |
aero-c (Inmarsat Aero C bursts) is also available and RF-loopback validated. On the benchmarks: VDL2 reads more frames than dumpvdl2, HFDL hits 97% of dumphfdl, AIS 91% of AIS-catcher with zero false decodes, ADS-B 98–99% of readsb/dump1090-fa, and Iridium decodes 132% of gr-iridium’s frame count on a shared capture.
Newer modes
All wired to --mode and exercising the same runtime, outputs, and feeding. Demod validation ranges from live off-air to synthetic — each has a note in the repo’s docs/notes/.
| --mode | Signal | Band | Decodes | |
|---|---|---|---|---|
uat | UAT 978 (DO-282B) | 978 MHz | ADS-B downlink + FIS-B weather uplink, RS-FEC | ● live |
sonde | Radiosonde (Vaisala RS41) | ~400–406 MHz | De-whiten + RS-FEC + STATUS/PTU/GPS | ● live |
navtex | NAVTEX (SITOR-B) | 518 / 490 kHz | 4-of-7 + FEC-B + ZCZC framing | ● live |
flex | FLEX paging | 900 MHz | Auto rate-detect, BCH, alpha/numeric/tone | ● live |
sarsat | COSPAS-SARSAT 406 | 406 MHz | First-gen beacon ID + position (ELT/EPIRB/PLB) | ◐ growing |
dsc | DSC (GMDSS) | MF/HF/VHF | Distress / all-ships / individual / area | ◐ growing |
ads-l | ADS-L (EASA SRD860) | 868 MHz | i-Conspicuity (CRC-24 + XXTEA) | ◐ growing |
aprs | APRS / AX.25 | 144.39 / 144.80 / 145.825 MHz | AFSK1200 + AX.25 UI; position/Mic-E/weather/telemetry; satellite tagging | ◐ growing |
pocsag | POCSAG paging | paging bands | 2-FSK 512/1200/2400 + BCH; numeric/alpha/tone | ◐ growing |
atcs | ATCS (rail) | 896 / 900 MHz | HDLC/LAPB + AAR Spec-200 header | ◐ growing |
eot | EOT/HOT (rail telemetry) | 457.94 / 452.94 MHz | Manchester-FSK + AAR S-9152 | ◐ growing |
vdes | VDES ASM | 161.95 / 162.00 MHz | GMSK 9600 + ASM transport + spec payloads | ◐ growing |
The shared application layer
The reason a normalized message matters: ARINC 622 ADS-C positions and CPDLC render as readable text — like REQUEST CLIMB TO FL360 — the same way no matter whether the ACARS arrived over VHF, VDL2, HFDL, Aero, or Iridium SBD. Decode it once, get it everywhere.
Picking channels
Each mode ships a built-in frequency plan, so the simplest invocation is just a mode name:
xng tui --sdr driver=rtlsdr --mode vdl2 # uses the VDL2 plan
xng listen --sdr driver=rtlsdr --mode ais \ # both AIS channels, one capture
-r 2400000 -c 162.000M --channels 161.975,162.025For hardware and antenna requirements per band, see Inputs & outputs; for full command lines per mode, see Recipes.