karim 033a9d406a G1000: manual-accurate radios, baro units, declutter, minimums, OBS, audio panel
Aligned to the official X-Plane 1000 manual:
- NAV radio: active RIGHT / standby LEFT (boxed) per S.12 (COM already correct)
- ALT UNIT softkey (IN / HPA) in the PFD submenu, baro readout converts (S.20)
- DCLTR cycles 3 levels (land / +NDB / flight-plan only) with DCLTR-n label (S.56)
- TOPO and TERRAIN are now independent toggles (relief vs awareness overlay) (S.57)
- Barometric MINIMUMS: BARO MIN bug + readout on the altimeter, amber "MINIMUMS"
  annunciation at/below the decision altitude; set via TMR/REF (lifted to App)
- OBS mode: HSI course follows the CRS knob (magenta "OBS"), sequencing suspended
- New Audio Panel tab (COM mic/receive, MKR/DME/ADF, intercom, Display Backup) (S.91)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 05:55:56 +02:00

X-Plane Glass Cockpit (Web)

Bring X-Plane 12 instruments — a G1000-style PFD, an MFD, and an autopilot panel — to any iPad, tablet or laptop on your network. Pure web, no app install on the tablets. Just open a browser.

 X-Plane 12          Node bridge (this repo)            your devices
 ┌──────────┐  ws    ┌────────────────────┐   ws/http   ┌──────────┐
 │ Web API  │◀──────▶│ resolves dataref    │◀───────────▶│  iPad    │
 │ :8086    │  REST  │ IDs, streams values │             │  laptop  │
 │ (local)  │        │ serves the React UI │             │  phone   │
 └──────────┘        └────────────────────┘             └──────────┘
                          binds 0.0.0.0:8080

Why a bridge?

X-Plane's built-in web server (v12.1.1+) only listens on localhost, dataref IDs change every session, and CORS blocks browsers. The bridge runs on the same PC as X-Plane, talks to it locally, and re-broadcasts everything to your LAN — to as many tablets as you like at once.

Requirements

  • X-Plane 12.1.1 or newer (the web API ships built-in; nothing to enable).
  • Node.js 18+ on the PC running X-Plane (node --version).

Setup (run these on the X-Plane PC)

cd X-PLANE-MOD
npm install        # also installs the web app's deps
npm run build      # builds the React UI into web/dist
npm start          # starts the bridge on http://0.0.0.0:8080

Open it

  1. Make sure X-Plane is running and you're in a flight.
  2. On a tablet/laptop on the same Wi-Fi, open: http://<PC-LAN-IP>:8080
    • Find the IP: macOS ipconfig getifaddr en0 · Windows ipconfig (IPv4).
  3. The status pill top-right shows X-PLANE (green) when data is flowing, NO SIM if the bridge is up but X-Plane isn't reachable, OFFLINE if the tablet can't reach the bridge.
  4. Tip: on iPad, "Add to Home Screen" → it opens full-screen like a real app.

Development (hot reload)

npm run dev:bridge   # terminal 1 — the bridge on :8080
npm run dev:web      # terminal 2 — Vite dev server with HMR (proxies to bridge)

Open the URL Vite prints. Edits to web/src/** reload instantly.

Configuration

All env vars are optional (defaults shown):

Var Default Meaning
BRIDGE_PORT 8080 Port the UI/LAN server listens on
XPLANE_HOST localhost Where X-Plane's web API is
XPLANE_PORT 8086 X-Plane web API port

Adding instruments / datarefs

Everything is driven by server/config.js:

  • DATAREFS — values streamed to the UI (alias → sim/... name).
  • WRITABLE_DATAREFS — values the UI may set (knobs/bugs).
  • COMMANDS — buttons the UI may press (mode toggles).

Add a sim/... name there, then read values.<alias> in any component. For G1000-specific gauges, add that aircraft's laminar/... or sim/cockpit2/... datarefs the same way.

Notes & limits

  • Update rate is X-Plane's (~1020 Hz) — fine for instruments, this isn't a scenery stream.
  • The autopilot buttons fire X-Plane's own commands, so the sim stays the source of truth. Mode-highlight bits (AP_BITS in AutopilotPanel.jsx) are best-effort and can differ per aircraft.
  • LAN only by design. Don't expose port 8080 to the public internet.
S
Description
X-Plane G1000 web cockpit + desktop launcher
Readme 897 KiB
2026-06-01 17:19:08 +02:00
Languages
JavaScript 74.4%
CSS 17.9%
Lua 3%
Rust 2.5%
HTML 1.3%
Other 0.9%