A service application for Siderust POD in Rust.
spod is an engineering-oriented service for configuration, orchestration, artifact handling, and interfaces around the reusable POD APIs in Siderust. It does not maintain a second scientific POD implementation.
The current MSRV is Rust 1.89, matching the dependency graph and the Docker builder image.
Status: engineering preview (pre-1.0). The synthetic end-to-end POD path is usable for development and validation. Real-data workflows and the REST surface are still evolving. This project is not yet intended for flight-critical or safety-critical operational use.
| Area | Current scope |
|---|---|
| POD science | Provided by siderust::pod (forces, propagation, observations, estimation, QC and products) |
| Scientific backend | Siderust 0.12 |
| Full SGP4/SDP4 | Local Vallado-style backend retained until upstream parity |
| Products & QC | Residuals, orbit products, manifests, comparison/QC utilities |
| Interfaces | Rust library, command-line interface, experimental Axum REST API |
The project separates service orchestration, external interfaces, and persistence from the reusable POD implementation in Siderust.
src/
service/ Configuration, orchestration, REST/CLI and artifact handling
sgp4/ Temporary full Vallado SGP4/SDP4 compatibility layer (#29)
bin/ CLI and experimental REST entry points
git clone https://github.com/VPRamon/spod.git
cd spod
cargo testFoundational astrodynamics, typed quantities, time scales, frames, standard
formats, and reusable numerical mechanics live in the released Siderust
ecosystem crates. spod is built on top of siderust::pod; it does not expose
scientific compatibility facades. Full Vallado SGP4/SDP4 remains a documented
temporary local exception while parity is tracked by #29 and Siderust #98.
Validate and run the synthetic POD configuration:
cargo run --bin spod -- validate-config examples/configs/leo_gnss_mvp1.yaml
cargo run --bin spod -- run examples/configs/leo_gnss_mvp1.yamlRun the experimental REST service in a container:
docker build -t spod:dev .
docker run --rm -p 8080:8080 spod:devThe service listens on SPOD_REST_BIND and writes job output below
SPOD_REST_OUT.
See examples/README.md for the service workflow.
- Type safety for physical quantities. Units, epochs, frames and states should be difficult to mix accidentally.
- Traceable numerical behaviour. Scientific algorithms should have explicit assumptions and validation tests.
- Separation of concerns. Reusable dynamics, observations, estimation,
formats, and QC remain independently testable in Siderust;
spodkeeps service orchestration at the application boundary. - No unsafe Rust. The library forbids
unsafe_code. - Standards-oriented interoperability. Common astrodynamics and geodesy formats are treated as first-class interfaces.
The CI pipeline checks formatting, Clippy, tests across feature combinations, documentation, dependency direction, and source hygiene.
Run the main checks locally with:
cargo fmt -- --check
cargo check --workspace --all-targets --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --no-fail-fast
cargo test --workspace --no-default-features --no-fail-fast
cargo test --workspace --all-features --no-fail-fast
cargo test --doc --workspace --all-features
cargo doc --workspace --no-deps
bash scripts/check_dep_graph.sh
bash scripts/check_no_todos.sh
bash scripts/check_legacy_name_refs.shBuild and exercise the container locally:
docker build -t spod:dev .
docker run --rm --entrypoint spod spod:dev --help
docker run --rm -p 8080:8080 spod:devThe REST container defaults to 0.0.0.0:8080, so the published port is
reachable from outside the container. Set SPOD_REST_BIND and
SPOD_REST_OUT to override the defaults.
Contributions, validation cases and format-compatibility reports are welcome. See CONTRIBUTING.md.
For security issues, see SECURITY.md. For support and commercial-licensing enquiries, see SUPPORT.md.
spod is available under AGPL-3.0-or-later. See LICENSE.
Commercial licensing can be discussed separately; see SUPPORT.md.