Skip to content

xng v0.21.0

Latest

Choose a tag to compare

@github-actions github-actions released this 19 Jun 05:28

What's new in v0.21.0

This is a big one. v0.21.0 more than doubles the number of supported modes
(8 → 20)
— twelve brand-new decoders spanning aviation, maritime, rail,
paging, and safety beacons — adds deep protocol decoding across every existing
mode, and rebuilds how xng feeds Airframes and presents data on the dashboard.
258 files changed, ~65k lines.

12 new decode modes

Mode What it decodes
UAT 978 MHz ADS-B + FIS-B (wideband CPFSK front end), synthesized onto 1090 for tar1090/readsb
FLEX paging Motorola FLEX 1600 / 3200 / 6400 bps 2- and 4-FSK, automatic rate detection
POCSAG paging multi-baud auto-detect, spec-correct numeric + alphanumeric
APRS AFSK1200 / AX.25, Mic-E, compressed, telemetry (PARM/UNIT/EQNS/BITS), all-region freqs, space/ISS reception with TLE satellite correlation
COSPAS-SARSAT 406 MHz distress-beacon FGB decode (biphase-L, real off-air polarity)
NAVTEX CCIR 476 4-of-7 alphabet, FEC-B time-diversity, ZCZC message decode
DSC CCIR 493 MF/HF FSK, DX/RX time diversity, structured message decode
RS41 radiosonde GFSK demod, RS(255,231) FEC, frame/sub-block decode
ADS-L EASA SRD860 i-Conspicuity (2-FSK / Manchester)
ATCS rail Spec-200 HDLC/LAPB deframer + Layer-3 packet decode
EOT / HOT rail End/Head-of-Train telemetry
VDES ITU-R M.2092-1 ASM application payloads (DAC=1 + DAC=200)

Each ships with an IQ front end, a spec-faithful modulator for loopback tests,
vendored real-RF fixtures wired into the bench gate, and a PROVENANCE.md.

