An interactive 3D map of the Milky Way rendered in the browser. Fly through 119,614 real stars from the HYG stellar catalog, inspect individual stars, and browse confirmed exoplanets from the NASA Exoplanet Archive.
Built by Oskari Kaile
- 119,614 real stars — positions, magnitudes, and spectral types from the HYG v4.2 database
- First-person flight controls — WASD + mouse look, boost, cruise speed adjustment
- Star inspector — click any star to see its distance, magnitude, spectral class, and constellation
- Exoplanet data — 6,000+ confirmed planets from the NASA Exoplanet Archive, bundled as a snapshot
- Exoplanet filter — toggle to highlight only stars with confirmed exoplanets
- Render modes — High / Med / Low point-count tiers with auto-downshift below 30 fps
- No build step — pure ES modules via import map, runs straight from the file system
| Input | Action |
|---|---|
W A S D |
Move forward / left / backward / right |
Space / Ctrl |
Move up / down |
Shift |
Speed boost ×8 |
+ / − |
Adjust cruise speed |
Mouse |
Look around (click canvas to capture) |
Click star |
Open inspector panel |
Esc |
Release cursor |
- Three.js r160 — WebGL rendering via ES module import map
- HYG Database v4.2 — stellar catalog (astronexus)
- NASA Exoplanet Archive TAP — exoplanet records (snapshot in
data/exoplanets.json) - Vanilla JS, no framework, no bundler
├── index.html # Shell, HUD markup, import map
├── styles.css # All styles — observatory aesthetic
├── src/
│ ├── main.js # Entry point, boot sequence
│ ├── starData.js # CSV parser, HYG catalog loader
│ ├── galaxy.js # Three.js scene, star geometry, render tiers
│ ├── controls.js # First-person flight controls
│ ├── ui.js # HUD updates, inspector panel, sol label
│ ├── exoplanetAPI.js # Exoplanet lookups from the bundled snapshot
│ └── performance.js # FPS monitor, auto-downshift logic
├── scripts/
│ └── update-exoplanets.mjs # Refreshes data/exoplanets.json from NASA
├── data/
│ ├── hyg_v42.csv # HYG stellar catalog
│ └── exoplanets.json # NASA Exoplanet Archive snapshot
└── assets/
└── O-logo.png # Logo
└── O.png # Mini Logo
└── screenshot.png # screenshot of the project
| Dataset | Source | License |
|---|---|---|
| HYG v4.2 stellar catalog | astronexus/HYG-Database | CC BY-SA 2.5 |
| Exoplanet records | NASA Exoplanet Archive | Public domain |
No install needed — just serve the directory over HTTP (required for ES modules and the CSV fetch):
npx serve .
# or
python -m http.server 8000Then open http://localhost:8000.
The NASA Exoplanet Archive doesn't send CORS headers, so browsers can't query it directly from GitHub Pages. Instead, the planet list is stored in data/exoplanets.json. To pick up newly confirmed planets, run (Node 18+):
node scripts/update-exoplanets.mjsThen commit the updated data/exoplanets.json.
MIT — see LICENSE for details.
