karim b05ffedbc1 Citation X cockpit profile: full Primus 2000 suite (PFD/MFD/EICAS/AP/RMU)
Add a switchable cockpit-profile selector (Garmin G1000 / Cessna Citation X /
GA steam) and recreate the Citation X Honeywell Primus 2000 avionics line-for-
line from the X-Plane Citation X + FMS manuals:

- CitPFD: attitude w/ FD command bars, speed tape (Vmo barber-pole, Vfe, low-
  speed red/amber bands), AOA index, altitude tape + trend, VSI, round HSI with
  CDI/course pointer + VOR/ADF bearing pointers, radar altimeter, minimums,
  STD/BARO/CRS/HDG bezel.
- CitEICAS: twin FAN%/ITT bar gauges, OIL °C/PSI, FUEL (flow/qty PPH·LBS),
  ELECTRICAL, HYDRAULICS, slat chevron, STAB trim, FLAPS, CAS message stack,
  softkeys NORM/FUEL-HYD/ELEC/CTRL-POS/ENG + control-position overlay.
- CitMFD: Honeywell heading-up arc map, FMS route (magenta active/white future),
  TCAS, terrain/WX, range arc, ETE/SAT/TAS/GSPD block, clock + ET/FT timer,
  V-SPEEDS reference card, MFD-setup overlays (TRAFFIC/TERRAIN/APTS/VOR).
- CitAP: HDG/NAV/APP/BC · ALT/VNAV/BANK/STBY · FLC/C-O/VS · pitch wheel ·
  AP/YD/M-TRIM/PFD-SEL, FMA bar + lamps from per-mode *_status datarefs.
- CitRMU: COM/NAV active+standby tuning, transponder, ADF, TCAS range/mode,
  IDENT + Nav Source Selector (NAV1/2/FMS, VOR/ADF/FMS bearing source).

Integration: all avionics stream live via the X-Plane Web API (new datarefs for
N1/N2/ITT, radar-alt, AOA, hydraulics, trim, flaps/slats/gear, control
positions, ADF, mach, yaw-damper); the existing fms-sync.lua drives the
Citation's built-in FMS (aircraft-agnostic XPLM FMS SDK). Demo seeds added so
every panel renders offline. Verified headless via Playwright (no console
errors; G1000/GA profiles unaffected).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 12:09:55 +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 1.6 MiB
2026-06-03 22:28:31 +02:00
Languages
JavaScript 75.1%
CSS 15.1%
Lua 3.9%
Rust 2.2%
Shell 2.2%
Other 1.5%