Deeper decoding in the existing modes

  • Mode S / ADS-B — surface movement (TC5-8), Gillham + geometric altitude
    (TC9-18), airborne velocity (TC19), target state (TC29), operational status
    (TC31), aircraft/emergency status (TC28); Comm-B BDS 1,0 / 1,7 / 3,0 (ACAS RA)
    / 4,4 / 4,5 (MRAR/hazard met) / 6,2; Mode A/C reply decode; DF18 CF source
    tagging (TIS-B / ADS-R / non-ICAO); DF19 military, DF24-27 Comm-D ELM;
    graduated position trust; version-aware NUCp/NIC/NACv/SDA; density/penalty BDS
    scoring; single-bit CRC repair.
  • VDL Mode 2 — full ATN upper-layer PER, Context Management, ACSE, COTP TSDU
    reassembly, CLNP multipart, X.25 (RESTART / SNDCF), complete XID parameter set,
    IDRP, ES-IS, expanded CPDLC argument coverage.
  • HFDL — full HFNPDU/LPDU record decode, aircraft position + ICAO cache,
    persistent system table with ground-station roster, per-burst SNR/CFO, Viterbi
    FEC-correction count.
  • Inmarsat Aero — coherent burst demod with real FEC-correction count, P/R/T
    SU classifier, P-channel superframe-lock + AFC/DCD state machine, log-on/off
    and call-announcement control SUs, physical-channel tagging.
  • Inmarsat STD-C / EGC — RRC matched filter, EGC geographic-area geometry,
    LES/NCS operator + ocean-region tables, many signalling-channel field decodes,
    ITA2/Baudot text.
  • AIS — multi-fragment AIVDM reassembly + per-MMSI tracker, Class A
    kinematics, types 4/5/11/18/19/21(AtoN)/24, DAC=1 (IMO SN.1/Circ.289) and
    DAC=200 Inland ASM, SOTDMA/ITDMA radio state, SART/MOB/EPIRB distress tagging.
  • ACARS — OOOI times + airports, free-text position → lat/lon, winds-aloft
    (4J), H1 families (#CFB maintenance, FPN flight plans, 5Z), remaining FANS-1/A
    CPDLC argument shapes, raw MIN + downlink sequence, syndrome-table FEC,
    reassembly status (assstat).
  • Iridium — soft-decision (Chase-2) BCH for weak frames, deeper IBC / LCW /
    ISY / GSM-L3 decode, PPP-PAP + HTTP Basic-Auth credential recovery from IP
    frames, iri_time re-epoch (LBFN roll) fix.

Outputs, feeding & dashboard

  • Per-decoder, per-port Airframes feeding — each mode reaches Airframes over
    its native legacy port: ACARS via acarsdec UDP, VDL2 via a new dumpvdl2
    decoded:json
    feed (UDP :5552 / TCP :5553, verified field-for-field
    against dumpvdl2 2.6.0); everything else via asf-2.0. Per-mode enable/disable
    and station-id override.
  • Geo export/data/export.{geojson,gpx,kml} (aircraft, vessels, beacons,
    Iridium mobile-terminal fixes — current position + trail).
  • Cross-mode distress surface on /api/state — ADS-B 7500/7600/7700 +
    emergency, AIS SART/MOB/EPIRB, STD-C distress, DSC distress, every
    COSPAS-SARSAT 406 beacon.
  • Beast / SBS synthesis for UAT + HFDL positions (DF17 native; DF18 with the
    correct CF preserving TIS-B / ADS-R / non-ICAO provenance; TC19 velocity
    frames) with a monotonic 12 MHz sample-clock MLAT counter.
  • readsb-schema data API/data/aircraft.json (with provenance type and
    incremental ?since=<unix>) and /data/receiver.json.
  • Prometheus — per-ACARS-label message counter and per-channel FEC-corrected
    counter; station mode now serves one shared metric set (station /metrics
    previously read all zeros).
  • Web dashboard — entity-type tabs (flights, ships, beacons, pagers, EOT
    trains), per-entity and show-all position trails, a mode-aware layer control,
    pager message history + resizable detail pane, receiver-position pin,
    antimeridian-safe trails, color-emoji icons, and an XSS fix on entity rows.

DSP & internals

  • Root-raised-cosine matched-filter design shared in xng-dsp; narrow-passband
    DDC cutoff fix (restored live NAVTEX/DSC decode); new per-mode IQ front ends.
  • Real-RF bench fixtures added for the new modes and wired into the regression
    gate.

Reliability

  • Two adversarial /code-review passes hardened the new surface: a VDL2
    multi-block reassembly feed-loss, Prometheus label escaping + CRC-gated
    cardinality, a readsb-faithful provenance ranking (no type flip-flop), AIS
    rate/dedup ordering, and ACARS noise-floor recovery.

Full per-mode detail is in the README
and docs/notes/.
Full diff: v0.20.0...v0.21.0.


xng is a single native decoder for the radio side of aviation
and maritime data: ACARS, VDL Mode 2, HFDL, Inmarsat Aero (L/C),
Inmarsat STD-C/EGC, Iridium (ring alerts, broadcasts, ACARS over
SBD with wideband burst hunting), AIS, and Mode S/ADS-B — one CLI,
every output (console, JSON/JSONL, acarsdec-compatible UDP,
Airframes feeding, Prometheus, asf-2.0 gRPC/QUIC), and a built-in
application layer (ADS-C, CPDLC rendered as text, media advisory).

Every decode core is validated against real off-air recordings or
reference-implementation test vectors, vendored into CI. The VHF
ACARS chain is validated end-to-end into production Airframes from
a live station.

Assets

Asset Platform
xng-*-x86_64-unknown-linux-gnu.tar.gz Linux x86_64
xng-*-aarch64-unknown-linux-gnu.tar.gz Linux arm64 (Pi 4/5 64-bit)
xng-*-aarch64-apple-darwin.tar.gz macOS Apple Silicon
xng_*.deb Debian/Ubuntu packages (x86_64 + arm64)

Intel macOS: build from source (GitHub retired its free Intel
macOS runners) — brew install soapysdr airspy airspyhf protobuf && cargo build --release --features airspy,airspyhf.

Binaries are built with SoapySDR plus the native Airspy backends;
they need libsoapysdr (and libairspy/libairspyhf for native
Airspy) at runtime — the .deb declares these. Multi-arch Docker
images (amd64/arm64/armv7) are published to
ghcr.io/airframesio/xng for the same tag.

Quick start:

xng devices
xng scan --sdr driver=rtlsdr --gain 28 --modes acars,vdl2,ais
xng survey --sdr driver=rtlsdr --mode acars --tune-gain
xng listen --sdr driver=rtlsdr --mode acars -r 2400000 -c 130.940M \
    --channels 130.025,131.550,131.725 \
    --feed-airframes --station-id XX-YOUR-STATION