Start
Install and run
Corvus ships as one self-contained app per platform. Download it, start it, and it is ready: Python, Qt and every library are already inside, and nothing else is installed on the machine.
Download the app
Every release on the GitHub releases page carries one file per platform. The file name carries the version.
| Platform | File | First launch |
|---|---|---|
| macOS 15 or later (Apple Silicon) | Corvus_GCS-<version>-macOS-arm64.dmg |
Open the disk image and drag Corvus GCS to Applications. The build is not notarized, so macOS blocks the first launch. Open System Settings, Privacy & Security and click Open Anyway, once. |
| Linux (x86_64) | Corvus_GCS-<version>-x86_64.AppImage |
Mark it executable (chmod +x) and run it. Works on a clean Ubuntu or Debian with no system Python or Qt. |
| Windows (x64) | Corvus_GCS-<version>-windows-x64.zip |
Unzip anywhere and run Corvus GCS.exe. The build is unsigned, so SmartScreen asks once: More info, then Run anyway. |
Instead of Open Anyway on macOS, you can clear the quarantine flag once in Terminal:
xattr -dr com.apple.quarantine "/Applications/Corvus GCS.app"
The Linux AppImage is built on Ubuntu 22.04 on purpose. An AppImage links against the C library of the machine it was built on, so building on an older release keeps it running on as many distributions as possible.
Starting with a port and a link
Normally you just open the app. To choose the local HTTP port and a MAVLink connection at startup, for a script or a field laptop that should always open the same radio, start it from a terminal. The first argument is the port, the second the connection string:
"/Applications/Corvus GCS.app/Contents/MacOS/corvus-gcs" 8000 serial:/dev/tty.usbserial-0001:57600
./Corvus_GCS-<version>-x86_64.AppImage 8000 udp:0.0.0.0:14550
& ".\Corvus GCS\Corvus GCS.exe" 8000 serial:COM7:57600
A connection given on the command line always wins over the automatic choice, because only a person types one. If the port is already taken, Corvus tries the next ones (up to twenty) rather than failing, and the port it ended up on is the one it reports. See Files, settings and variables for every connection string form.
On Windows the serial port is a COM name rather than a device
path. Pick it from the dropdown on the LINK tab and you never have to type
one. Ports past COM9 need the escaped form
\\.\COM12, which is what the dropdown fills in.
The first start
On a machine that has never run Corvus, a short setup opens over the map. It appears once and offers three ways on:
- Set up this station
-
Choose the colour theme, the units (metric, imperial, aviation, or each quantity on its own), how sensitive the flight review is (Relaxed, Normal or Strict), whether the Mission planner appears in the left rail, whether the MAVLink console and SSH tabs stay in the side panel, whether Corvus looks for updates, and which input controls the map carries (virtual joystick, USB gamepad, arrow keys, WASD keys; all off by default). Every choice shows immediately, and nothing is saved until you press Finish.
The flight review can be wrong, so check its plots and the aircraft yourself. Its sensitivity is explained on the Logs and Flight Review page.
- Import settings
- Take the settings, and plugins, from a file exported on another station. You pick which parts. See Export and import.
- Skip for now
- Start with the defaults.
Everything in it is under Settings afterwards. The interface size is not part of it: adjust that under Settings, Appearance.
Updates
Corvus compares its version with the published releases on GitHub and shows a notice when a newer one exists. Nothing is downloaded and nothing about your machine is sent. The check never runs while the aircraft is armed and fails silently with no internet. To update, download the new file and replace the old app. Your settings, logs, maps and plugins live in your home folder (see where Corvus keeps its files) and are not touched by an update.
Running from source
From a clone of the repository you need Python 3.12 or newer.
One command creates a virtual environment in .venv/, installs
every dependency named in pyproject.toml and opens the app:
./run.sh
./run.sh 8000 serial:/dev/ttyUSB0:57600 # with a port and a connection
Later starts reuse .venv/ and only reinstall when
pyproject.toml has changed, so relaunching needs no network. To
create the environment from a particular interpreter, point
CORVUS_PYTHON at it:
CORVUS_PYTHON=/opt/homebrew/bin/python3.12 ./run.sh
On a Linux desktop the dock and the applications grid find the app's icon through a launcher entry, and a source checkout has none until you add it:
./run.sh --desktop-entry
This writes ~/.local/share/applications/corvus-gcs-dev.desktop
with the paths of this checkout. Later runs keep it pointing at the checkout
if you move it. Delete the file to remove the entry.
For development you can run just the backend and open the interface in a normal browser:
.venv/bin/python serve.py # then open http://localhost:8000/
On Windows, from PowerShell:
py -3.12 -m venv .venv
.venv\Scripts\python -m pip install --upgrade pip
.venv\Scripts\python -m pip install --group dev
.venv\Scripts\python corvus\app.py
Every Python package the project uses, for running, testing, linting and
building, is listed in the [dependency-groups] of
pyproject.toml and nowhere else. To build the standalone apps
yourself, see Build the apps.
Quitting
Close the window, or press Ctrl-C in the terminal it was started from. Either way Corvus stops every connection, thread and child process it started, and flushes and closes its logs, so a laptop can be shut down right after. A crash or a forced quit leaves nothing behind that the next launch would have to clean up.