LiamDroog/mctl

Data

A retro mission-control style terminal display that tracks spacecraft orbits, passes and live ISS telemetry.

114
9
Rust
GPL-3.0
3 days old

What it does

mctl is a Rust spacecraft display that borrows the look of a retro flight-control monitor. It tracks the ISS, visiting Crew and Cargo Dragons, Hubble, JWST, Roman, Tiangong, and Voyager 1/2 and New Horizons, and presents a 3D orbit map, ground track, sky plot, pass predictions, a maneuver planner and live ISS telemetry (README). It is meant to be left running on a home screen; seven CRT-inspired themes and a low-resolution mode for a Raspberry Pi driving a composite CRT support that use case (README).

The display is split into function-key pages: MASTER (orbit and state), TRAJ (full orbit map and maneuver planner), live ISS subsystem telemetry, PASS (sky plot and observer sites), PROX (visiting-vehicle geometry), VIEW (Earth from the vehicle window), SYS (logs, settings, cautions) and OPS (JWST and Hubble schedules) (README).

Install and first run

Prebuilt tarballs for x86-64 and aarch64 are published in the releases. They target glibc 2.35, so Ubuntu 22.04, Debian 12 or newer is required; unpack one and run ./mctl. If a shared library is missing, the bundled packaging/bootstrap.sh can install it, and packaging/install.sh places the binary and a desktop entry in ~/.local (README).

To build from source on a fresh machine (README):

git clone https://github.com/LiamDroog/mctl
cd mctl
packaging/bootstrap.sh

bootstrap.sh checks for a C compiler, curl, window libraries, a Vulkan driver and Rust 1.95 or newer, asks before installing anything (apt, dnf or pacman; Rust via rustup), then builds and installs into ~/.local. Use --check or --dry-run to inspect without changing anything, or --no-system-packages to only report missing packages (README). Afterwards, run mctl for the console, or mctl --vehicle jwst --theme retrowave --fullscreen to pick a vehicle and theme; mctl check validates the config and fetches each data source once (README).

Raspberry Pi and CRT

mctl --kiosk is a separate unattended front end that cycles through vehicles and pages, scales the 640x480-oriented layout to the screen, and skips the CRT effects because the tube supplies them. Options cover dense console pages, random scene or vehicle order, theme cycling and --max-fps to reduce CPU use (README). Setup notes for composite output and cross-building are in docs/pi.md. A Pi 3B+ has no Vulkan GPU, so it renders in software at a modest frame rate (README).

Data sources and limitations

Element sets come from CelesTrak, ISS state from NASA's public ephemeris, ISS telemetry from the public ISSLIVE feed over Lightstreamer (an unofficial API that may change), Earth orientation from IERS/USNO, deep-space trajectories from JPL Horizons, and observing schedules from STScI; sky cutouts use DSS2 (README). Requests identify the client, revalidate with ETags and back off on failure. Values without a source show NO DATA.

The project is explicit that it is a hobby display, not for operations or navigation. Measurements are flagged [EST], [PLAN], [TLE], [SURVEY] or [NOW]; TLE-derived values are not trustworthy within about 5 km. Pass times were checked against an independent implementation to milliseconds but not against a published predictor (README). The numerical maneuver propagator diverges 3.1 km after a day without drag and 7.3 km with the simple drag model, measured against NASA's ISS ephemeris (README). ISS caution and warning limits are placeholders. Configuration overrides live in ~/.config/mctl/config.toml; cache, logs and a 30-day SQLite recording (capped at 2 GB) go under ~/.cache, ~/.local/state and ~/.local/share. There is no analytics, and the optional IP-lookup location feature is the only thing that sends information about the user (README).

mctl is GPL-3.0-or-later (LICENSE). The README states that most code was written with Claude and that only Kubuntu and a Pi 3B+ have been really tested (README).

HotRepo's take

mctl appeared on HotRepo's new Rust projects list on 2026-11-02, having gained 5 stars in the roughly two-hour window from 2026-11-01 22:45 to 2026-11-02 00:45 UTC; the same snapshot records 106 stars and 9 forks. The hourly samples over that span run 101 to 106 stars, so the available window is too short to say anything about sustained growth. What stands out technically is the split into six crates and the honest reporting of error margins, which gives readers a concrete basis for judging the display: it is a well-documented hobby instrument, not a precision tracking tool.

Written by AI from the project's README, updated . The project's own docs are the source of truth.

Hacker News

Mission-control style spacecraft tracker in Rust
▲ 1 · 0 comments · November 1, 2026