SatKit¶
Satellite astrodynamics in Rust, with full Python bindings.
๐ API documentation: Python on this site ยท Rust on docs.rs, with a Rust guide on this site.
SatKit is a high-performance orbital mechanics library written in Rust with complete Python bindings via PyO3. It handles coordinate transforms, orbit propagation, time systems, gravity models, atmospheric density, and JPL ephemerides -- everything needed for satellite astrodynamics work.
Pre-built wheels are available for Linux (x86_64, aarch64), macOS (Apple silicon), and Windows (x86_64) on Python 3.11--3.15; Intel Macs build from source or use conda-forge.
Quick Start¶
For Rust, cargo add satkit; the Rust section covers the Cargo features and has an example program per topic.
Frames, gravity, SGP4 and time scales work straight away: the IERS nutation tables and gravity models are compiled into the package. The JPL ephemeris, Earth orientation and space weather are downloaded on first use โ see Data Files.
import satkit as sk
tle = sk.TLE.from_lines([
"ISS (ZARYA)",
"1 25544U 98067A 24001.50000000 .00016717 00000-0 10270-3 0 9003",
"2 25544 51.6432 351.4697 0007417 130.5364 329.6482 15.48915330299357"
])[0]
pos, vel = sk.sgp4(tle, sk.time(2024, 1, 2))
Features¶
- Coordinate frames โ the full IERS 2010 reduction (IAU 2006/2000A) between ITRF, GCRF, TEME, CIRS, TIRS and geodetic coordinates, with Earth orientation parameters, plus ENU / NED and geodesic distance: Coordinate Frames
- Numerical propagation โ adaptive Runge-Kutta, RODAS4 and Gauss-Jackson 8 integrators with dense output and the state transition matrix: ODE Integrators, State Vectors, STM & Covariance
- Force models โ EGM2008 / EGM96 / JGM gravity to degree 70 with solid tides, Sun and Moon from JPL DE440, NRLMSISE-00 drag with automatic space weather, solar radiation pressure and relativity: Force Model, validated against GMAT
- SGP4, Kepler and Lambert โ TLE / OMM propagation and TLE fitting, two-body propagation, multi-revolution Lambert targeting: TLEs, SGP4 & OMMs, Keplerian Elements, Lambert's Problem
- Time systems โ UTC, TAI, TT, TDB, UT1 and GPS with full leap-second handling: Time Systems
- Solar system โ JPL DE440/441 ephemerides, fast analytic Sun / Moon models, sunrise / sunset and Moon phase: Planetary Ephemerides
Quick Links¶
| Installation | Install from PyPI or build from source |
| Data Files | Required data files for calculations |
| Learn | Tutorials and theory โ from basics to advanced topics |
| API Reference | Full Python API documentation |
| References | Sources for every model and algorithm |
| Rust | Using the Rust crate: features, data, logging, and runnable examples |
| Rust API (docs.rs) | Rust API reference |
| GitHub | Source code and issue tracker |
Author¶
Steven Michael (ssmichael@gmail.com)
Please reach out if you find errors in code or calculations, are interested in contributing to this repository, or have suggestions for improvements to the API.