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

gabrielpoca
Hello everyone! I want to share with you something that I’m really proud of: https://stillstatic.io/ Still is a static site builder for...
New
dominicletz
Hi, I thought I had posted my library before but seems I hadn’t. The project is still in early stages but it’s growing and so I think it...
New
RobertDober
Earmark is a pure-Elixir Markdown converter. It is intended to be used as a library (just call Earmark.as_html), but can also be used as...
239 12645 134
New
cjen07
parameterized pipe in elixir: |n> edit: negative index in |n> and mixed usage with |> are supported example: use ParamPipe ...
New
mindok
What is ContEx? A pure Elixir server-side data plotting/charting library outputting SVG. It has nice barcharts in particular and works g...
New
KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36352 110
New
michalmuskala
Another small library today. PersistentEts Hex: persistent_ets | Hex GitHub: GitHub - michalmuskala/persistent_ets · GitHub Ets table ...
New
Qqwy
TypeCheck: Fast and flexible runtime type-checking for your Elixir projects. Core ideas Type- and function specifications are const...
336 14482 100
New
mplatts
With HEEX released we decided to start a components library using Tailwind CSS - check it out here: Petal Components. We also have a boi...
New
woylie
Flop is an Elixir library that applies filtering, ordering and pagination parameters to your Ecto queries. offset-based pagination with...
New

Other popular topics Top

axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 48342 226
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29603 241
New
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
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

Latest on Elixir Forum

We're in Beta

About us Mission Statement