Modes & decoders
xng/docs/modes

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:

● live

Validated off-air. Decoded from real recordings or live radio and fenced by a CI regression gate. Safe to rely on.

◐ growing

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

--modeSignalBandWhat you get
acarsVHF ACARS (ARINC 618)118–137 MHzFull application layer: ADS-C, CPDLC text, OOOI, MIAM, FEC bit-repair, many channels per capture● live
vdl2VDL Mode 2136.6–137 MHzACARS-over-AVLC, full ATN-B1 (protected CPDLC, CM logon, X.25/CLNP)● live
hfdlHFDL (ARINC 635)2.8–22 MHzSquitters, logons, mapped positions, OTA system-table persistence● live
aeroInmarsat Aero L1545–1547 MHzP-channel 600/1200 bps + 10.5 kbps OQPSK; ACARS/ADS-C/CPDLC; C-channel voice● live
std-cInmarsat STD-C / EGC1537–1542 MHzNCS TDM, EGC SafetyNET/FleetNET, geographic-area decode to coordinates● live
iridiumIridium1616–1626.5 MHzRing alerts with sat positions, IBC/ITL, ACARS over SBD, pager, voice classification, IP frames● live
aisAIS (ITU-R M.1371)161.975 / 162.025 MHzNMEA AIVDM + field decode types 1–27, Inland-AIS, SART/MOB/EPIRB distress● live
adsbMode S / ADS-B1090 MHzCPR 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/.

--modeSignalBandDecodes
uatUAT 978 (DO-282B)978 MHzADS-B downlink + FIS-B weather uplink, RS-FEC● live
sondeRadiosonde (Vaisala RS41)~400–406 MHzDe-whiten + RS-FEC + STATUS/PTU/GPS● live
navtexNAVTEX (SITOR-B)518 / 490 kHz4-of-7 + FEC-B + ZCZC framing● live
flexFLEX paging900 MHzAuto rate-detect, BCH, alpha/numeric/tone● live
sarsatCOSPAS-SARSAT 406406 MHzFirst-gen beacon ID + position (ELT/EPIRB/PLB)◐ growing
dscDSC (GMDSS)MF/HF/VHFDistress / all-ships / individual / area◐ growing
ads-lADS-L (EASA SRD860)868 MHzi-Conspicuity (CRC-24 + XXTEA)◐ growing
aprsAPRS / AX.25144.39 / 144.80 / 145.825 MHzAFSK1200 + AX.25 UI; position/Mic-E/weather/telemetry; satellite tagging◐ growing
pocsagPOCSAG pagingpaging bands2-FSK 512/1200/2400 + BCH; numeric/alpha/tone◐ growing
atcsATCS (rail)896 / 900 MHzHDLC/LAPB + AAR Spec-200 header◐ growing
eotEOT/HOT (rail telemetry)457.94 / 452.94 MHzManchester-FSK + AAR S-9152◐ growing
vdesVDES ASM161.95 / 162.00 MHzGMSK 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:

bash
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.025

For hardware and antenna requirements per band, see Inputs & outputs; for full command lines per mode, see Recipes.