Flightops is in beta (0.2.0b1) for invited ROS 2 teams. You need the license key from your beta email; register if you have none. Choose the build that matches your Ubuntu and ROS 2 installation. Flightops does not install ROS 2.
| Your system | Build |
|---|---|
| Ubuntu 22.04, x86_64, system Python 3.10, ROS 2 Humble | Humble build |
| Ubuntu 24.04, x86_64, system Python 3.12, ROS 2 Jazzy | Jazzy build |
The installer needs no sudo, source checkout, Cargo or GitHub access. It installs Flightops into ~/.local/share/flightops and puts its commands in ~/.local/bin. The release notes list the exact release of each build.
Install the matching ROS 2 desktop distribution first. The first-steps demo uses demo_nodes_cpp. Source your ROS setup file in every terminal where you run Flightops or ROS commands. If your project has a workspace overlay, source its install/local_setup.bash after the ROS underlay.
Install on Ubuntu 22.04 with ROS 2 Humble
Follow the official Humble installation instructions if ROS 2 is not installed. Then, as your ordinary user, run the commands from the install page. Stop if a command fails:
source /opt/ros/humble/setup.bashCopy the Humble command from the install page and run it. It downloads the Humble installer (install-humble-….sh) and runs it. Then:
export PATH="$HOME/.local/bin:$PATH"
flightops --versionThe installer checks your Ubuntu version, Python and ROS, then shows the FlightOps beta terms (source repository) and asks you to type yes. Only then does it download the pinned archive, and it checks the archive's size and SHA-256 before it installs anything. It records the accepted terms version in ~/.config/flightops/terms-accepted, so a later install of the same version does not ask again. Without a terminal (for example in a provisioning script), read the terms first and set FLIGHTOPS_ACCEPT_TERMS=1 or pass --accept-terms:
FLIGHTOPS_ACCEPT_TERMS=1 bash flightops-install.shInstall on Ubuntu 24.04 with ROS 2 Jazzy
Follow the official Jazzy installation instructions if ROS 2 is not installed. Source Jazzy before you run the installer, so that its Python packages are available. Then run the commands from the install page:
source /opt/ros/jazzy/setup.bashCopy the Jazzy command from the install page and run it. Then:
export PATH="$HOME/.local/bin:$PATH"
flightops --versionActivate this device
Every installed command except --help, --version and the license and installer commands needs an activated device. Activation needs the internet once:
flightops license activateRead the usage-metrics notice (the 0.2.0b1 builds title it "Flightops beta terms"), type yes, then paste the key from your email at the hidden prompt. For scripts, --key-file and other options, see the license reference.
Confirm the installation and ROS discovery
flightops --verify
flightops doctorflightops --verify checks the managed installation. flightops doctor checks the terminal, ROS environment and discovery, and writable session storage. It should show the expected ROS distribution and domain. A count of zero nodes is normal if no nodes are running. If ROS is installed but not sourced, source its setup file or run flightops setup to choose a detected installation. The system Python minor must match the build and the ROS installation.
Continue with first steps to attach to a demo node. For installation failures, use troubleshooting.
What the install contains
| Command | Purpose |
|---|---|
flightops | the terminal, launch, doctor, results, recording, history, AI, docs, license, telemetry, workbench |
onscope, splashdown, lcc (also launchcommit), highbay | component tools (index) |
flightops-mcp, flightops-results, flightops-tui, flightops-service | MCP server, results viewer, advanced subcommands, Scene Workbench service |
flightschool | installs the ROS 2 skills for coding agents |
flightlead | coordinator directory for coding agents (preview) |
flightops-gym-smoke | one local Gym smoke run (research preview) |
The install also holds the Scene Workbench app (flightops workbench), the offline documentation (flightops docs --open), two Nav2 sample recordings (flightops workbench --sample), and the project license and third-party notices.
Some features need packages that Flightops does not install:
| Feature | Install |
|---|---|
| Scene Workbench on a minimal system | sudo apt install libxkbcommon-x11-0 libxkbcommon0 libxcb1 libfontconfig1 libfreetype6 and a Vulkan or OpenGL driver |
| Recording to MCAP on Humble | sudo apt install ros-humble-rosbag2-storage-mcap (Jazzy includes it) |
Graph images in onscope debrief | sudo apt install graphviz |
Containers for highbay and lcc container stages | Docker Engine, with your user in the docker group |
| ChatGPT account route (preview) | sudo apt install bubblewrap and the pinned Codex runtime (AI connections) |
flightlead | tmux, git and a coding agent such as Claude Code or Codex |
flightops-gym-smoke | /dev/kvm, QEMU, a readable x86_64 kernel and static BusyBox (Gym (source repository)) |
Change or remove an installation
The managed commands live in ~/.local/bin. Installation does not edit shell startup files; add that directory to your PATH in future shells if needed. A newer compatible archive keeps configuration, the license and saved evidence. The managed command offers:
flightops --list
flightops --verify
flightops --rollback
flightops --uninstallThese work without an activated device. Use flightops --rollback --version RELEASE_ID to choose a retained build. Uninstall removes the managed commands and application versions, and keeps configuration, the license, sessions and saved evidence. To free the device's license slot as well, run flightops license deactivate before you uninstall.
Test the current source checkout
This section is for contributors. An archive install does not build a checkout. From the repository root:
bash scripts/bootstrap.sh --with-tui
source .venv/bin/activate
command -v flightops
flightops --helpThis needs Python 3.10–3.12, Rust Cargo for the native terminal, and the development prerequisites (source repository). For Python integrations without the terminal, use --with-integrations. Source ROS before bootstrapping when you need live ROS imports, and activate the checkout's .venv in every test terminal so that flightops resolves to source code instead of an installed archive. A source checkout is not license-gated. Offline evidence comparisons do not require ROS.
To install a release archive you built or downloaded, use the repository root's install.sh with the archive's published 64-character digest; it refuses a mismatch before extraction:
bash install.sh --archive /path/to/flightops-release.tar.gz --sha256 SHA256_DIGESTIt asks you to accept the beta terms (source repository) first, as the published installer does (--accept-terms or FLIGHTOPS_ACCEPT_TERMS=1 without a terminal).
The archive must match your Ubuntu version, architecture and Python minor; --python selects the interpreter for every step.