What this is
CUP is the comma-separated waypoint-and-task format produced by SeeYou and
SeeYou Navigator (Naviter), and read by essentially every soaring and free-flight
instrument. we-fly reads it in two places — waypoint collections in the XC
planner, and competition tasks in the task library — and writes it back out
when you export a waypoint collection. If you produce or consume .cup files
for we-fly, this is the reference.
Interactive specification
We maintain a self-contained, interactive spec you can read and test right in the browser:
→ SeeYou CUP format — interactive specification
It includes a live file inspector (paste CUP, see every line decoded — coordinates converted, styles named, task columns labelled with their role and every observation zone resolved to a shape), a filterable field explorer, an observation-zone visualiser you can drag, and a coordinate converter — no upload, nothing leaves the page.
The format in one screen
- One file, two halves. CSV waypoints on top, then a literal
-----Related Tasks-----line, then tasks that reference those waypoints by name. Most.cupfiles have no task section at all — they are pure waypoint databases. - Header-driven. Line 1 names the columns. Column order is explicitly
arbitrary and any column after
stylemay be dropped, so parse the header rather than assuming positions. - Coordinates are degrees + decimal minutes, fixed width, WGS-84:
5107.830N= 51° 07.830′ = 51.1305°. Not decimal degrees, and the decimals are minutes, not seconds. - Units default to metres.
elevtakesm/ft; radii and runway lengths takem/nm/ml; units may be mixed freely within one file.
| Group | Fields |
|---|---|
| Identity | name (unique, required) · code · country · desc · userdata · pics |
| Position | lat · lon · elev · style (0–21, incl. 20 PG take-off / 21 PG landing) |
| Landable only | rwdir · rwlen · rwwidth · freq |
| Task | Options,… · ObsZone=… · Point=… · STARTS=… |
Observation zones — where the spec stops
Naviter's document defines the observation-zone keys but not the shapes
they produce, and never says which task column ObsZone=0 addresses beyond
"0 = Start". Both gaps are filled from XCSoar's TaskFileSeeYou.cpp, the
implementation instruments interoperate with. Three consequences are worth
knowing before you write a parser:
A1is a half-angle. A full cylinder isA1=180, neverA1=360.R1on a line zone is a half-width. A 5 km start gate isR1=2500m,Line=1.ObsZone=iaddresses task-line columni + 2— the description is column 0 and the takeoff is column 1, so zone 0 is the second waypoint. Many free-flight producers omit the takeoff column entirely and index from the first waypoint; there is no flag for it, so compare the highest zone index against the column count rather than assuming either convention.
All three fail silently: they produce a task that looks plausible and is wrong.
Compatibility notes
CUP has no speed section — no SSS/ESS and no start-gate interval beyond
NoStart — so a task imported from CUP is route + goal. Legacy files are
Windows-1252 rather than UTF-8, and a large body of older files uses an
11-column header with no rwwidth, which positional readers silently
mistake for a runway width when it is really the frequency.
Sources
The interactive spec reconciles the
Naviter / SeeYou CUP spec v1.2.0
(authoritative for waypoints and for task syntax),
XCSoar's TaskFileSeeYou.cpp
(our reference for zone geometry and indexing), and
aerofiles as a
second implementation.