Skip to main content
reference 2 min read

IGC flight-recorder format

The IGC file format we-fly ingests on every upload — records, the B-record fix layout, coordinate/altitude grammar, and an interactive spec you can test in the browser.

What this is

IGC is the plain-text file written by FAI/IGC flight recorders and soft-loggers (XCTrack, FlySkyHy, Flymaster, LXNAV…). It is the primary upload format for we-fly — every flight in the logbook starts as an .igc file, and the upload endpoint (POST /api/v1/flights/upload) accepts exactly this. If you build anything that produces or reads flights for we-fly, this is the format you're speaking.

Interactive specification

We maintain a self-contained, interactive spec you can read and test right in the browser:

IGC format — interactive specification

It includes a live barograph (paste a file, watch the altitude trace draw itself), a B-record column ruler, a live decoder that converts every line to plain English, and a filterable record explorer — no upload, nothing leaves the page.

The format in one screen

  • Line-oriented. The first character of each line is the record type — a single letter AL. The rest is fixed-width and/or delimited data.
  • The B record is the track. A 35-byte fix: UTC time, latitude, longitude, fix validity, pressure altitude and GNSS altitude — repeated many times a minute.
  • Coordinates are degrees + minutes + thousandths-of-a-minute (WGS84), not decimal degrees: 5052197N → 50°52.197′ → 50.86995°.
  • Altitudes are metres. Pressure altitude is on the 1013.25 hPa datum; GNSS altitude is WGS84-ellipsoid height.
RecordRole
ARecorder id (first line) — X-prefix = soft-logger
HHeader: pilot, glider, date, hardware
I / J / KFix extensions (FXA, SIU, ENL…) and periodic data
CDeclared task (start, turnpoints, finish)
BPosition fixes — the track
E / F / DEvents, satellites, DGPS
GSecurity signature (FAI-validated via vali.fai-civl.org)
LFree-text comments

Parsing notes

  • Dates are day-first (DDMMYY), and come in two forms — current HFDTEDATE:DDMMYY,NN and legacy HFDTEDDMMYY. Accept both.
  • Slice B records by column, not whitespace — there is none; extensions are byte-positional per the I record.
  • G may be absent on soft-loggers: that means "unvalidatable," not "invalid." We-Fly parses uploads with igc-parser; follow its tolerant behaviour over the strict manufacturer spec.

Sources

The interactive spec reconciles the FAI/IGC Technical Specification, the FAI/CIVL FVU standard (the validation contract we call), and Ian Forster-Lewis's developer guide.