Sidereon - GPS, satellite positioning, and astrodynamics for Elixir

I just released sidereon, an Elixir library for GPS-style satellite positioning, satellite orbit propagation, and astrodynamics, backed by a shared Rust core.

sidereon lets Elixir code answer questions like:

  • Where is this satellite now, or where will it be later?
  • What satellites are visible from this point on Earth?
  • When will a satellite pass overhead?

GNSS (Global Navigation Satellite System) encompasses GPS and the related satellite navigation systems used for positioning and timing. Most people know the end-user side as “GPS”; sidereon is for the underlying data, geometry, file formats, and math.

The core engine is written in Rust and is also exposed through Rust, Python, C, and JavaScript/WebAssembly. The Elixir package uses normal modules, structs, tagged results, and BEAM-friendly APIs, while the heavy numerical work runs in the shared Rust core.

Functionality includes:

  • Calculate satellite positions from public orbit data, including current and future positions (propagation)
  • Compute observer look angles, visibility, skyplots, and pass predictions
  • Solve receiver position from GPS-style observations
  • Work with single-point positioning, RTK, PPP, DGNSS, DOP, and related GNSS calculations
  • Parse common satellite/GNSS formats such as RINEX, CRINEX, SP3, IONEX, ANTEX, RTCM, OMM, CDM, OEM, and OPM
  • Use frame/time transforms, Earth orientation, ionosphere/troposphere corrections, conjunction screening, RF helpers, eclipse/terminator geometry, and orbit utilities

If you have used tools in other ecosystems such as RTKLIB, Orekit, Skyfield, SGP4 libraries, or SPICE-related tooling, sidereon encompasses large parts of that territory, but implemented as a unified, fast Rust core exposed consistently but idiomatically across multiple languages.

The demo at https://sidereon.dev runs the WebAssembly build of the same core in the browser. It shows a moving satellite constellation, click-to-place observer skyplots, in-browser positioning solves from bundled data, TEC maps, coverage, and conjunction screening.

The project is largely AI coded but heavily steered in terms of architecture and very focused on validation: committed reference fixtures, bit-for-bit checks vs. reference implementations where that is a valid claim, explicit tolerances for solver outputs where it is not, fuzz targets, etc.

I would love any feedback on this!

Demo: https://sidereon.dev
Hex: sidereon | Hex
Source:

9 Likes