ProVPilot

Swiss VFR Flight Simulator
macOS Windows

Fly real Switzerland.
From 1 m of terrain to the rivets on a Cessna.

ProVPilot is a free, open-source flight simulator built on JSBSim flight dynamics and the Godot engine, with photoreal Switzerland and Baden-Württemberg scenery sourced directly from swisstopo and LGL BW. Hop in the Cessna 172, pick an airport, and go.

ProVPilot screenshot 1 ProVPilot screenshot 2 ProVPilot screenshot 3 ProVPilot screenshot 4

What is ProVPilot?

A no-friction VFR flight simulator focused on the Alps and Central Europe. The goal: accurate 6-DOF flight physics in a faithful Cessna 172, flown over the actual Swiss landscape — same terrain elevations, same orthophotos, same buildings, roads, rivers, and airports as the real world — all streamed at runtime from a custom C++ Godot extension.

Originally a Godot 3 demo by chunky/jsbgodot, ProVPilot has been rewritten from the ground up for Godot 4.6 with a custom double-precision engine fork — no floating-origin tricks, no jitter at coordinate extremes, and a 200 km+ visible horizon for Alpine panoramas.

Real-world terrain

swisstopo swissALTI3D elevation at 1 m resolution, streamed as 1024 × 1024 m float32 tiles with distance-based LOD.

Photoreal orthophoto

SWISSIMAGE aerial photography mapped per tile with a mip pyramid for far-LOD. Mountains look like mountains.

3D buildings

swissBUILDINGS3D models with per-building detail meshes and a merged far-LOD handoff. Cities have skylines.

Roads, rail & water

swissTLM3D road, railway and waterway network rendered as ribbon meshes. Follow the autobahn home.

JSBSim flight dynamics

Full 6-DOF simulation. Faithful Cessna 172 model with mixture, magnetos, carb heat, prop pitch and trim.

47 Swiss airports

OSM-verified runway geometry. Welcome screen picker — pick LSZH, LSGG, LSPF, LSZB and more in one click.

Gamepad & joystick

Plug-and-play SDL gamepad mapping plus per-axis calibration (min/center/max, invert, deadzone, response curve).

Free & open source

MIT licensed. Code on gitlab.md80.ch. Scenery under the respective free-geodata licenses (swisstopo, LGL-BW, OSM).

Installation

The app itself is a small download (~150 MB). Scenery data is huge (~165 GB for full coverage) and is installed separately from inside the app — pick the regions and quadrants you actually want to fly over.

macOS Apple Silicon

  1. Download the latest ProvPilot-x.y.z-arm64.dmg from the button at the top of this page.
  2. Open the DMG and drag ProvPilot.app into your Applications folder (or anywhere else).
  3. The build is signed and notarized, so first launch from Finder works without right-click → Open.
  4. On first launch, open Settings → Download Scenery and grab Switzerland (base) at minimum. The base pack (~44 GB) gives you terrain, roads, water and airports — flyable on its own. Add the four detail quadrants (orthophoto + buildings + trees) for the corners you actually fly in.
  5. Pick an airport in the welcome screen and click Fly!

Requirements: macOS 12+, Apple Silicon (M1 or newer), ~200 GB free disk for full Switzerland + Baden-Württemberg scenery.

Windows x86_64

  1. Download the latest ProvPilot-Windows-x.y.z.zip from the button at the top of this page.
  2. Right-click the ZIP → Properties → tick Unblock → OK. Then extract it somewhere you can write to (e.g. C:\Users\<you>\ProvPilot\not Program Files).
  3. The build is not signed yet. Windows SmartScreen may show "Windows protected your PC" the first time. Click More infoRun anyway.
  4. Launch ProvPilot.exe.
  5. Open Settings → Download Scenery and grab at least Switzerland (base). Same two-tier model as on macOS.
  6. Pick an airport and click Fly!

Requirements: Windows 10/11 x64, dedicated GPU with Vulkan support recommended, ~200 GB free disk for full scenery.

Trouble? Logs are written to %APPDATA%\Godot\app_userdata\ProVPilot\logs\godot.log — send the file with any bug report.

Default controls

ProVPilot ships with a standard SDL gamepad mapping (Xbox / DualShock layout) and a full keyboard fallback. Every joystick axis is rebindable and calibratable in Settings → Joystick.

Flight

ActionGamepadKeyboard
Pitch (elevator)Left Stick YW / S
Roll (aileron)Left Stick XA / D
RudderRight Stick XQ / E
Throttle upRight TriggerNumpad +  /  T
Throttle downLeft TriggerNumpad −  /  Shift+T
Flaps up / downD-pad Up / DownF / V
BrakesA ButtonB
Trim up / downY / X Button
Mixture richer / leanerM / Shift+M
Magnetos clockwise / CCWI / Shift+I
Slew mode (reposition)Shift+Y
Return to welcome screenEscape

