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.

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, macOS, and Windows on Python 3.10--3.14.

Quick Start

pip install satkit

The IERS nutation tables and gravity models are compiled into the package, so frames, gravity and SGP4 work with no data files at all. The JPL ephemeris (~100 MB, SHA-256 verified) is downloaded on first use into the user data directory; Earth orientation and space weather are fetched from CelesTrak on first use. To provision everything up front, or to refresh the daily files, run:

import satkit as sk
sk.utils.update_datafiles()

Quick Examples

SGP4 propagation

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"
])

pos, vel = sk.sgp4(tle, sk.time(2024, 1, 2))

High-precision propagation

import satkit as sk
import numpy as np

r0 = 6378e3 + 500e3  # 500 km altitude
v0 = np.sqrt(sk.consts.mu_earth / r0)

settings = sk.propsettings(
    gravity_model=sk.gravmodel.jgm3,
    gravity_degree=8,
)

result = sk.propagate(
    np.array([r0, 0, 0, 0, v0, 0]),
    sk.time(2024, 1, 1),
    end=sk.time(2024, 1, 1) + sk.duration.from_days(1),
    propsettings=settings,
)

state = result.interp(sk.time(2024, 1, 1) + sk.duration.from_hours(6))

Coordinate transforms

import satkit as sk

time = sk.time(2024, 1, 1, 12, 0, 0)
coord = sk.itrfcoord(latitude_deg=42.0, longitude_deg=-71.0, altitude=100.0)

q = sk.frametransform.rotation(from_frame=sk.frame.ITRF, to_frame=sk.frame.GCRF, tm=time)
gcrf_pos = q * coord.vector

Features

Coordinate Frames

Full IERS 2010 Conventions reduction (Petit & Luzum 2010, Ch. 5: IAU 2006/2000A precession-nutation) with Earth orientation parameters:

Frame Description
ITRF International Terrestrial Reference Frame (Earth-fixed)
GCRF Geocentric Celestial Reference Frame (inertial)
TEME True Equator Mean Equinox (SGP4 output frame)
CIRS Celestial Intermediate Reference System
TIRS Terrestrial Intermediate Reference System
Geodetic Latitude / longitude / altitude (WGS-84)

Plus ENU, NED, and geodesic distance (Vincenty 1975) utilities.

Orbit Propagation

  • Numerical -- Adaptive Runge-Kutta integrators (9(8), 8(7), 6(5), 5(4); Verner 2010, Tsitouras 2011), RODAS4 and Gauss-Jackson 8 (Berry & Healy 2004), with dense output, state transition matrix, and configurable force models
  • SGP4 -- Standard TLE/OMM propagator (Vallado et al. 2006) with TLE fitting from precision states
  • Keplerian -- Analytical two-body propagation
  • Lambert -- Multi-revolution Lambert targeting for orbit transfer design (Izzo 2015)

Force Models

  • Earth gravity: JGM2, JGM3, EGM96, ITU GRACE16 (spherical harmonics up to degree/order 40; Montenbruck & Gill 2000, §3.2)
  • Third-body gravity: Sun and Moon via JPL DE440/441 ephemerides (Park et al. 2021)
  • Atmospheric drag: NRLMSISE-00 (Picone et al. 2002; pure Rust) with automatic space weather data
  • Solar radiation pressure: Cannonball model with shadow function
  • Solid Earth tides: IERS 2010 §6.2.1 Step 1 (frequency-independent Love-number response; Petit & Luzum 2010)
  • General relativity: IERS 2010 §10.3 Eq. 10.12 — Schwarzschild, geodesic (de Sitter) precession, and Lense–Thirring

Time Systems

Seamless conversion between UTC, TAI, TT, TDB, UT1, and GPS time scales with full leap-second handling.

Solar System

  • JPL DE440/DE441 ephemerides for all planets, Sun, Moon, and barycenters
  • Fast analytical Sun/Moon models for lower-precision work
  • Sunrise/sunset and Moon phase calculations
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 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.