A guide to competition scoring for paragliding and hang gliding pilots
GAP is the scoring system used at most paragliding (PG) and hang gliding (HG) cross-country competitions worldwide. It is maintained by the FAI/CIVL (the international body that governs free-flight sports) and defined in Section 7F of the FAI Sporting Code.
The name "GAP" comes from its original creators — Gerolf Heinrichs, Angelo Crapanzano, and Paul Mollison — who designed it in the early 2000s. It has been refined many times since then.
The core idea is simple: a perfect task day is worth 1000 points. Those 1000 points are divided among four categories — distance, time, leading, and arrival — and each pilot receives a share of the available points based on how they performed relative to the other pilots. If the task day wasn't ideal (few pilots launched, nobody flew far, etc.), the task is worth fewer than 1000 points.
If you've never flown a competition task before, here's how it works:
The task committee defines a route as a series of turnpoints — GPS coordinates with a cylinder radius around each. Pilots must fly through (or into) each cylinder in order. A typical task looks like this:
Your speed section time is measured from when you cross SSS to when you reach ESS. Your flown distance is measured along the optimized route through the turnpoints you reached.
Not every task day deserves a full 1000 points. If conditions were poor and most pilots bombed out near launch, the scores should count for less in the overall standings. GAP handles this with task validity — a multiplier between 0 and 1 that scales the available points.
Task validity is the product of three independent sub-validities:
Reduced when fewer pilots launch than expected. If almost everyone flies (above the "nominal launch" threshold, typically 96%), launch validity is 1.0. If half the field stays on the ground, it drops significantly. This prevents a task where only a few pilots launched from being worth too much. "Pilots present" are those not marked Absent — pilots who flew (uploaded a track) plus those present who Did Not Fly; organisers set these on each task's pilot roll call.
Reduced when pilots don't fly far enough relative to the expected task distance. It looks at the spread of distances flown by all pilots. If most pilots bombed out near launch, the task probably wasn't fair and scores are reduced.
Reduced when the fastest time is too short relative to the expected task duration (the "nominal time," typically 90 minutes). A very short winning time might indicate that the task was too easy or conditions were unusual.
The overall task validity is:
And the total available points for the task are:
On a great day with good conditions, task validity will be close to 1.0 and there will be nearly 1000 points on offer. On a poor day, it might drop to 200–400 points.
The available points are divided among four categories. The split depends on how many pilots made goal — this is called the goal ratio.
When nobody makes goal, almost all points go to distance. As the goal ratio increases, more points shift to time and leading. This makes sense — if everyone completed the task, the interesting question is who was fastest, not who flew farthest.
The weight of each component is calculated from a polynomial formula based on the goal ratio. For example, when the goal ratio is 0 (nobody made goal), the distance weight is about 0.9 (90% of points). When 50% of pilots make goal, the distance weight drops to about 0.55.
Every pilot who launches receives distance points, making this the "bread and butter" of your score. For paragliding, the formula is a straight proportion of how far you flew:
The pilot who flew the farthest gets the full distance points. Everyone else gets a proportional share based on how far they flew. For hang gliding, half of the points use this proportion and the other half use a "difficulty" measure (see below).
There is a minimum scored distance (typically 5 km). If you launched but only flew 1 km before landing, you're still scored as if you flew 5 km. Pilots sometimes call these "bomb-out points" — the system is designed to encourage you to at least launch and give it a go rather than sitting out a task entirely.
In hang gliding, distance points are split into two halves (per the FAI rules, S7F §11.1.1 ):
Why? Two reasons from the rulebook: for safety and retrieve, pilots shouldn't be tempted to fly just past a group that landed; and a pilot who lands somewhere often hit trouble just before, so the final glide into a landing field is "easy" distance. Pilots who reach goal always get the full distance points. Your results page shows the linear and difficulty halves separately so you can see how each contributed.
Difficulty does not apply to paragliding, and a competition can switch it off (scoring hang gliding on the linear formula instead) in its settings.
When a task defines a separate take-off turnpoint before the start (SSS), competitions differ on whether the take-off→start leg counts toward scored distance. GlideComp offers two settings (chosen per competition):
The two only differ for tasks that include a take-off turnpoint; tasks that begin at the SSS score the same either way. The speed section (SSS→ESS), and therefore time and leading points, is unaffected by this setting.
Time points reward pilots who completed the speed section quickly. The key rules:
If you're eligible, your time points are based on your speed fraction — a value between 0 and 1 that measures how close your time was to the fastest pilot's time:
Where is the difference between your time and the best time (in hours), and is the fastest pilot's time (in hours). The 5/6 exponent is the current FAI S7F value and the default for both sports. A competition can instead select the older 2/3 exponent (the GAP2016/2018 curve), which is slightly more generous — it's a per-competition setting, chosen independently of the leading-coefficient variant. The per-pilot score analysis names the exponent that was applied.
The best time is the fastest pilot in goal for paragliding ( §11.2.1 ). For hang gliding — matching AirScore — it is the fastest pilot to reach ESS whenever the ESS-but-not-goal share above keeps part of the time points (the default), so the docked pilots' speed fractions stay on the same scale; if a competition sets that share to 0%, the best time is taken from goal pilots exactly as the spec reads.
This creates a generous curve: pilots close to the fastest time get nearly full points, and the penalty increases gradually for slower times. It's not a cliff — finishing 10 minutes behind the winner still earns you a good share of time points.
One thing to be aware of: in a race-to-goal task with start gates, your clock runs from the start gate you took — the last gate at or before your start-cylinder crossing — not from the crossing itself ( §8.3.1 ). Cross at 13:49 with gates at 13:30/13:50 and your clock has been running since 13:30. Elapsed-time tasks are timed from your actual crossing. GlideComp scores both per the spec, and the per-pilot score analysis shows which gate you took alongside your crossing time.
Leading points (sometimes called "departure points") reward pilots who take the risk of flying at the front of the gaggle and leading the way towards goal. Without this incentive, the optimal strategy would be to wait in a thermal and let others do the pathfinding.
Each pilot gets a leading coefficient (LC) — a number that represents how much time they spent close to ESS while ahead of the pack. Technically, it's the area under a curve of "remaining distance to ESS" (measured along the course, from the start gate opening) plotted over time. A "ratchet" mechanism means your distance only counts when it's decreasing (flying toward ESS) — flying away doesn't reset your progress. This matches the CIVL GAP / AirScore leading coefficient.
The 2024 FAI spec defines two LC variants, one per sport ( §11.3.1 ): hang gliding uses the classic squared-distance area, and paragliding uses the weighted area (the middle of the course counts for more). GlideComp defaults each sport to its spec variant, and a competition can override the choice in settings — independently of the time-points exponent, so any combination is expressible. The per-pilot score analysis names the variant that was applied.
A lower LC means you spent more time at the front. The pilot with the lowest LC gets the maximum leading points.
Leading points use a similar shape to time points, applied to LC values instead of times:
The pilot with the best (lowest) LC gets full leading points. Others get proportionally less based on how their LC compares.
Leading points are on by default for both categories (the FAI formula), and a competition can switch them off. PG competitions give leading points a higher weight than HG, since paragliding has no arrival term to share the non-distance points with.
How the day's non-distance points split between leading and time is a per-competition choice for paragliding (hang gliding always uses the FAI HG formula). New PG competitions default to S7F 2024; competitions created before 15 July 2026 default to GAP2020 so their published scores never shift:
Hang gliding only. Arrival points reward pilots based on their order of arrival at ESS. The first pilot to reach ESS gets the most arrival points, and later arrivals get progressively less.
The first arrival receives roughly 100% of the available arrival points, while the last arrival still receives about 20%. The curve is defined by a polynomial that ensures even late arrivals get meaningful points.
Arrival points are on by default for hang gliding and can be disabled in competition settings. They do not apply to paragliding competitions.
Your total score for a task is the sum of your four component scores. Following the spec ( S7F §11 ), it is rounded to one decimal place — and any penalties are subtracted before that rounding ( §12.4 ), so the rounding is always the last step:
A pilot's score can never go below zero, no matter how large the penalty. Pilots are ranked by this total (highest first); in case of a tie, the pilot with the greater flown distance is ranked higher. The scoreboard displays these totals as whole points, but the underlying one-decimal value is what drives ranking and tie-breaks.
Imagine a task day with good conditions (task validity = 0.95) and 20% of pilots making goal, with leading and arrival points disabled. The available points would be about 950. The breakdown might be roughly:
A pilot who made goal with the fastest time would score 570 + 380 = 950 points. A pilot who flew 80% of the best distance but didn't make goal would score about 456 + 0 = 456 points (no time points without goal in PG).
When deteriorating weather forces the safety committee to stop a task mid-flight, the task is scored as a stopped task. The organiser records the stop announcement time on the task; GlideComp then applies the spec's stopped-task rules automatically and every affected pilot's score explanation says exactly how.
Pilots close to a scoring milestone when the stop is announced shouldn't be tempted to keep flying in dangerous conditions, so the announcement is scored back to an earlier task stop time. Paragliding: the announcement minus the competition's score-back time (default 5 minutes, adjustable in the comp's scoring settings). Hang gliding: one start-gate interval, or 15 minutes when the task has a single start gate.
A stopped task only counts if it ran long enough: at least min(1 hour, half the nominal time) from the race start (single start gate) or from the last pilot's start (multiple gates / elapsed time). A task stopped earlier than that scores zero for everyone, and the standings say why.
A fourth validity factor joins launch, distance and time. If anyone reached the end of the speed section it is 1 (the race had a result); otherwise it devalues the day based on how spread out the field was and how many pilots had already landed when the task was stopped.
In a race with a single start gate, everyone is scored from the start up to the task stop time — turnpoints tagged after it don't count and distance is measured only up to it. With multiple start gates or elapsed-time starts, every pilot is scored for the same amount of flying time: the time the last-started pilot had between their start and the stop. Pilots who were already past the end of the speed section at the stop are scored for their complete flight — including reaching goal after the stop — and every goal pilot's time points are reduced by a fixed amount (the time points of a hypothetical pilot reaching ESS exactly at the stop), so finishing just before the stop is worth no more than being stopped just after ESS.
A pilot still airborne at the stop with height in hand would have glided further, so their distance gets an altitude bonus: at every track point in the scored window, height above goal counts as extra distance at a fixed glide ratio — 4:1 for paragliders, 5:1 for hang gliders (GNSS altitude). The bonus feeds distance points only (never past goal distance); time and leading points are unaffected. Pilots who landed before the stop get no bonus.
A stopped task is flagged on the task page with its stop time, the stop action is recorded in the competition's public audit log, and each pilot's score-details page narrates the scored window, any crossings that no longer counted, the altitude bonus, and the goal time-points reduction.
When you create a competition you only choose whether it's hang gliding or paragliding — GlideComp then applies the official CIVL GAP defaults for that category. These are the current FAI Sporting Code Section 7F values, chosen so a new competition scores like a standard FAI/AirScore event without touching anything. You can still change any of them under Advanced scoring settings in the competition's Settings dialog, but you shouldn't need to unless your event runs under local rules (e.g. Australia's SAFA) that specify different values.
Most values are shared across both categories; the differences all follow from the spec treating hang gliding and paragliding differently (arrival and distance-difficulty are hang-gliding-only; paragliding has no arrival term, so its leading weight is higher).
| Setting | Default | What it means |
|---|---|---|
| Nominal launch | 96% | Launch validity is full above this fraction of pilots launching ( §9.1 ). |
| Nominal goal | 30% | The share of pilots expected to make goal on a good day; shapes the distance/time/leading weight split. |
| Nominal distance | Auto | The expected task distance for distance validity. Auto = 70% of each task's optimized distance; set a fixed value to pin it comp-wide. |
| Nominal time | 90 min | The expected "normal" winning time; a much faster winner devalues the task (time validity). |
| Minimum distance | 5 km | The floor a launched pilot is scored at, even if they land sooner ("bomb-out points"). |
| Leading points | On | Rewards leading at the front of the pack. On for both categories in the FAI formula (paragliding weights them higher, as it has no arrival term). |
| Leading formula | Per sport | The leading-coefficient variant ( §11.3.1 ): classic (squared-distance) for hang gliding, weighted (weighted-area, GAP2020+) for paragliding — the 2024 spec pairing. Either can be selected for any competition. |
| Time points exponent | 5/6 | The speed-fraction exponent ( §11.2 ), for both sports. Set independently of the leading formula; "2/3" selects the older, slightly more generous GAP2016/2018 curve. |
| PG leading weight | S7F 2024 | Paragliding only: the leading↔time weight split. New PG comps default to S7F 2024 (the LeadingTimeRatio parameter, default 26%); comps created before 15 July 2026 default to GAP2020 (AirScore parity) so their scores don't shift. No effect on hang gliding. |
| Distance origin | Take-off | Scored distance is measured from the take-off point through the start (FAI CIVL GAP / PWCA). "Start cylinder" excludes the take-off→start leg (HGFA/SAFA). |
GlideComp implements the core GAP formulas from the 2024 edition of the CIVL Sporting Code Section 7F, and its results are validated against real AirScore-published competition scores. The validity polynomials, weight distributions, and point formulas follow the official specification, but not every feature of the full spec is implemented, and in a few places the behaviour deliberately or currently differs — those differences are called out explicitly in the next section.
| Feature | Status |
|---|---|
| Task validity (launch, distance, time) | Implemented |
| Distance, time, leading, arrival points | Implemented |
| Weight distribution | Implemented |
| PG and HG scoring differences | Implemented |
| Leading coefficient (ratchet mechanism) | Implemented |
| Minimum distance floor | Implemented |
| Penalties — absolute points ( S7F §12.4 ) | Implemented (entered by the scorekeeper, audit-logged) |
| Penalties — percentage ( §12.4 ) | Not implemented |
| Early starts & jump-the-gun ( §12.2 ) | Implemented — PG scored launch→start; HG 1 pt per X s early (X, Y configurable, defaults 2/300) |
| ESS but not goal ( §12.1 ) | Implemented — PG keeps 0% of time points; HG keeps 80% of time and arrival points (configurable) |
| Start gates / race start times ( §6.3.3 , §8.3.1 ) | Implemented — start snapped to the last gate ≤ crossing; LC clock from the first gate ( §11.3.1 ) |
| Goal lines ( §6.2.3 , §8.5.2 ) | Implemented — line perpendicular to the final leg, with the control semi-circle behind it |
| Line-type control zones at intermediate turnpoints ( §8.4 ) | Not implemented — every turnpoint before goal is a cylinder |
| Task deadline enforcement ( §8.3 , §11.1 ) | Implemented — crossings after the goal deadline don't count; landed-out distance is measured up to the deadline |
| Launch window ( §8.6.1 ) | Partially implemented — start crossings before the window opens can't validate a start; see below |
| Stopped tasks (weather calldowns, §12.3 ) | Implemented — scored-back stop time, minimum-run check, stopped validity, scored time window, altitude bonus; see Stopped Tasks |
| Multi-task series scoring | Not implemented |
| FTV (fixed total validity) for series | Not implemented |
New competitions default to the official CIVL GAP settings for their category — leading points on for both, arrival and distance-difficulty on for hang gliding — so scores match a standard FAI/AirScore event out of the box. See Default Competition Settings for the full list; any of them can be changed under the competition's Advanced scoring settings.
The scoring engine source code is open and available on GitHub .
We compared the GlideComp scoring engine line-by-line against the FAI Sporting Code Section 7F (2024 edition). Beyond the unimplemented features listed above, these are the places where GlideComp's behaviour differs from the letter of the spec. Section numbers (§) refer to the 2024 edition and link to the relevant page of the official PDF .
GlideComp scores race-to-goal start gates per the spec: each pilot's start time is the last gate at or before their start-cylinder crossing ( §8.3.1 ), crossings before the first gate cannot validate a start ( §8.3 ), early starts follow the §12.2 rules (paragliders scored launch→start; hang gliders get the jump-the-gun penalty), and the leading-coefficient clock runs from the first gate ( §11.3.1 ). One pragmatic deviation: a race task whose only gate is exactly 00:00:00 UTC is treated as having no gates and timed as elapsed time — some tools write that lone midnight gate as a placeholder to satisfy the file format's non-empty-gates rule, and a real midnight-UTC gate does not occur in practice.
The ESS-but-not-goal rule itself is implemented per §12.1 : paragliders lose all time points without goal, and hang glider pilots keep 80% of their time and arrival points by default (configurable per competition). However, §11.2.1 defines "best time" as the fastest pilot who also reached goal, and GlideComp instead mirrors AirScore's implementation: while the ESS-but-not-goal share keeps part of the time points (the HG default), the best time is the fastest pilot to reach ESS, goal or not — so the docked pilots' speed fractions are measured on the same scale as everyone else's. When the share is set to 0% (always the case for paragliding), the best time is goal-validated exactly as the spec reads.
The 2024 spec derives the PG leading weight from a per-task LeadingTimeRatio parameter (default 26% of the non-distance weight, and 100% of it when nobody makes goal). Paragliding competitions created from 15 July 2026 onward default to this S7F 2024 formula. Competitions created before that date keep the earlier GAP2020 formula — 35% of the non-distance weight when someone makes goal, and when nobody does — so their published scores never shift; this matches AirScore's gap2020/gap2021 presets. Either comp can switch between the two (and set its LeadingTimeRatio) under Paragliding leading weight in scoring settings. The hang-gliding weights match the 2024 spec and are unaffected by this setting.
A goal line is scored as the spec defines it — a line through the goal waypoint, perpendicular to the final leg, with the semi-circular control zone behind it — but goal is the only place GlideComp understands a line. The spec also allows an intermediate turnpoint to be a line, validated when two consecutive fixes sit on opposite sides of it and going around its end would have required an implausible speed (over 120 km/h). GlideComp treats every turnpoint before goal as a cylinder. Line-type turnpoints are rare in XCTrack task files, so in practice this affects few tasks.
The spec counts a pilot's turnpoints only if they launched within the launch time
window. GlideComp enforces the half of this that a tracklog can prove: a
start-cylinder crossing recorded before the window even opened
(takeoff.timeOpen in the task file) means the pilot was airborne
before launching was allowed, so such crossings cannot validate a start — the
score explanation says so. What a tracklog alone cannot prove is when the
pilot launched: a pilot who launched before the window but only started the course
after it opened, or who launched after the window closed, is not detected —
launch-time detection is not part of scoring, so those cases are left to the
scorekeeper (a penalty can be applied manually).
If any of these matter for your competition, or you spot a difference not listed here, please open an issue on GitHub — scoring transparency is the point of this project.