Skip to main content

sidereon

GNSS and astrodynamics for Python, with answers you can trust.

sidereon is the Python interface to the sidereon engine: a single GNSS and astrodynamics core, written in Rust, exposed here as an idiomatic Python package. You get orbit propagation, precise positioning, frames and time, ephemeris handling, and format parsing through plain Python objects and numpy arrays. The engine is reference-validated (SGP4 is bit-exact to Vallado's implementation; frames and time check against Skyfield and IERS; the positioning stack checks against IGS products), so the numbers match the sources the field already trusts.

The Rust core is compiled into the wheel and linked statically, so the package is fast and the only runtime dependency is numpy. There is no separate native install.

Install

pip install sidereon
import sidereon
print(sidereon.__version__)

Example: where is the ISS in the sky right now?

No data files and no setup: give it a two-line element set and a ground station, and ask for the look angles. Everything that takes time takes unix microseconds (int64) and arrays propagate in one call.

import numpy as np
import sidereon

tle = sidereon.Tle(
    "1 25544U 98067A   24001.50000000  .00016717  00000-0  10270-3 0  9009",
    "2 25544  51.6400 208.8657 0002644 250.3037 109.7782 15.49560812999990",
)
station = sidereon.GroundStation(latitude_deg=51.5, longitude_deg=-0.1, altitude_m=10.0)

# Epochs are unix microseconds (int64); arrays propagate in one call.
epochs_us = np.array([1_704_110_400_000_000], dtype=np.int64)
look = tle.look_angles(station, epochs_us)
print(look.azimuth_deg, look.elevation_deg, look.range_km)

Tle also gives you propagate() (TEME state arcs as numpy arrays) and find_passes() (rise/set/peak over a window). The positioning side has the same shape: a typed config in, a result object with numpy positions and scalar attributes out.

import sidereon

sp3 = sidereon.load_sp3(open("igs_product.sp3", "rb").read())

config = sidereon.SppConfig(
    observations=[
        sidereon.SppObservation("G08", 23_825_519.8),  # PRN, pseudorange (m)
        sidereon.SppObservation("G10", 22_717_690.1),
        # ...more satellites
    ],
    t_rx_j2000_s=646_272_000.0,
    t_rx_second_of_day_s=43_200.0,
    day_of_year=176.5,
    initial_guess=[4_500_000, 500_000, 4_500_000, 0.0],
    corrections=sidereon.SppCorrections(ionosphere=True, troposphere=True),
    with_geodetic=True,
)

solution = sidereon.solve_spp(sp3, config)
print(solution.position)     # numpy [x, y, z] ECEF metres
print(solution.rx_clock_s)   # receiver clock bias, seconds

Capabilities

The Python package mirrors the full breadth of the engine.

  • Orbit propagation: SGP4/SDP4 from TLE/OMM, numerical propagation with a composable force model (spherical-harmonic geopotential to selectable degree and order, Sun/Moon third-body, solar radiation pressure, relativistic correction, atmospheric drag) and orbital-decay estimation with a post-decay validity latch, batch and constellation arcs, pass prediction, look angles, and coverage analysis.
  • Orbital mechanics: classical, equinoctial, and modified equinoctial elements, anomaly conversions and Kepler propagation, Lambert transfers, initial orbit determination (IOD), batch least-squares orbit fitting against precise ephemerides (including terrestrial-frame SP3 products through the Earth-orientation chain) with a per-satellite residual ledger, and relative motion in RIC/RTN/LVLH frames with Clohessy-Wiltshire propagation.
  • GNSS positioning: single-point positioning (SPP), RTK (float and fixed), PPP (float and fixed), DGNSS, a robust solve driver, and DOP.
  • Integrity and error bounds: RAIM fault detection and exclusion, multi-constellation ARAIM protection levels, SBAS protection levels (DO-229), per-observation reliability (minimal detectable bias, internal/external), observability classification of every solution (rank, redundancy, conditioning), and covariance-derived error metrics (CEP, R95, SEP, error ellipse) that report wide or flagged bounds for weak geometry rather than fabricated confidence.
  • GNSS corrections and products: SBAS and RTCM SSR corrections applied to broadcast ephemeris, Bias-SINEX code and phase biases (DCB/OSB), Klobuchar and NeQuick-G ionosphere, IONEX maps, troposphere models, and NTRIP client stream handling.
  • Ephemeris and time: broadcast ephemeris and precise SP3 products, JPL SPK (DAF/.bsp) kernels, uniform satellite-state sampling across broadcast and precise sources with batched multi-satellite interpolation, scale-aware time (UTC/TAI/TT/TDB/UT1 and the GNSS system times) with leap-second handling, and Earth orientation parameters (EOP).
  • Timing and clocks: Allan-family stability analysis (ADEV/MDEV/HDEV/TDEV) and power-law clock-noise identification with a five-coefficient fit (IEEE 1139).
  • Estimation and detection: scalar Kalman and alpha-beta trackers, innovation gating, robust statistics, CFAR detection thresholds, and source localization (ToA/TDOA) from arrival times at known sensors.
  • Geodesy and monitoring: geodesic direct and inverse problems (Karney), an epoch-aware terrestrial reference frame catalog with published ITRF and ETRF Helmert parameter sets, robust station velocity (MIDAS), trajectory fitting with seasonal terms and offsets, step detection, network motion fields with common-mode removal, and repeating-geometry (sidereal) filtering.
  • Geometry and events: reference frames, geodetic and ECEF conversions, look angles, eclipse, conjunction screening with collision probability, and angular geometry (separation, position angle, phase angle, beta angle).
  • Observation and almanac: apparent places for the Sun, Moon, and any SPK body (astrometric and apparent RA/Dec plus az/el, with refraction and polar motion), sub-solar and sub-observer points, the terminator, parallactic angle, satellite visual magnitude, moonrise/moonset, seasons, moon phases, planetary events, meridian transits, and lunar and solar eclipses.
  • Observation quality: RINEX observation QC (completeness, multipath, cycle slips), carrier-phase combinations, and Hatch smoothing.
  • Terrain: DTED elevation lookup with batch probes, a memory-mappable terrain store, and geoid height conversion from EGM96 and EGM2008 grids.
  • RF: link budget (FSPL, EIRP, C/N0, antenna gain).
  • GNSS/INS fusion: strapdown mechanization with an error-state EKF (UKF option), loose and tight coupling, robust loose updates with an outlier guard, an RTS fixed-interval smoother, checkpointed time synchronization, and a serializable filter state.
  • Scenario simulation: deterministic synthetic GNSS observables from a versioned scenario with a per-term error budget, plus a ground-truth ledger attributing solver error to each term; same scenario and seed give identical bytes.
  • Signal analysis: closed-form BPSK/BOC spectra, spectral separation coefficients, DLL thermal-noise jitter, and multipath error envelopes, validated against published constants.
  • Formats: parse and serialize TLE/OMM, CCSDS OEM/OPM/CDM/TDM, RINEX, CRINEX, SP3, IONEX, ANTEX, Bias-SINEX, SBAS logs, RTCM, and NMEA.
  • Data acquisition: the sidereon.data module downloads and caches GNSS products (SP3 and IONEX from IGS/MGEX analysis centers, including merged multi-center SP3) and DTED terrain tiles.

The binding adds no modeling of its own: every result is exactly what the engine computes, returned as numpy arrays, typed objects, and real Python exceptions (sidereon.SidereonError and friends). Full signatures live in the bundled type stubs (sidereon/__init__.pyi).

One engine, every language

sidereon is one validated core with first-class interfaces, so the numbers are the same everywhere:

See the live demo and docs at sidereon.dev.

Building from source

For contributors: pip install maturin, then maturin develop from the repo. Run the tests with pytest.

License

MIT.

Metadata

Release files for sidereon 0.20.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sidereon 0.20.0
File Size Uploaded
sidereon-0.20.0.tar.gz 1.5 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for sidereon 0.20.0
File
sidereon-0.20.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
sidereon-0.20.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
sidereon-0.20.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
sidereon-0.20.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
sidereon-0.20.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 37.8 MB

Release files / sidereon-0.20.0.tar.gz

Download URL sidereon-0.20.0.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
20222f9135df3aa0a521440ba314971b31a2201592e19a6909b1bcd03e52303b
BLAKE2b-256 checksum
How to use checksums
ced1e9f4f351de662110f3474f68274990701c0516f3a374d7117c94dd6c73e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / sidereon-0.20.0-cp39-abi3-win_amd64.whl

Download URL sidereon-0.20.0-cp39-abi3-win_amd64.whl
Size 6.7 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
68c7e7bbaeac695493e4526f8834564057e828e89cbaa5d9093e4860c4cd318b
BLAKE2b-256 checksum
How to use checksums
b9cd3f40c2335d4b248ea304bb3ab3e839a533fc96c97351303c1cf54d7f2f80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / sidereon-0.20.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL sidereon-0.20.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 7.5 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
bcb12f6d032777dc78e576253454dece9606fae219e0ce83387a31f1148b1e98
BLAKE2b-256 checksum
How to use checksums
a123acf6902dac25ac4a7989b91ae186324f85f159119cce90691b861e8633c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / sidereon-0.20.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL sidereon-0.20.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 7.5 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
eecc297d0f90e5d484d205c4a7e1ed0aa50873d38539dec8bfcda7bf9f6fa186
BLAKE2b-256 checksum
How to use checksums
ebf9debcca5a14d8ab06e4778b3acb0371008cfaabb39c2ce278f22d733e7012
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / sidereon-0.20.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL sidereon-0.20.0-cp39-abi3-macosx_11_0_arm64.whl
Size 7.1 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
984b252c25e83bc9208b9877f94339d0d1c61e0f35b774be4de714d27dc7a35a
BLAKE2b-256 checksum
How to use checksums
af64777fe291674a81303b4ea2d5bf4e6dbd2daa8c5f3a8cf197958d5c5bf2ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / sidereon-0.20.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL sidereon-0.20.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 7.4 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
201016cc0acbf7ee5e41b1887289c969750ef4cc841b8c64b79a1bab9d775852
BLAKE2b-256 checksum
How to use checksums
50f2a387ba4e519bcbf7b4638bb98e7385427d2ccf8532cbf6be4bfa19e32064
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release history Release notifications | RSS feed

3.0.3

6 release files

3.0.2

6 release files

3.0.1

6 release files

3.0.0

6 release files

2.1.1

6 release files

2.1.0

6 release files

2.0.0

6 release files

1.4.1

6 release files

1.3.3

6 release files

1.3.1

6 release files

1.3.0

6 release files

1.2.0

6 release files

1.1.1

6 release files

1.1.0

6 release files

1.0.1

6 release files

1.0.0

6 release files

0.39.1

6 release files

0.39.0

6 release files

0.38.0

6 release files

0.35.0

6 release files

0.34.0

6 release files

0.33.1

6 release files

0.32.0

6 release files

0.31.2

6 release files

0.30.0

6 release files

0.29.2

6 release files

0.29.1

6 release files

0.29.0

6 release files

0.28.1

6 release files

0.28.0

6 release files

0.27.1

6 release files

0.27.0

6 release files

0.26.1

6 release files

0.26.0

6 release files

This release

0.20.0 This release

6 release files

0.9.2

6 release files

0.9.1

6 release files

0.9.0

6 release files

0.8.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page