Overview
All commands run from the repository root unless otherwise noted.
Native Tests
Run Rust unit and integration tests directly on the host machine without cFS or Docker:
cargo test
This tests protocol implementations, algorithms, and data structures in isolation. The Rust crates are in crates/.
Docker Tests
Build and test the cFS-integrated flight software inside a Linux container:
make docker-build # build the Docker image (once)
make docker-test # run cargo test --features=cfs inside the container
This tests the Rust code linked against the real cFE, OSAL, and PSP libraries. The cFS framework is in cfe/, osal/, and psp/. Flight apps are in apps/.
NOS3 Simulation
Build and run a full constellation simulation with orbital mechanics, hardware simulators, and inter-satellite communication:
make nos3-build # build Docker image (adds Rust toolchain to NOS3 base)
make nos3-config # generate NOS3 build configuration
make nos3-build-sim # build hardware simulators (C++) from libs/nos3/components/
make nos3-build-fsw # build flight software (cFS + Rust apps) from apps/
make nos3-launch # start all containers
make nos3-stop # stop all containers
make nos3-shell # interactive shell in FSW container
NOS3 configuration is in libs/nos3/cfg/. Hardware simulator sources are in libs/nos3/components/.
Constellation Simulation
The leodos-cli tool orchestrates multi-satellite constellation simulation:
leodos-cli sim start 3 22 # start 3 orbits × 22 satellites = 66 satellites
leodos-cli sim stop # stop all containers
leodos-cli sim shell 0 # open a shell in orbit-0 container
The start command generates a Docker Compose configuration, assigns spacecraft IDs and ports, and brings up all containers. Each satellite gets a unique ID derived from its grid position: (orbit + 1) × 1000 + satellite_number.
Earth Observation Data
Generate synthetic sensor data for workflow testing before launching the simulation:
cd tools/eosim
uv run eosim wildfire examples/california_wildfire.yaml -o output/ --fmt bin
Or from the repository root:
make eosim-gen # generate thermal raster files in tools/eosim/output/
Scenario definitions are YAML files in tools/eosim/examples/. Generated rasters go to tools/eosim/output/, which is mounted into the simulation container.
Documentation Site
Build and preview the documentation site locally:
cd site
npm install # install dependencies (once)
npm run start # development server with hot reload
npm run build # production build
The site source is in site/docs/. It deploys automatically to GitHub Pages on pushes to main that modify site/.
Rust API Documentation
Generated Rust API docs are hosted alongside the documentation site:
leodos-protocols— the communication stack and SpaceCoMP implementation (built withcfsandtokiofeatures)leodos-libcfs— safe Rust wrappers for the cFE, OSAL, and PSP APIs
To build locally (requires Docker for cFS headers):
make docker-build # build Docker image (once)
make docker-prep # prep cFS headers (once)
docker compose run --rm cfs-build \
cargo doc --manifest-path crates/leodos-protocols/Cargo.toml \
--features=cfs,tokio --no-deps --open