Modern, open-source ACARS client for phpVMS 7 — Tauri 2 + Rust + React. Made with ❤️ in Gifhorn — by Thomas Kant.
Ein moderner, plattformübergreifender ACARS-Client für phpVMS 7. Erfasst Telemetrie aus Flight Simulators, scort Landungen mit industrie-validierten Schwellen, korreliert Touchdowns auf Runway-Centerline-Genauigkeit und shippt saubere PIREPs zu deinem phpVMS-Server.
Aktuell unterstützt:
- ✅ MSFS 2020 / MSFS 2024 — über raw SimConnect FFI (Windows-only, kein FSUIPC nötig)
- ✅ X-Plane 11 / X-Plane 12 — über native UDP DataRefs (cross-platform, kein Plugin nötig)
🇩🇪 Der Quellcode ist frei — die offiziellen Apps laufen nur für die German Sky Group.
AeroACARS ist Open Source (MIT-Lizenz). Jede Virtual Airline darf den Code klonen, anpassen und für ihre eigene phpVMS-7-Instanz selbst bauen — das ist ausdrücklich erwünscht.
Die offiziell veröffentlichten Builds (die Installer aus den GitHub-Releases) sind dagegen fest auf die German Sky Group konfiguriert: Login, Live-Tracking und PIREP-Submission funktionieren ausschließlich mit einem GSG-Pilotenaccount — ein Account einer anderen VA wird abgewiesen. Wer AeroACARS für eine andere VA nutzen möchte, baut sich aus dem Quellcode einen eigenen Client gegen die eigene Infrastruktur.
🇬🇧 The source is free — the official apps only run for German Sky Group.
AeroACARS is open source (MIT). Any virtual airline is welcome to clone, adapt and build the code for its own phpVMS 7 instance.
The officially released builds (the installers in the GitHub releases) are, by contrast, hard-wired to the German Sky Group: login, live tracking and PIREP submission only work with a GSG pilot account — accounts of other VAs are rejected. To use AeroACARS for a different VA, build your own client from source against your own infrastructure.
Lade dir das Paket für deine Plattform aus dem Latest Release herunter.
AeroACARS_<version>_x64-setup.exe(NSIS-Installer) herunterladen und ausführen- SmartScreen-Warnung wegklicken: „Weitere Informationen" → „Trotzdem ausführen" — wir sind noch nicht code-signed
- AeroACARS startet nach der Installation automatisch
- Login mit deinem phpVMS-API-Key
AeroACARS_<version>_aarch64.dmgherunterladen- DMG öffnen → AeroACARS-Icon in den Applications-Ordner ziehen
- Beim ersten Start: Gatekeeper blockt die App, weil sie nicht über die Apple Notarization gegangen ist. Du hast zwei Wege:
- Per Rechtsklick: Im Finder auf AeroACARS rechtsklicken → „Öffnen" → „Öffnen" im Dialog bestätigen. Danach merkt sich macOS die Erlaubnis und startet die App ab dann normal.
- Per Terminal (falls Rechtsklick die Option nicht zeigt — kommt bei strengeren Gatekeeper-Einstellungen vor):
xattr -dr com.apple.quarantine /Applications/AeroACARS.app
- Login mit deinem phpVMS-API-Key
Hinweis: Intel Macs werden derzeit nicht offiziell gebaut. Wenn dafür Bedarf besteht: ein Issue aufmachen, der Tauri-Build kann ohne große Mühe um
x86_64-apple-darwinerweitert werden.
Ab v0.1.0+ erscheinen neue Versionen direkt als Update-Banner in der App — kein manueller Download mehr nötig. Der Updater verifiziert die Bundles per Ed25519-Signatur, also auch ohne Code-Signing/Notarization sicher.
- Phase-Detection-FSM (16 Phasen: Boarding → Pushback → TaxiOut → Takeoff → Climb → Cruise → Descent → Approach → Final → Landing → TaxiIn → BlocksOn → Arrived → PIREP)
- Position-Streaming an phpVMS mit phasen-adaptiver Cadence
- Offline-Queue für Position-Posts wenn das Netzwerk wegbricht
- 50 Hz Sampling (matches GEES, höher als MSFS' default)
- V/S-Capture aus latched SimVar (MSFS) oder Buffer-Min ±250 ms (GEES-Pattern)
- Peak-G im 800-ms-Fenster nach Aufprall (Strut-Rebound ausgeschlossen)
- AGL-basierte Bounce-Detection (35→5 ft, BeatMyLanding-aligned)
- Native Sideslip aus VEL_BODY_X/Z (
atan2) - Headwind/Crosswind aus airframe-relativen Wind-Komponenten
- Score-Schwellen aus Boeing 737 FCOM, Airbus A320 FCOM, LH FOQA, vmsACARS-Defaults
- OurAirports.com Runway-Datensatz (47.681 Bahnen, 4 MB) embedded
- Touchdown-Lat/Lon → exakte Runway + Centerline-Distance + Threshold-Distance
- Voller Notes-Block (TIMES / TOUCHDOWN / RUNWAY / FUEL / DISTANCE / METAR)
- ~40 Custom Fields (Title-Case + snake_case für Leaderboards)
- Auto-File bei
Arrived, mit manueller Override-Option - Bid-Delete via korrektem
/api/user/bidsEndpoint
- Auto-Start-Watcher: Aufzeichnung beginnt automatisch wenn Aircraft am Bid-Departure-Airport steht
- Persistente Activity-Log mit Crash-Recovery (per-Flight reset)
- Live-Sim-Inspector im Debug-Modus (MSFS SimVars/LVars + X-Plane DataRefs)
- METAR-Snapshots Dep/Arr automatisch beim Takeoff/Final
- Backend: Rust (Tauri 2, raw SimConnect FFI für MSFS, std::net für X-Plane UDP)
- Frontend: React 19 + TypeScript + Vite
- Persistence: OS-Keyring für API-Keys, JSON-Sidecars für Activity-Log + Active-Flight-State
- Updater: Tauri-Plugin-Updater mit Ed25519-Signatur, GitHub Releases als Source
- OurAirports — Public-domain Runway-Datensatz
- BeatMyLanding — Touchdown-Window-Calibration und Bounce-Detection-Pattern
- GEES — Open-Source-Landingrate-Logger; reverse-engineered für V/S-Sign-Convention und native Sideslip-Berechnung
- LandingToast — Live-VS-at-OnGround-Edge-Pattern
- Tauri 2 + Rust + React — App-Framework
- MSFS SDK + X-Plane SDK — Sim-Integration
# Voraussetzung: Rust toolchain, Node.js 20+, ggf. MSFS 2024 SDK für sim-msfs build
git clone https://github.com/MANFahrer-GF/AeroACARS.git
cd AeroACARS/client
npm install
npm run tauri dev # Dev-Mode mit Hot-Reload
npm run tauri build -- --bundles nsis # Release-Installer bauenTiefe Study-Level-Flugzeuge in X-Plane steuern Cockpit- und System-Funktionen oft über eigene DataRefs statt der Standard-sim/...-DataRefs. AeroACARS liest die Standard-DataRefs — bedient ein Add-on sie nicht, „sieht" AeroACARS z.B. die Flaps-Stellung nicht (Folge: LANDING CONFIG: INCOMPLETE, obwohl Flaps gesetzt waren).
Ab v0.12.1 wird ein nicht lesbarer Wert fair behandelt — Anzeige „nicht bewertbar" statt rotem Fehler, kein Punktabzug. Für eine echte, flugzeug-genaue Auswertung gibt es eine ausfüllbare Vorlage, mit der die add-on-eigenen DataRefs erfasst werden:
→ docs/xplane-aircraft-dataref-overrides.md
Wer ein Study-Level-Flugzeug fliegt: einmal die Tabelle mit dem DataRefTool ausfüllen und über den Issue-Tracker einreichen — dann kann das Flugzeug ein passendes DataRef-Profil bekommen.
Wenn AeroACARS sich komisch verhält und du dem Issue-Tracker etwas Substanzielles mitschicken willst — hier ist, was wo liegt.
Alle Dateien liegen unter dem Tauri-Standard-app_data_dir mit Bundle-ID com.aeroacars.app:
| Plattform | Vollständiger Pfad |
|---|---|
| Windows | %APPDATA%\com.aeroacars.app\ (typisch: C:\Users\<dein-user>\AppData\Roaming\com.aeroacars.app\) |
| macOS | ~/Library/Application Support/com.aeroacars.app/ |
In Windows kannst du den Ordner direkt mit Win+R → %APPDATA%\com.aeroacars.app öffnen. In macOS mit Finder → Cmd+Shift+G → den Pfad einfügen.
| Datei | Was es ist |
|---|---|
flight_logs/<pirep_id>.jsonl |
Per-Flug-Recorder — eine Zeile pro Event (Position, Phasen-Übergang, Touchdown-Score, METAR-Snapshot). Append-only JSONL, beste Quelle für „warum hat der Flug X gemacht?". Eine Datei pro PIREP. |
activity_log.json |
In-App-Activity-Feed — exakt die Zeilen, die im Cockpit-Tab erscheinen, persistiert über Restarts. |
active_flight.json |
Snapshot des aktuell laufenden Flugs für die Resume-Funktion. Existiert nur während ein Flug läuft. |
landing_history.json |
Historische Landungen für den „Landung"-Tab. |
position_queue.bin |
Offline-Backlog: Positionen die wegen Netzwerkproblemen noch nicht hochgeladen werden konnten. Wird automatisch geleert sobald wieder online. |
site.json, sim.json |
Lokale Settings (phpVMS-URL, gewählter Sim). Kein API-Key — der liegt im OS-Keyring. |
Der API-Key liegt nicht als Datei vor. Er wird über das OS-Keyring (Windows Credential Manager / macOS Keychain) gespeichert. Kein Plaintext auf Disk.
Die Rust-tracing-Ausgaben (HTTP-Requests, SimConnect-Status, Phasen-Berechnung im Detail) gehen aktuell nur auf stderr — sie landen nicht auf der Disk. Wenn du sie brauchst:
- Windows: AeroACARS aus einer PowerShell-Konsole starten:
& "C:\Program Files\AeroACARS\AeroACARS.exe"— dann erscheinen die tracing-Zeilen im Terminal. - macOS: Aus dem Terminal:
/Applications/AeroACARS.app/Contents/MacOS/AeroACARS
Verbosity-Level steuern via RUST_LOG:
# Standardmodus (info)
RUST_LOG=info ./AeroACARS
# Volles Debug für unseren Code, info für alles andere
RUST_LOG=info,aeroacars=debug ./AeroACARSWenn was schiefgeht, ist die wertvollste Info im Bug-Report:
- Die
flight_logs/<pirep_id>.jsonldes betroffenen Flugs (zippen, anhängen) - Der relevante Ausschnitt aus
activity_log.json - Falls reproduzierbar: ein paar Zeilen tracing-Output mit
RUST_LOG=info,aeroacars=debugaus dem Terminal-Run
Issues bitte über → github.com/MANFahrer-GF/AeroACARS/issues
MIT — siehe LICENSE.
Contact: Thomas Kant · German Sky Group · github.com/MANFahrer-GF