Cross-platform GCS
for ArduPilot, PX4, CrabPilot.
Cross-platform GCS for ArduPilot, PX4, and CrabPilot. Mission planning, real-time telemetry, firmware flashing, MAVLink inspector, offline maps. Native Tauri 2 on Windows, macOS, Linux.
CrabStation
Dashboard preview coming soonFlies with your stack.
One GCS, three autopilots. ArduPilot, PX4, and CrabPilot share the same Vehicle abstraction — switch autopilots without switching apps.
ArduPilot
ArduPilot — 4.5+Copter, Plane, Rover, Sub, VTOL. ArduPilot 4.5+ tested in CI against every release.
Full parameter editor
Mission Planner-style waypoint UI
DataFlash log viewer
PX4
PX4 — 1.14+Copter, Plane, VTOL, Rover. PX4 1.14+ on the same Vehicle abstraction.
MAVLink v2 wire
Calibration wizards
Multi-vehicle ready
CrabPilot
Our Rust autopilotOur Rust autopilot. Parameter metadata bundled, identifies on heartbeat.
Same plan files as ArduPilot
Native firmware flash
End-to-end Rust stack
Mission planning, telemetry, MAVLink inspector, offline maps, firmware flash, log viewer.
From pre-flight planning to post-flight analysis — all in a native Tauri 2 app with no cloud dependency.
Mission planning
Waypoints, surveys, corridor scans, polygon fences. Drag-and-drop reorder.
Real-time telemetry
20 Hz attitude and position, 4 Hz battery and sensors. Hardware-accelerated Mapbox.
MAVLink inspector
Every message, decoded, with rate and size statistics.
Offline maps
Download regions ahead of the flight. SQLite tile cache, local tile server.
Firmware flash
ArduPilot, PX4, CrabPilot binaries. USB and bootloader detection.
DataFlash log viewer
Open, plot, export. Works on .bin and .tlog.
How it works
Typed IPC from React down to MAVLink wire. No hand-typed invoke strings — everything is generated from Rust.
Stack
React + MUI frontend
Mapbox + Zustandtauri-specta typed IPC
commands + events generated from RustRust backend
mavlink::connection_manager + crablink::VehicleMAVLink
Serial · TCP · UDPConnect a vehicle
All commands and events are generated from Rust via tauri-specta. The TypeScript caller is fully typed — no magic strings.
import { commands, events } from './bindings';
// Connect to a vehicle over UDP
await commands.connectUdp({ port: 14550 });
// Listen for heartbeat events
const unlisten = await events.heartbeatEvent.listen((ev) => {
console.log('System', ev.payload.systemId, 'alive');
});
// Arm and take off
await commands.armDisarm({ arm: true });
await commands.takeoff({ altitudeM: 10.0 });
// Cleanup
unlisten();Who flies with CrabStation
Hobby workshop
Connect a CubeOrange over USB, flash firmware, fly. No cloud account, no telemetry.
Field operations
Take offline maps to the site. Pre-build the mission, walk through the survey, hit start.
Research and teaching
Wire up a custom autopilot, inspect every MAVLink message, replay logs.
Open source. MIT licensed.
CrabStation is free to use, fork, and extend. The entire GCS stack — Rust backend, React frontend, and Tauri bridge — lives in the same public repo as the autopilot.
Native Tauri 2 app for Windows / macOS / Linux
Mobile in development (iOS, Android)
No telemetry, no account, no cloud
Full source on GitLab
Per-subsystem reference docs in the repo