Real-time 3D satellite & debris tracker. Every tracked object in Earth orbit (~36,000 satellites, rocket bodies, and debris fragments) rendered on an interactive globe with positions propagated live in your browser or as a desktop app.
- Full catalog, live. The complete public catalog animates at 60 fps, each object at its SGP4-propagated position.
- True orientation. The globe rotates in real sidereal time; the day/night terminator follows the actual sun position.
- Time control. Pause, run at ±1× to ±1000×, jump by hours or days. Propagation works at any epoch, so the past and future are one scrub away.
- Search & filter. By name, NORAD ID, object type (payload / rocket body / debris), orbit regime (LEO / MEO / GEO / HEO), country/operator, and altitude band.
- Object details. Click any dot or search-select: live latitude/ longitude/altitude/speed, orbital elements, orbit line, and ground track.
Tracking INSAT-4A in geostationary orbit, running at 1000× speed:
Requirements: Node.js 20+.
npm install
cp .env.example .env.local # optional: add your KeepTrack API key
npm run dev # http://localhost:5173Orbital data comes from the KeepTrack API
(free tier available). Either put your key in .env.local or just start the
app, which will ask once and store the key locally on your device.
npm run distProduces a portable, no-install executable at
release/UpThere-<version>-portable.exe. For a quick unpackaged run:
npm run desktopThe short version:
- The catalog's orbital elements (TLEs) are fetched once in bulk and cached in IndexedDB for 3 hours, since elements drift slowly.
- A pool of Web Workers runs the SGP4 propagator
(
ootk) over catalog slices every few simulation seconds, returning positions and velocities as transferable arrays. - All objects render as a single
THREE.Pointsdraw call; the vertex shader dead-reckonsposition + velocity × dtbetween worker refreshes, so per-frame cost on the main thread is independent of object count. - The world frame is ECI: satellites need no transform, and the Earth mesh itself rotates by GMST, which is what makes the sidereal rotation and ground tracks exact.
The long version, including the threading model, coordinate conventions and scheduling policy: docs/ARCHITECTURE.md.
VITE_KT_API_KEY is embedded in the client bundle at build time. That is
acceptable for local development and personal desktop builds, but do not
publish a hosted build with your key baked in: proxy the KeepTrack API
through a small backend that attaches the key server-side, or leave the
variable unset so each user supplies their own key at first launch.
See CONTRIBUTING.md.

