Interactive 3D visualization of NASA's Artemis program missions, built with React Three Fiber and real JPL Horizons ephemeris data. Track Artemis II live or replay Artemis I.
- Real trajectory data from JPL Horizons API (Artemis II: -1024, Artemis I: -1023)
- 3D Earth, Moon, and Orion spacecraft with correct positions
- ISS marker — live International Space Station position in the 3D scene
- Hermite spline interpolation for smooth 60fps animation between 30-minute data points
- Moon position computed client-side via
astronomy-engine - Earth rotation synced to Greenwich Apparent Sidereal Time
- Celestial direction markers, moon orbit, ecliptic ring, J2000 axis guides
- Mission selector — switch between Artemis II (live) and Artemis I (replay)
- Playback controls — play/pause, speed (1x to 1h/s), jump to now or restart replay
- Camera presets — Overview, Earth, Moon, Orion with smooth transitions
- DSN status — live Deep Space Network antenna tracking (polls every 10s)
- Mission stats — distance from Earth/Moon, speed, light-time delay, MET
- Space news — aggregated from SpaceNews, NASASpaceflight, Space.com via Spaceflight News API
- Space weather — solar wind speed/density, magnetic field, Kp index from NOAA SWPC
- DONKI alerts — CMEs, solar flares, geomagnetic storms from NASA
- APOD — NASA Astronomy Picture of the Day
- Upcoming launches — from Launch Library 2
- EPIC Earth imagery — full-disc Earth photos from DSCOVR L1
| Layer | Technology |
|---|---|
| 3D rendering | React Three Fiber + drei |
| Celestial math | astronomy-engine |
| Data fetching | @tanstack/react-query |
| State | zustand |
| API proxy | Express |
| Build | Vite + TypeScript |
git clone https://github.com/w00jay/artemisee.git
cd artemisee
npm installCopy the example environment file and set your API server address:
cp .env.example .env
# Edit .env to set VITE_API_URL (defaults to http://localhost:4001)The API server proxies requests to JPL Horizons (which blocks browser CORS) and the DSN Now XML feed.
# Run on the same machine:
npm run server
# Or with auto-reload:
npm run server:watchIf running the API server on a different machine, update VITE_API_URL in .env and ensure the port is accessible.
npm run devnpm testBrowser (Vite :5173) API Server (:4001)
┌──────────────────┐ ┌──────────────────────────┐
│ React Three │ /api/* │ Express │
│ Fiber scene │ ──────────── │ ├─ /horizons │ ──► JPL Horizons
│ + UI overlay │ (proxied) │ ├─ /dsn │ ──► DSN Now XML
│ + zustand store │ │ ├─ /v1/news │ ──► Spaceflight News API
│ + live feeds │ │ ├─ /v1/weather │ ──► NOAA SWPC
│ │ │ ├─ /v1/apod │ ──► NASA APOD
│ │ │ ├─ /v1/launches │ ──► Launch Library 2
│ │ │ ├─ /v1/epic │ ──► NASA EPIC (DSCOVR)
│ │ │ ├─ /v1/donki │ ──► NASA DONKI
│ │ │ └─ /v1/iss │ ──► ISS position
└──────────────────┘ └──────────────────────────┘
- Frontend fetches trajectory data once, caches it, and interpolates at 60fps
- astronomy-engine computes Moon position and Earth rotation client-side (no API needed)
- API server caches all external API responses with appropriate TTLs (5–60 min)
- Mission replay — completed missions use infinite cache and no refetching
| Source | API | Data |
|---|---|---|
| JPL Horizons | REST | Spacecraft ephemeris |
| DSN Now | XML | Antenna tracking status |
| astronomy-engine | Local | Moon/planet positions, sidereal time |
| Spaceflight News API | REST | Aggregated space news |
| NOAA SWPC | JSON | Solar wind, Kp index |
| NASA DONKI | REST | CMEs, flares, storms |
| NASA APOD | REST | Astronomy Picture of the Day |
| NASA EPIC | REST | Full-disc Earth imagery |
| Launch Library 2 | REST | Upcoming launches |
| Where The ISS At | REST | ISS position |
| NASA AROW | — | Official real-time tracker |
The scene uses J2000 Earth-Centered Inertial (ECI) coordinates transformed to Three.js (Y-up):
| ECI Axis | Three.js | Direction |
|---|---|---|
| X | X | Vernal equinox |
| Y | -Z | 90° east in equatorial plane |
| Z | Y | North celestial pole |
Positions are scaled so 1 unit = 1 Earth radius (6,371 km). The Moon orbits at ~60 units.
MIT — see LICENSE.
Trajectory data from NASA/JPL is public domain. This project is not affiliated with, endorsed by, or sponsored by NASA or JPL.
- Earth texture: Blue Marble Next Generation — NASA Visible Earth
- Moon texture: LROC Color Map — NASA Scientific Visualization Studio / Lunar Reconnaissance Orbiter
- Orion spacecraft sprite: NASA/JSC render — public domain
