Software for observing and controlling McGill Rocket Team rocket and electrical ground-support equipment. It provides local telemetry monitoring, command control, video, maps, simulation, and mission-data recording through Yamcs.
Install Docker Desktop and
start it before running Tilt. Use mise as the preferred
version manager; the repository's .tool-versions defines the required Node.js,
pnpm, Java, Maven, and Tilt versions.
On macOS, install mise with Homebrew:
brew install miseOn Windows, install Git,
Python 3 (with python on your
PATH), and mise with winget.
In PowerShell, with Docker Desktop running, install mise:
winget install jdx.miseOpen a new PowerShell window and activate mise for that session:
(&mise activate pwsh) | Out-String | Invoke-ExpressionOn either platform, clone the repository and install the toolchain and dependencies in the same terminal:
git clone https://github.com/McGillRocketTeam/ground-station.git
cd ground-station
mise install
corepack enable
pnpm install
pnpm build
Copy the backend's .example.env file to .env.
On MacOS/Linux:
cp apps/backend/.env.example apps/backend/.envOn Windows:
Copy-Item -Path "apps/backend/.env.example" -Destination "apps/backend/.env"On Windows, run the Tilt commands below in PowerShell so Tilt uses the Windows-specific local resources.
Tilt orchestrates the local development environment. The default stack starts
the frontend, Yamcs backend, MQTT broker, offline map server, and shared
yamcs-effect package watcher. The frontend is available at
http://localhost:5173 and Yamcs at http://localhost:8090.
# Core local stack
tilt up
# Core stack with simulated telemetry
tilt up -- --simulator
# Core stack with the media backend, media frontend, and MediaMTX
tilt up -- --media
# Full local development stack: core, simulator, and media
tilt up -- --simulator --media
# Core stack with the NetBird remote-network resource
tilt up -- --remote
# Use random simulator data instead of the default incremental data
tilt up -- --simulator --simulator_data_mode=random
# Connect to an existing MQTT broker instead of starting the local broker
tilt up -- --mqtt_broker_url=mqtt://broker.example:1883
# Include EcoFlow BLE-to-MQTT publishing
tilt up -- --ecoflow_mqtt --ecoflow_user_id=YOUR_USER_IDThe EcoFlow stack also accepts --ecoflow_ble_address, --ecoflow_mqtt_host,
and --ecoflow_mqtt_port. Use --environment=development or
--environment=production to choose the frontend environment; production is
the default. Stop the environment with tilt down.
For focused work without Tilt:
pnpm --filter @mrt/frontend dev
YAMCS_INSTANCE=launch-canada pnpm --filter @mrt/simulator dev
pnpm check-types- Architecture overview: system responsibilities, deployment model, and design principles.
- Ground-station hardware and backend details: field topology, equipment, and Yamcs links.
- ASTRA protocol: MQTT topics, telemetry, commands, and acknowledgements.
- LabJack code walkthrough and test reports: device-specific implementation notes.
- Ground-station glossary: names and terms used by this project, with links to the detailed documentation.
- Contributor instructions: repository development conventions.
- Use Conventional Commits for pull-request titles.
- Squash commits when merging pull requests.
- Pull-request descriptions must be written by a human. If AI assistance is necessary, its text must follow the ASD-STE100 Simplified Technical English standard and be reviewed by the author.
This is a guide to where code lives. For how the services fit together, see the architecture overview; for unfamiliar names, see the glossary.
| Location | What lives there |
|---|---|
apps/frontend/ |
Main operator GUI: dashboards, procedures, export, and flight review. |
apps/backend/ |
Yamcs mission configuration and device integrations. |
apps/media-frontend/, apps/media-backend/ |
Media overlays and production-feed state. |
apps/simulator/, apps/ops-simulator/ pnpm |
Telemetry and ground-operations simulation. |
apps/ecoflow-mqtt/ |
EcoFlow battery telemetry bridge. |
apps/xtce-generator/ |
Yamcs mission-definition generator. |
apps/tui/ |
Terminal UI. |
packages/yamcs-effect/, packages/yamcs-procedures/ |
Shared Yamcs client code and procedure definitions. |
packages/media-state/, packages/map-style/, packages/landing-prediction/ |
Shared media state, map styling, and landing prediction. |
docs/ |
Architecture, protocol, device, and test documentation. |
docker/, Tiltfile |
Container configuration and the local development stack. |
pnpm-workspace.yaml |
The apps/* and packages/* workspaces. |
For GUI work, start in
apps/frontend/src/pages/for pages andapps/frontend/src/components/router/router.tsxfor routes. Dashboard panels live inapps/frontend/src/cards/;apps/frontend/src/lib/cards.tsregisters them, andapps/frontend/src/components/dashboard/contains the controls and forms used to add and configure them. Reusable UI components live inapps/frontend/src/components/ui/. For example, the Text Card is defined inapps/frontend/src/cards/text-card.tsxand can be added through the dialog inapps/frontend/src/components/dashboard/plus.tsx.
Copyright (c) 2026 McGill Rocket Team. Unless a component carries a different notice, MRT-authored source code in this repository is available under the permissive MIT License. Distributions containing copies or substantial portions of that code must retain the MRT copyright and license notice.
The org.yamcs.mqtt integration in apps/backend is an
exception. It contains modified source code derived from Yamcs
MQTT, developed by the Yamcs team and
contributors. That directory, including MRT's modifications and additions to
the derived integration, is distributed under the GNU Affero General Public
License, version 3 (AGPL-3.0-only). Its
corresponding source and revision history are available in this repository.
Building or distributing the backend together with the AGPL-covered integration may subject the combined work to the AGPL. Third-party dependencies and vendored components retain their own license terms and notices.