Skip to Content
ReferenceCLIOverview

CLI overview

The command-line interface is the first-class interface for engineers. Everything the HTTP API can do, the CLI can do, and a few things only the CLI does.

orbitforge <COMMAND> [OPTIONS]

Commands

CommandPurpose
constellation walkerGenerate Walker Delta and Walker Star constellations
import-tleImport real satellites from a NORAD TLE file
import-ephemImport satellites with supplied ephemerides, OEM or SP3
designSynthesize a constellation from a requirements document
simulatePropagate over a time range and export results
eclipseCompute umbra and penumbra intervals
linkLink-budget analysis with the ITU-R atmosphere suite
coverageGrid coverage and revisit statistics
platform-accessAccess from a fixed site or a moving platform
maneuverPropagate a mission with impulsive or finite burns
targetSolve for burn parameters with a differential corrector
stationkeepStation-keeping delta-v and propellant budget
od blsOrbit determination by batch least squares
od ekfOrbit determination by extended Kalman filter
od simulate-trackingGenerate synthetic tracking observations
conjunction screenScreen for close approaches and collision probability
stations listGround-station catalog
transfer lambertLambert orbit-transfer solutions
fleet saveStore a fleet state as a content-addressed snapshot
fleet listList stored snapshots
fleet showPrint a snapshot by identifier
waveform generateGenerate a modulated IQ capture
waveform berMonte Carlo bit-error-rate sweep
waveform thresholdsMeasure decoder thresholds
waveform doppler-applyApply a pass Doppler profile to a capture

Invocation

Every example assumes orbitforge is on your PATH. If it is not, either form works:

cargo run -p orbitforge-cli -- simulate --constellation demo.json export PATH="$PWD/target/debug:$PATH"

The Cargo form rebuilds first if the source has changed.

Flag conventions

ConventionDetail
Naminglower-kebab-case, with the unit in the name where one applies
Units in names--altitude-km, --frequency-ghz, --duration-hours, --step-seconds
Enum valueslower-kebab-case, for example two-body, harris-priester
Required flagsNamed in the usage line; omitting one is an error, never a silent default
PathsRelative to the working directory

The CLI and the HTTP API do not share spelling. The CLI writes two-body with a hyphen; the API field is propagation_model and its value is two_body with an underscore. See units and conventions.

Common options

These appear on most analysis commands with consistent meaning and defaults.

Options shared across analysis commands.
ParameterTypeUnitDefaultRequiredDescription
--constellationpathn/a—YesConstellation JSON, from `constellation walker`, `import-tle`, `import-ephem`, or `design`.
--startstringRFC 3339 UTC2026-01-01T00:00:00ZNoScenario start epoch. When propagating imported TLEs, use the reference epoch the import reported.
--duration-hoursfloath—NoAnalysis window length. The default varies by command: 6 for `simulate`, 24 for `coverage`, 72 for `conjunction screen`.
--step-secondsfloats60NoFixed time step. Must be well below the shortest event you care about.
--modelenumn/atwo-bodyNoPropagation model: `two-body`, `j2`, `sgp4`, `numerical`, `ephemeris`.
--jsonpathn/a—NoWrite the full structured result. Console output is a summary; the JSON is the data.

Console output is rounded for reading. Exports carry full precision. Quote from the export, not from the terminal, when precision matters.

Output

Most commands print a human-readable summary and optionally write files.

FlagFormatUse
--jsonJSONThe complete structured result
--czmlCZMLTime-dynamic scene for the CesiumJS viewer
--oemCCSDS OEM (KVN)Ephemeris interchange with other tools
--outputVariesCommand-specific primary output

Not every command accepts every flag. coverage, for instance, prints its summary and takes no --output. Run a command with --help for its exact set.

Exit behavior

ConditionBehavior
SuccessExit 0, summary on standard output
Bad argumentsNon-zero, usage message on standard error, with a suggestion when a flag is close to a real one
Runtime failureNon-zero, Error: followed by a Caused by: chain
Model prerequisite unmetNon-zero, naming the satellite and what it lacks

Diagnostics name the specific object that failed rather than reporting a generic error:

Error: simulation failed Caused by: satellite `demo-s0-p00-sat00` has no TLE; SGP4 propagation requires one (import via TLE)

Partial output is not left behind on failure.

Getting help

orbitforge --help # all commands orbitforge simulate --help # one command, with defaults and value ranges orbitforge waveform --help # a command group's subcommands

--help is authoritative. If this documentation and --help disagree, --help is right and the page is a defect worth reporting.

Question? Give us feedbackDocuments Varaha Constellation Designer main (pre-release)
Last updated on