Ephemerides · Time scales · Typed frames · Units · Orbit workflows · Satellite engineering
Website · Docs · Examples · Benchmarks · Discussions
Siderust is an open-source scientific-computing ecosystem for people building astronomy, astrodynamics, observation planning, satellite, and mission-analysis software.
The design goal is simple: scientific meaning should be visible in code. Units, time scales, reference frames, coordinate centers, and physical models are first-class concepts instead of comments attached to raw floating-point values.
|
Physical quantities, epochs, frames, centers, and coordinate semantics are encoded in APIs wherever practical. |
Solar-system ephemerides, observing windows, coordinate transforms, lunar properties, time scales, and orbit examples. |
Composable crates, explicit features, reproducible examples, and bindings planned around a Rust source of truth. |
Compute Mars barycentric ecliptic coordinates through the Siderust planetary model:
use chrono::prelude::*;
use siderust::{
bodies::Mars,
time::{JulianDate, JD, TT, Time, UTC},
};
// or use siderust::prelude::*;
fn main() {
// UTC now → Terrestrial Time → Julian Date
let jd: JulianDate = Time::<UTC>::from_chrono(Utc::now())
.to::<TT>()
.to::<JD>();
// VSOP87E: barycentric ecliptic rectangular coordinates, J2000 frame.
let mars = Mars::vsop87e(jd);
println!("Mars · VSOP87E · barycentric ecliptic J2000");
println!("{}", mars.position);
}This is the core idea: the code carries the scientific context — body, epoch, time scale, ephemeris model, and output quantity — instead of hiding it behind anonymous f64s.
cargo new siderust-tour
cd siderust-tour
cargo add siderust chronoPaste the example above into src/main.rs, then run:
cargo runOr clone the main repository and run the curated examples:
git clone https://github.com/Siderust/siderust.git
cd siderust
cargo run --example 08_solar_system
cargo run --example 09_star_observability
cargo run --example 16_lambert_earth_to_mars
cargo run --example 17_sgp4_from_tleThe examples cover typed coordinates, frame and center transforms, observing windows, Moon properties, solar-system positions, time periods, runtime ephemerides, orbit models, Lambert transfer, SGP4/TLE, and POD-oriented workflows.
|
|
siderust
astronomy · ephemerides · observations · satellites
uses
├─ tempoch scientific time, epochs, calendars, durations
├─ affn typed frames, centers, positions, vectors, transforms
├─ keplerian elements, propagation, conics, transfers
├─ principia numerical dynamics, propagation, gravity-field kernels
├─ optica rays, optical coefficients, spectra, optical depth
├─ qtty units, dimensions, conversions, constants
└─ cheby interpolation, approximation, spectral numerics
The foundational crates are intentionally useful outside astronomy. siderust assembles them into higher-level workflows for observation, ephemeris, and orbit analysis.
|
|
- Make units explicit. Avoid APIs that rely on caller memory for meters vs. kilometers or degrees vs. radians.
- Make frames explicit. Coordinate-heavy code should not silently mix inertial, body-fixed, topocentric, geocentric, and heliocentric semantics.
- Make time explicit. Epochs, durations, calendars, and time scales need names and types, not anonymous numbers.
- Keep crates composable. Foundational crates should remain focused and reusable.
- Measure honestly. Benchmarks and validation should be reproducible, documented, and tied to clear scenarios.
cargo add siderustFor lower-level building blocks:
cargo add qtty affn tempoch chebyFor production systems, pin explicit versions and review each repository's feature flags, runtime-data requirements, and license before deployment.
Useful contributions usually fall into one of these areas:
- reference validation against authoritative datasets;
- numerical accuracy and performance improvements;
- clearer examples and API documentation;
- benchmark coverage and reproducibility;
- C++, Python, and JavaScript binding parity;
- packaging, release, and deployment reliability;
- scientific workflows that can be reproduced end to end.
For Rust repositories, start with the usual checks:
cargo fmt --all
cargo test --all-targets
cargo clippy --all-targets -- -D warningsRepository-specific instructions take precedence when a project defines additional validation, feature, data, or binding requirements.
Licensing is repository-specific. Each repository's LICENSE file is authoritative.
Some crates are permissively licensed, while core astronomy and satellite-mechanics components may use stronger copyleft terms. Review the target repository before using Siderust in proprietary or closed-source systems.
Precision-first astrodynamics for Rust systems that cannot afford silent unit, frame, or time-scale mistakes.