Camera

ActionGamepadKeyboard
Switch view (cockpit / orbit / chase)Select / BackC
Head look (cockpit) / camera adjustD-padArrow Keys
Zoom in / outL1 / R1 (Shoulders)Page Up / Page Down

Slew (free repositioning)

ActionGamepadKeyboard
Move horizontalLeft StickW / A / S / D
Move verticalRight Stick YQ / E
Rotate (yaw)Right Stick X
Fast movementHold Shift
Exit slewShift+Y

Cockpit interaction

Switch to the cockpit camera (C) and click-drag the mixture lever, throttle, flap lever or magneto/ignition switch with the mouse. Levers track the pointer with visual feedback.

Half-axis joysticks (e.g. Logitech Dual Action) work too — rebind the offending axis in Settings → Joystick or fall back to the keyboard.

Scenery coverage

Scenery is split into one base pack per region (terrain, roads, water, airports — flyable on its own) and four detail quadrants (NW / NE / SW / SE) containing the heavy assets (orthophoto, buildings, trees). Install only the corners you actually fly in.

Use the in-app downloader: Settings → Download Scenery. Packs are sha256-verified and extracted to a folder of your choice.

In-app scenery downloader — region list In-app scenery downloader — progress

Cantons coloured green have base + detail scenery available today. Coverage currently includes all of Switzerland and Baden-Württemberg. Click any canton for details.

Direct downloads

The in-app downloader is the recommended path — it streams these same packs, sha256-verifies each one and extracts to a folder you pick. If you prefer to grab them by hand (slow link, mirror, offline install), here are the canonical URLs. Each base pack is flyable on its own; add the detail quadrants (NW/NE/SW/SE) for the corners you actually fly in.

RegionPackSizeSHA-256
Switzerland base — terrain, roads, water, airports 43.7 GiB 769fa57d…1dfa071d
detail — North-West (orthophoto + buildings) 12.0 GiB 6080ede5…12518393
detail — North-East 14.6 GiB fdef98c7…58364886
detail — South-West 11.5 GiB 2421b77b…0f71d281
detail — South-East 7.5 GiB 88cb9c89…4484ecda
Baden-Württemberg base — terrain, roads, water, airports 34.8 GiB af5dba5f…8c4935cf
detail — North-West 10.9 GiB e4d7f1f8…42c5353
detail — North-East 12.0 GiB 27baea7c…46cf781f
detail — South-West 8.8 GiB 9c749a28…9f2d33ad
detail — South-East 9.2 GiB 2819502f…630b9925

Live manifest with the exact byte counts and full hashes: scenery_manifest.json. The in-app downloader uses this same file.

Release notes

Latest builds are linked from the download buttons above.

v1.0.8 — Scenery precision pass: draping, alignment, distant terrain

June 2026

  • Rivers & lakes no longer drape or float — Swiss water bodies that used to hover above (or cut through) the ground now sit flush on the terrain. The runtime drape heuristic was mis-flagging legitimately-sloped Alpine rivers as bake errors; it now inspects each triangle individually, so genuine sloped water stays put while the rare corrupt tile is still corrected.
  • Roads & railways hug the ground — baked roads were rendered a fixed step above the bare-earth terrain, so at taxi height the aircraft appeared to drive underneath them. Roads are now dropped to sit flush, while bridges and embankments keep their real height.
  • Aircraft sits correctly on the terrain — the near-field terrain mesh now renders at full resolution and block-averages coarser tiles, so the visible ground matches the surface the flight model rides on. No more sinking into, or hovering above, the ground on steep terrain.
  • Distant scenery is back — the low-resolution mountain panorama (e.g. the Alps seen from the northern plateau) is rendered again. A streaming bug was silently discarding every far-terrain chunk before it could load; the horizon now fills in properly.
  • Terrain Distance setting now works — the Settings → Terrain Distance slider was previously saved but never applied. It now controls how far the full-detail terrain ring extends.
  • Orthophoto tile seams removed — photoreal tiles are now clamped at their edges, eliminating the thin seams that appeared between adjacent tiles at distance.
  • macOS: buildings, roads and rivers render again — the 1.0.7 macOS build shipped an out-of-date scenery engine, so the release app showed only terrain and orthophotos. The build pipeline now always rebuilds the scenery engine from source, so 3D buildings, roads/rail and rivers & lakes appear for both Switzerland and Baden-Württemberg.

