2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00
2026-08-30 20:45:54 -06:00

DESI Explorer

An interactive 3D map of the universe, built from data gathered by the Dark Energy Spectroscopic Instrument (DESI).

Renders millions of galaxies / quasars in real time as a navigable 3D point cloud, combining Odin for the renderer with raylib for windowing, input, and 3D drawing.

What is this?

A fun personal project with three interlocking goals:

  • Turn DESI's survey into something you can fly through — the Dark Energy Spectroscopic Instrument maps a huge volume of the observable universe (galaxies, quasars, and the Lyman-alpha forest) in three dimensions. This project renders that data as an interactive 3D experience rather than a static plot.
  • Serve the data, not the download — the datasets are large, so the experience pulls from a centralized repository / API instead of requiring you to keep the raw catalogs locally (see Goals).
  • Ship to native and the web — one Odin codebase compiled to a native desktop executable and to WebGL/WASM, so the map runs anywhere.

Goals

  • Scaffold the project: Odin + raylib 3D renderer, Go/Pulumi infra, Gitea CI
  • Pull data from a centralized repository to limit storing all the DESI data locally
  • Be both a native executable and a WebGL-based interactive experience
  • Build utilizing the Odin language
  • (Future) Integrate with other space data to be able to incorporate both dark energy information and more

Current State

Early scaffolding. The application currently:

  • Opens a resizable 3D raylib window with an orbital camera (zoom + rotate + pan).
  • Renders a procedurally generated point cloud standing in for the galaxy catalog (real DESI data ingestion is the next milestone).
  • Compiles natively, to WebAssembly, and is deployed to an on-prem Kubernetes cluster as a placeholder web service.

Roadmap

  • Ingest real DESI data (EDR/DR1 catalogs) and map survey coordinates (RA / Dec / redshift) into 3D space
  • Central data repository / API so large catalogs aren't stored locally
  • Efficient rendering of large point clouds (instancing / vertex buffers rather than per-point draws)
  • Camera flight / goto-object controls and a minimap
  • Color-coding by redshift, survey, or object type
  • Object selection & metadata inspection
  • Web (WASM/WebGL) parity with the native build
  • (Future) Fold in other datasets for dark-energy context

Repository Layout

src/       Odin source — the interactive 3D experience (entrypoint: src/main.odin)
lib/       Third-party Odin dependencies (submodules / vendored libs)
infra/     Go + Pulumi infrastructure-as-code (deploys the experience to k8s)
scripts/   Build helpers (Odin install, WASM build)
.gitea/    Gitea Actions CI/CD workflows

The renderer (src/) and the infrastructure (infra/) are kept in separate directories so their logic stays cleanly separated; both are orchestrated by the root Makefile.

Building & Running

Requires Odin with the bundled raylib vendor bindings. The web build additionally requires Emscripten (emcc). The infrastructure requires Go and Pulumi.

All project commands live in the root Makefile (make help lists them):

make setup        # pull submodules + tidy Go deps
make run          # run the native app
make build        # -> bin/desi_explorer
make build-debug  # debug native build
make build-web    # -> build/web (wasm + html)
make test         # odin test + go test
make clean        # remove build artifacts

Dependency Updates (Renovate)

Renovate keeps dependencies up to date by opening PRs. It runs centrally on the homelab Gitea — a dedicated renovate Gitea Actions runner in the homelab k3s cluster runs renovate every hour (renovate workflow in the homelab repo) with autodiscovery filtered to sam_oneal/*. Because this repo carries a renovate.json on main, it is picked up automatically. Config for this repo lives in renovate.json and is validated with make renovate-validate.

It manages three categories:

  • Infra dependenciesinfra/go.mod (gomod manager); minor/patch updates grouped into a single PR.
  • Submoduleslib/ submodules via .gitmodules (git-submodules manager).
  • Workflow actions — action versions in .gitea/workflows/*.yml (github-actions manager, which understands Gitea's .gitea layout).
S
Description
Explore all the universe has to offer!
Readme 335 KiB
Languages
Shell 32.2%
Makefile 25.3%
Rust 18.9%
Odin 10.1%
Go 8.5%
Other 5%