Skip to content

SatKit

Satellite astrodynamics in Rust, with full Python bindings.

PyPI - Version PyPI - Downloads PyPI - Python Version Crates.io docs.rs License: MIT OR Apache-2.0

๐Ÿ“š 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

pip install satkit        # or: conda install -c conda-forge satkit

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
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.