Product overview
As of 2026-10-19.
Vulture is an app for planning and analysing soaring flights. A pilot imports or records an IGC flight log, and Vulture opens it as a full-screen map with replay, a barogram, thermals, glides, the task and its legs, airspace, and a Debrief that rates the flight. Several flights can share one map to compare a competition day. Around that sit:
- tasks, waypoints and airspace files;
- competitions from Soaring Spot and Charron.line;
- uploads to WeGlide, SkyLines and Charron.line;
- weather (METAR, TAF, SkySight);
- on Apple platforms, in-flight recording.
Sports
Section titled “Sports”The pilot picks a sport in Settings, or lets Vulture detect it from the flight (VultureDetectSportAutomatically / synced key detectsSportAutomatically). The sport changes the analysis thresholds: see Flight analysis.
| Sport | Stored value (iOS VultureAnnotationStyle) |
|---|---|
| Gliding (sailplanes) | 0 |
| Paragliding | 1 |
| Hang gliding (delta) | 2 |
Platforms and repositories
Section titled “Platforms and repositories”| Repository | Language | What it is | Status |
|---|---|---|---|
vulture-ios | Swift (UIKit shell around SwiftUI screens, XcodeGen) | The reference implementation: iPhone, iPad, the Mac (Catalyst), Apple Watch, widgets, Live Activity and Control Center control, App Clip, Quick Look and thumbnail extensions, a Safari web extension, Siri and App Intents. Also the Chrome extension (Chrome/) | In the App Store (app id 1468252627). Build 564 (XcodeGen/Settings.yml), deployment target iOS 26.0 |
vulture-android | Kotlin, Jetpack Compose, Material 3 Expressive | A native port that aims for parity with iOS’s analyse flights experience, synced through Google (Firebase) instead of iCloud | Internal and alpha builds on Google Play: version 0.1.0, build 4 (version.properties, CHANGELOG.md). minSdk 29 (Android 10) |
vulture-web | Ruby (Sinatra) | The website vulture.aero, the /api/* backend both apps call (a Soaring Spot proxy, XCSoar and openAIP file catalogues, elevation tiles, the SkySight catalogue), and the AASA and assetlinks files | Deployed at https://vulture.aero |
vulture-docs | Markdown (Astro Starlight) | This site: the shared behaviour, data formats, APIs and decisions |
How they relate:
- iOS defines behaviour. Android reproduces it, including the numeric quirks marked Copy (Port decisions). Parity is proven by the golden data that iOS exports. Fixes that Android applies first are listed in ios-changes for iOS to follow.
- Both apps call vulture-web with one shared API token (routes, API). They call third-party services directly (Integrations).
- Sync differs. iOS syncs through CloudKit and the iCloud key-value store. Android syncs through Firestore and Cloud Storage, in a schema that iOS will adopt later (Sync schema). Until then, the two platforms’ data and subscriptions are separate.
- Strings are shared. Android generates its strings from the iOS catalogues (Localisation).
- Links are shared.
https://vulture.aero/open/…opens either app (Deep links).
Out of scope for Android v1 (vulture-android/docs/analysis/00-roadmap.md):
- FLARM Wi-Fi and LXNAV Bluetooth transfer
- flight recording
- SkySight
- weather and METAR
- airports and task planning screens beyond what flights need
- widgets and Wear OS
- Flight Coach
- an App Clip equivalent
- task sharing
What shapes the port
Section titled “What shapes the port”The ten facts from roadmap §1, in short:
- The analysis domain is pure logic, about 12k lines of Swift. It ports to pure-JVM Kotlin, and parity is proven by golden tests.
- 22 numeric quirks are copied bug for bug. Fixing one is a decision for both platforms.
- Opening a flight opens a full-screen map with a floating panel (flight chips, barogram, Play). Statistics sit behind the
ibutton. - The shell is a sidebar plus one detail column. The map is pushed over the list.
- Comparing means several flights on one map (up to 20 colours) plus a Compare table. More than one flight is Pro.
- IGC is the only flight format. Duplicates are dropped silently.
- The effective defaults are not the declared ones: replay at 10×, pressure altitude, gallery layout, and unread on import.
- Soaring Spot is served by vulture.aero, so the apps do no scraping.
- Sync had to be rebuilt for Android: CloudKit cannot be reached from Android, and credentials never sync.
- Strings are reused in 8 complete locales.
Free and Pro at a glance
Section titled “Free and Pro at a glance”Vulture is free, with an optional subscription, Vulture Pro: monthly or yearly, with a free trial, sold through RevenueCat (entitlement all). The details, product ids and paywall triggers are in Subscriptions.
| Free | Vulture Pro |
|---|---|
| The logbook and import | Several flights on one map, Compare, a competition day’s flights together |
| One flight on the map, with replay and barogram | The race ranking and Replay Day |
| Competitions (Soaring Spot, Charron.line) | The pilot’s own airspace files |
| openAIP airspace and its warnings | The full Debrief (each part and its answers) and Siri’s flight analysis |
| The Debrief score and band | The thermal sheet (climb, centring, 3D) |
| Thermals on the map | Creating and editing tasks (iOS) |
| Opening, flying and sharing an existing task | Overriding the flights’ task |
| Resuming a running recording; resetting a task override | Recording a flight (iOS) |
| Sync (iCloud; on Android up to 100 MB) | SkySight and satellite clouds (iOS) |
| Logbook statistics | |
| Uploads to WeGlide, SkyLines and Charron.line | |
| Unlimited synced storage (Android) |
The free tier is always on in Release. A gate never hides data that a lapsed pilot already has: files stay listed, tasks open, and recordings resume (iOS CLAUDE.md, “Vulture is free, with Vulture Pro”).
