Acts as a bridge between golf launch monitors and simulation software. Connects to launch monitors, decodes shot data, and forwards it to integrations like GSPro. Provides a REST and WebSocket API for custom integrations to participate on the central event bus.
Beta (0.1.x) — The API, configuration format, and WebSocket protocol are usable but may still change. Breaking changes will be noted in release notes.
- Multi-device support
- Automatic detection mode switching based on club selection (full / chipping / putting)
- Dual UI: native desktop window (eframe/egui) and browser dashboard (WASM, same codebase)
- Configurable via TOML file with live settings updates
- REST + WebSocket API for external consumers — subscribe to shot data, device telemetry, and raw audit events in real time. Build custom shot triggers, data loggers, or alternative integrations without touching the core.
A single broadcast<FlighthookMessage> bus connects all components.
Each message carries a typed event and an optional raw payload (for debugging).
Session threads, integration bridges, and the web layer all subscribe to the same bus.
Third-party software can connect via WebSocket and interact with the bus the same way as any built-in integration.
Settings can be configured from the UI or file.
TOML file auto-created on first run at the platform config directory:
- Linux:
~/.config/flighthook/config.toml - Windows:
%APPDATA%\flighthook\config.toml - macOS:
~/Library/Application Support/flighthook/config.toml
[webserver.0]
name = "Web Server"
bind = "0.0.0.0:5880"
[mevo.0]
name = "My Mevo+"
address = "192.168.2.1:5100"
ball_type = 0 # 0 = RCT, 1 = Standard
tee_height = "1.5in"
range = "8ft"
surface_height = "0in"
track_pct = 80.0
[gspro.0]
name = "Local GSPro"
address = "127.0.0.1:921"Section prefixes encode component type: mevo, mock_monitor, gspro,
random_club. The index after the dot (0, 1, ...) identifies the
instance. Settings can also be edited live from the Settings tab in the UI.
- Rust toolchain
- Trunk (for WASM UI build)
wasm32-unknown-unknowntarget (rustup target add wasm32-unknown-unknown)- For Windows cross-compile:
mingw-w64(sudo apt install mingw-w64)
# Build everything (UI WASM + native binary)
make build
# Run with ~/.config/flighthook/config.toml
make run
# Run with a specific config
make run config=mock.toml
# Headless (web dashboard only, no native window)
make run headless=truemake deploy host=golfpc dir=Documentsflighthook [--config PATH] [--headless]
| Flag | Default | Description |
|---|---|---|
--config |
platform config dir (see below) | Config file path |
--headless |
off | Web dashboard only, no native window |
To run with a mock device, point --config at a TOML file with
[mock_monitor.0] sections instead of [mevo.0].
- docs/ARCHITECTURE.md — Multi-device config model, unified bus, threading, state machine, settings UI design.
- docs/API.md — REST and WebSocket API reference for the web
dashboard (
/api/status,/api/shots,/frp, etc.).
Mevo+ and FlightScope are trademarks of FlightScope (Pty) Ltd. ExPutt is a trademark of ExPutt Inc. GSPro is a trademark of GSPro LLC. flighthook is not affiliated with, endorsed by, or sponsored by any of these companies.