v1.0.6 — Pilatus PC-7, retractable gear animation, rolling wheels

May 2026

  • Pilatus PC-7 Turbo Trainer — a second aircraft joins the Cessna 172. Swiss-built tandem trainer with its own JSBSim flight model, cockpit and exterior, selectable from the welcome screen.
  • Animated retractable landing gear — the PC-7 gear now plays a proper Blender retract/extend animation (legs fold, then the nose-wheel bay doors close). Toggle with G; the cycle holds at the end and only reverses on the next toggle.
  • Rolling wheels — the PC-7 main and nose wheels now spin up with ground speed (driven by JSBSim) and stop once airborne, with correct per-wheel rotation direction. Nose-wheel steering tracks the rudder on the ground.
  • Scenery trees — low-poly vegetation is now part of the distribution.
  • Windows scenery now matches macOS — the Windows portable build previously started over empty terrain and was missing buildings, roads, railways and water. The streaming tile manager now reads the current 2 m/px terrain tiles correctly, and the building, road and water managers are always created so the runtime scenery library populates them on Windows. Terrain, photoreal orthophotos, 3D buildings, roads/rail and rivers & lakes all load for both Switzerland and Baden-Württemberg.

v1.0.4 — Scenery distribution, in-app downloader, Windows portable build

May 2026

  • In-app scenery downloaderSettings → Download Scenery fetches base + detail quadrants from md80.ch, verifies sha256 and extracts into a folder you pick. No more manual ZIP wrangling. Direct URLs are also listed below the coverage map for offline / mirror use.
  • Portable install — shared provpilot.cfg next to the executable, on-disk aircraft tree, and a runtime GLB load-from-PCK fallback. Drop the folder anywhere (or onto a USB stick) and it just runs; settings travel with it.
  • Windows portable build — the Windows ZIP is now a self-contained portable install with the same layout as macOS. Extract anywhere writable, double-click ProvPilot.exe.
  • Memory-leak fix in the streaming tile manager — rapid airport teleports no longer leak chunk-zone tiles. Previously tiles.size() would climb from ~10k to >30k after a handful of jumps, dragging FPS into single digits and inflating elev_db, render objects and GPU memory unboundedly. The chunk-zone unload path now also drops tiles whose covering chunk is no longer tracked.
  • Bodensee water flattened — baked water tiles whose vertex Y-span exceeds 30 m (a known bake bug in the Bodensee interior quads, where a single 4-vertex polygon shipped with corners from +5 m to +269 m) are now re-draped from the elevation database at runtime. The dark wing over Altenrhein is gone.
  • 2 GiB download fix — the downloader now uses the on-disk file size for progress, working around an HTTPRequest int32 overflow that broke progress display past 2 GiB.
  • Continue Flight — the welcome screen now offers a green Continue button to jump back into your last session after pressing Esc.
  • About dialog with full credits and third-party licenses (Godot 4.6, JSBSim, Scenery3D, swisstopo, LGL-BW, OpenStreetMap, Cessna 172 model).
  • Scenery split into per-region base packs and four detail quadrants — install only the corners you fly in.
  • Welcome and settings screens now anchor and scale to the full viewport, so they work on 4K and ultrawide monitors.
  • HUD labels reorganised into a clean bottom row; cleared hard-coded dev-machine scenery paths from node_3d.tscn.
  • Per-second diagnostic snapshot in the log (jump count, tile / elev_db / chunk counts, GPU memory) for fast triage of regressions.
  • Project bumped to 1.0.4, version label now read from project.godot at runtime.

v1.0.1 — First notarized macOS release

March 2026

  • Signed & notarized macOS DMG (Apple Silicon).
  • JSBSim aircraft & engine data bundled inside the app; fixed duplicate-scenery scan on APFS volumes.
  • FSX-style Scenery Library manager with per-folder enable/disable and white-pixel border fix at the CH/DE seam.
  • User-configurable joystick bindings & calibration (half-axis throttle, deadzone, invert).
  • Migrated distant terrain from Terrain3D to the in-house Scenery3D GDExtension; load progress surfaced on the loading screen.
  • Clipmap streaming + zero-copy terrain rebase eliminate the old ghost-tile bug.
  • Interactive cockpit: mixture, throttle, magneto switch.
  • Orthophoto aerial imagery layer.
  • First Windows x86_64 build with a packaged ZIP, build script and loading-screen fix for cold starts on Windows.
  • Default startup map switched to OpenStreetMap only (swisstopo tiles load on demand).
  • Windows download button added to the website; latest.json now drives both platforms.