A lightweight terminal dashboard for Digital Combat Simulator (DCS) telemetry, built with Rust. It streams live aircraft data from DCS into a terminal user interface (TUI) using ratatui.
- Live telemetry display from DCS (position, IAS, TAS, Mach, attitude, acceleration).
- Engine/system stats: RPM, throttle, temps, fuel flow, nozzle %, manifold pressure (where available).
- Airframe stats: gear, flaps, airbrake, hook, wingsweep, WoW.
- Auto-hides values not exposed by the current module; missing values show as
---. - Real-time sparklines for IAS and altitude (scroll left-to-right, rightmost is latest value).
- Async UDP listener for high-frequency data (~10 Hz).
- Clean TUI layout with
ratatuiandcrossterm. - Cross-platform and minimal dependencies.
Depending on the aircraft module, the exporter sends:
| Signal | Meaning |
|---|---|
| RPM % | Engine spool speed as % of max |
| THR % | Pilot throttle input (estimated from RPM if not exposed) |
| TEMP | Exhaust/inter-turbine temperature |
| FF | Fuel flow |
| NOZ % | Afterburner nozzle area (jets with AB) |
| MAP | Manifold pressure / torque (props) |
| Gear | Gear position (0–1) |
| Flaps | Flaps position (0–1) |
| Airbrk | Airbrake position (0–1) |
| Hook | Tailhook position (carrier aircraft) |
| Wing | Wing sweep (e.g., F-14) |
| WoW | Weight on wheels indicator |
Some aircraft will not provide all of these signals; the dashboard adapts accordingly.
- DCS Export Script: Custom
Export.luain yourSaved Games/DCS/Scriptsfolder sends telemetry as JSON over UDP. - Rust Backend: Listens on UDP, parses JSON telemetry.
- TUI Frontend: Displays live flight and systems data and graphs in terminal.
- Rust (edition 2021 or later)
- Digital Combat Simulator with LuaSocket (shipped with DCS)
- Terminal with UTF-8 support
Clone the repository and build:
git clone https://github.com/ASoldo/dcsctl.git
cd dcsctl
cargo build --releaseCreate Saved Games/DCS/Scripts/Export.lua with the following (ensure Scripts folder exists):
-- Lua export code (see repository for full script)
-- Sends flight, engine, and mech telemetry as JSON via UDP to 127.0.0.1:5010 at 10 Hz.
-- Includes RPM, throttle, temps, fuel flow, nozzle %, MAP (if available), gear, flaps, airbrake, hook, wing, WoW.Refer to the repository for the full script with normalization helpers.
Run the Rust dashboard:
cargo run --releaseBy default it listens on 127.0.0.1:5010. Override with PORT env var:
PORT=6000 cargo run --releaseLaunch DCS and start a mission. Telemetry should appear in the terminal with live updates.
Ctrl+C,q, orEscto quit.
DCS Dash — Airframe: Su-25T POS: 43.72221, 44.03159
IAS: 279.6 kt ALT: 2999 m Mach: 0.51
AoA: 0.00° Pitch: 0.00° Bank: 0.00°
RPM/Throttle/Systems panels, IAS & Altitude sparklines
Dependencies:
- tokio for async networking
- ratatui for TUI widgets
- crossterm for terminal control
- serde and serde_json for parsing telemetry
cargo run --release --features wacom
# or
WACOM_EVENT=/dev/input/event29 cargo run --release --features wacomExtend the Lua export with additional LoGet* values and update Rust structs/UI rendering accordingly. Normalization helpers for engine and mech systems are already provided.
MIT License. See LICENSE for details.