neilberkman

neilberkman

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:

Where Next?

Popular in Announcing Top

deadtrickster
I’ve just released stable versions of my Prometheus Elixir libs: Elixir client [docs]; Ecto collector [docs]; Plugs instrumenter/Export...
New
asiniy
Hey there! I wrote a download elixir package which does exactly what its name about - an easy way to download files. I saw solutions ab...
New
martinthenth
Hello everybody :wave: Recently, some of my colleagues talked about database ids and uuids and their problems, and I remembered the pain...
New
brainlid
LangChain is short for Language Chain. An LLM, or Large Language Model, is the “Language” part. This library makes it easier for Elixir a...
New
nikokozak
Hello all, I’ve been working on Svonix - a library for quickly integrating Svelte components into Phoenix views. It’s a much-needed succ...
New
Qqwy
Hello everyone, I wrote a small library today called MapDiff. It returns a map listing the (smallest amount of) changes to get from map...
New
michalmuskala
Another small library today. PersistentEts Hex: persistent_ets | Hex GitHub: GitHub - michalmuskala/persistent_ets · GitHub Ets table ...
New
benlime
LiveMotion enables high performance animations declared on the server and run on the client. As a follow up to my previous thread A libr...
New
New
pkrawat1
Hey guyz We at @aviabird are working on a payment library in elixir/phoenix. We are targeting March 2018 to add 56 Gateways to it. Have...
New

Other popular topics Top

mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement