Welcome to KeepTrack, an ambitious project aiming to make orbital analysis tools accessible to all. KeepTrack provides a simplified and streamlined experience for learning and
interacting with satellites and space debris. Built from the ground up with custom WebGL 2.0 shaders, an internal orbital mechanics library, and a high-performance render loop,
this is a lot more than just dots around a globe.
What makes KeepTrack unique:
Built with performance-first architecture
No installation required—runs in any modern browser
Offline capability for operations in restricted environments
See satellites up close in 3D, or zoom all the way out to the entire solar system
Who is KeepTrack For?
KeepTrack is used in operations centers, classrooms, and outreach programs around the world.
Operations Centers
Get popup alerts when satellites pass through sensor coverage
Find when sensors can see priority satellites in seconds
Simulate new launches for mission planning
Model satellite breakups and debris fields
Education
Learn through hands-on interaction
Use Xbox controllers for classroom demonstrations
Experience AAA video game quality graphics
Visualize complex orbital mechanics
Outreach
Embed KeepTrack on your website for free
Show satellite designs in orbit before launch
Explain space sustainability and the debris problem
Create custom demos for public engagement
Technology Stack
TypeScript - Type-safe development with ES6+ modules
# Clone the repository
git clone https://github.com/thkruz/keeptrack.space
cd keeptrack.space
# Install dependencies (this repo uses pnpm; `corepack enable` will provide it)
pnpm install
# Build the project
pnpm run build
# Start development server
pnpm start
Then open:http://localhost:5544 in your browser.
First time setup? The app will download the satellite catalog (~5 MB) on first load. This takes approximately 30 seconds.
Development Commands
Command
Description
pnpm start
Start dev server at localhost:5544
pnpm run build
Production build to /dist
pnpm run lint
Check code style
pnpm run lint:fix
Auto-fix linting issues
pnpm test
Run test suite
pnpm run sonar:up
Start a local offline SonarQube server (Docker)
pnpm run sonar
Run tests with coverage, then analyze against local SonarQube
pnpm run sonar:down
Stop the local SonarQube server
Run pnpm run for the full list. Two groups in it are not contributor tasks, and both say so when you run them rather than failing with a stack trace:
pnpm run pro dispatches the commercial edition’s tooling, which lives outside this repository, so the command just explains itself here. Nothing in the open-source build depends on it.
Publishing steps (upload:sourcemaps, release) push to infrastructure this project owns. They stop with a note about the missing credential. Point them at your own Cloudflare account if you want to run your own deployment.
pnpm run mesh-viewer is worth knowing about: it serves a standalone viewer that renders any OBJ+MTL through the engine’s exact mesh pipeline (layout, scale, shader, log depth), which is how models are checked before they ship. scripts/mesh-viewer/capture-meshes.ts and capture-angles.ts take headless verification shots through the same viewer.
Offline Code Quality Analysis (SonarQube)
Run the same static analysis we use, fully offline and self-hosted, with only Docker installed. No account setup, token juggling, or cloud service. See docs-local/sonarqube.md for details. The whole thing is one command:
pnpm run sonar # starts SonarQube, runs tests + coverage, scans, opens the dashboard
It auto-starts a local SonarQube server, mints an analysis token for you, enables anonymous access so the dashboard needs no login, runs the scan, and opens http://localhost:9000/dashboard?id=keeptrack. Run pnpm run sonar:down to stop the server when you’re done.
Troubleshooting
Port 5544 already in use?
The development server will automatically select an alternative port and display it in the terminal.
Build errors?
Ensure Node.js 24+ is installed: node --version
Clear the pnpm store cache: pnpm store prune
Delete node_modules and reinstall: rm -rf node_modules && pnpm install
Still having problems? Open an issue and I will address it as soon as possible.
Try a different browser (Chromium based browser recommended for development)
Catalog not loading?
Check network tab in browser DevTools
Verify api.keeptrack.space is accessible
Architecture
KeepTrack is transitioning from a monolithic structure to a clean, layered architecture that separates the rendering engine from application-specific features.
KeepTrack is based on the original Things in Space by James Yoder, released under the MIT License. While
the codebase has been completely 100% rewritten with new architecture, we acknowledge and appreciate the foundational concept.
Featured Users
KeepTrack is proud to have been used by:
Combined Space Operations Center - U.S. Space Force operations
Cosmos Archaeology - University of Lausanne exhibitions in Switzerland and China
StarTalk Podcast - Neil DeGrasse Tyson’s podcast
BBC News Coverage - BBC’s coverage of the 74th Intelligence, Surveillance and Reconnaissance Squadron
Espace Ballon - “Altitudes” exhibit with the short film “Human Debris in Space 1957-2024”
Space Waste Lab - Studio Roosegaarde art installation
KeepTrack™ and KeepTrack.space™ are trademarks of Kruczek Labs LLC.
✅ You may use “KeepTrack” to refer to this software
✅ You may say “powered by KeepTrack” or “based on KeepTrack”
❌ You may not use “KeepTrack” in your product name or domain
❌ You may not imply endorsement without permission
License
Copyright (C) 2025 Kruczek Labs LLC
KeepTrack is licensed under the GNU Affero General Public License v3.0 or later.
This means you can:
✅ Use KeepTrack for any purpose
✅ Modify the source code
✅ Distribute copies
✅ Distribute modified versions
Under these conditions:
📝 Disclose source code of modified versions
📝 License derivative works under AGPL-3.0
📝 Include copyright and license notices
📝 State significant changes made to the code
⚠️ Network use counts as distribution (AGPL-specific)
And you can’t:
❌ Sublicense under different terms
❌ Hold authors liable for damages
❌ Use without providing attribution
❌ Run a modified version as a service without sharing ALL source code
Example Use Cases
✅ Example 1: Educational Institution
You fork KeepTrack, add custom plugins for your astronomy course, and host it on your university’s public website for students.
Allowed - You must make your modified source code available (e.g., via GitHub) and clearly state what you changed. Include AGPL license and credit original authors.
❌ Example 2: Commercial SaaS Platform
You modify KeepTrack, rebrand it as “SatTracker Pro,” and offer it as a paid subscription service without sharing your source code.
Not allowed - Running modified AGPL software as a network service counts as distribution. You must provide source code to all users, even paying customers. The AGPL specifically
prevents this “SaaS loophole.” If this license obligation is violated, Kruczek Labs LLC may take legal action to enforce its intellectual property rights.
✅ Example 3: Open Source Contribution
You add a new debris collision analysis plugin, publish it on GitHub under AGPL-3.0, and submit a pull request to the main repository.
Allowed and encouraged! - Your plugin is properly licensed, source is available, and you’ve contributed back to the community. This is exactly what the AGPL is designed to enable.
The AGPL ensures that improvements to KeepTrack remain open source, even when used as a web service. If you run a modified version, you must make your source code available to users.
Need a different license?Contact Kruczek Labs about commercial licensing options.
Use of AI
KeepTrack uses AI-assisted development tools to maintain a large codebase with an international audience:
GitHub Copilot - Code acceleration and refactoring
Claude AI - Shader debugging and architecture troubleshooting
Stable Diffusion - Splash screen generation
OpenAI - Translations for 7 languages
Why? Managing 50,000+ lines of code, 50+ plugins, and 12 languages as a solo developer is unsustainable without assistance. These tools enable faster releases, better
internationalization, and more features while maintaining quality.
Could KeepTrack exist without AI? Yes - it did for years. But as the project grew to serve commercial, military, and educational institutions worldwide, AI became the most cost-effective way to
maintain quality at scale.
For contributors: You are NOT required to use AI tools. Whether you code with Vim or Copilot, contributions are equally valued. We care about code quality, not your workflow.
Disagree with this approach? You’re free to fork and maintain your version of KeepTrack however you prefer. We respect all development philosophies.
KeepTrack.space™
KeepTrack™ brings real orbital mechanics to students and educators. Used by EPFL’s Cosmos Archaeology, StarTalk, the 18th Space Defense Squadron, and ethicallyHackingspace, among many others.
Key Features:
Try it live | Installation | Join Discord | Screenshots
Table of Contents
Project Overview
Welcome to KeepTrack, an ambitious project aiming to make orbital analysis tools accessible to all. KeepTrack provides a simplified and streamlined experience for learning and interacting with satellites and space debris. Built from the ground up with custom WebGL 2.0 shaders, an internal orbital mechanics library, and a high-performance render loop, this is a lot more than just dots around a globe.
What makes KeepTrack unique:
Who is KeepTrack For?
KeepTrack is used in operations centers, classrooms, and outreach programs around the world.
Operations Centers
Education
Outreach
Technology Stack
Browser Requirements: WebGL 2.0 support
Installation
KeepTrack is automatically deployed to production and development environments:
Prerequisites
To build KeepTrack locally, you need:
node --versionto check)Quick Start
Then open:
http://localhost:5544in your browser.Development Commands
pnpm startlocalhost:5544pnpm run build/distpnpm run lintpnpm run lint:fixpnpm testpnpm run sonar:uppnpm run sonarpnpm run sonar:downRun
pnpm runfor the full list. Two groups in it are not contributor tasks, and both say so when you run them rather than failing with a stack trace:pnpm run prodispatches the commercial edition’s tooling, which lives outside this repository, so the command just explains itself here. Nothing in the open-source build depends on it.upload:sourcemaps,release) push to infrastructure this project owns. They stop with a note about the missing credential. Point them at your own Cloudflare account if you want to run your own deployment.pnpm run mesh-vieweris worth knowing about: it serves a standalone viewer that renders any OBJ+MTL through the engine’s exact mesh pipeline (layout, scale, shader, log depth), which is how models are checked before they ship.scripts/mesh-viewer/capture-meshes.tsandcapture-angles.tstake headless verification shots through the same viewer.Offline Code Quality Analysis (SonarQube)
Run the same static analysis we use, fully offline and self-hosted, with only Docker installed. No account setup, token juggling, or cloud service. See docs-local/sonarqube.md for details. The whole thing is one command:
It auto-starts a local SonarQube server, mints an analysis token for you, enables anonymous access so the dashboard needs no login, runs the scan, and opens
http://localhost:9000/dashboard?id=keeptrack. Runpnpm run sonar:downto stop the server when you’re done.Troubleshooting
Port 5544 already in use?
The development server will automatically select an alternative port and display it in the terminal.
Build errors?
node --versionpnpm store prunenode_modulesand reinstall:rm -rf node_modules && pnpm installBlank screen or WebGL errors?
Catalog not loading?
api.keeptrack.spaceis accessibleArchitecture
KeepTrack is transitioning from a monolithic structure to a clean, layered architecture that separates the rendering engine from application-specific features.
Project Structure
Key Systems
Rendering Pipeline (
engine/rendering/)Camera Management (
engine/camera/)Plugin System (
engine/plugins/)Catalog Manager (
app/data/)Web Workers (
webworker/)Design Principles
Engine Layer
The engine should be satellite-agnostic and reusable for other space applications:
Application Layer
The app layer contains domain-specific logic:
Plugin Layer
Plugins are optional features that can be enabled/disabled:
Contributing
We welcome contributions! Whether you’re fixing bugs, adding features, improving documentation, or creating new plugins, your help is appreciated.
Development Workflow
git clone https://github.com/YOUR-USERNAME/keeptrack.spacegit checkout -b feature/my-awesome-featurepnpm run lint(auto-fix withpnpm run lint:fix)git push origin feature/my-awesome-featuredevelopbranch (notmain)Code Standards
pnpm run lint(Biome check) before committingpnpm testand refer to the Regression Testing DocumentationAdding Features
Option 1: Create a Plugin (Recommended)
The easiest way to add features is via the plugin system. Plugins are:
Example plugin structure:
Place your plugin in
src/plugins/my-awesome-plugin/and register it in the plugin loader.Option 2: Modify Core Systems
For changes to the engine, rendering pipeline, or core architecture:
Pull Request Guidelines
Good PRs include:
Fixes #123)PR Review Process:
developbranchmainin the next releaseAreas We Need Help
Getting Help
Features
The feature set rivals those of expensive commercial toolkits, and includes:
Core Capabilities
Analysis Tools
Visualization
Integration
And Much More
Screenshots
Deployment
KeepTrack uses automated deployment via Cloudflare:
mainbranch (.env.app config) -> keeptrack.spacedevelopbranch (.env.app config) -> dev.keeptrack.spacemainbranch with (.env.embed config) -> embed.keeptrack.spaceRelease Notes
Recent Versions
Previous Versions
Contributors
Special thanks to all contributors who have helped make KeepTrack better:
Want to be listed? Submit a PR and add yourself!
Original Work
KeepTrack is based on the original Things in Space by James Yoder, released under the MIT License. While the codebase has been completely 100% rewritten with new architecture, we acknowledge and appreciate the foundational concept.
Featured Users
KeepTrack is proud to have been used by:
Using KeepTrack in your project? Let us know!
Trademarks
KeepTrack™ and KeepTrack.space™ are trademarks of Kruczek Labs LLC.
License
Copyright (C) 2025 Kruczek Labs LLC
KeepTrack is licensed under the GNU Affero General Public License v3.0 or later.
This means you can:
Under these conditions:
And you can’t:
Example Use Cases
✅ Example 1: Educational Institution
You fork KeepTrack, add custom plugins for your astronomy course, and host it on your university’s public website for students.
Allowed - You must make your modified source code available (e.g., via GitHub) and clearly state what you changed. Include AGPL license and credit original authors.
❌ Example 2: Commercial SaaS Platform
You modify KeepTrack, rebrand it as “SatTracker Pro,” and offer it as a paid subscription service without sharing your source code.
Not allowed - Running modified AGPL software as a network service counts as distribution. You must provide source code to all users, even paying customers. The AGPL specifically prevents this “SaaS loophole.” If this license obligation is violated, Kruczek Labs LLC may take legal action to enforce its intellectual property rights.
✅ Example 3: Open Source Contribution
You add a new debris collision analysis plugin, publish it on GitHub under AGPL-3.0, and submit a pull request to the main repository.
Allowed and encouraged! - Your plugin is properly licensed, source is available, and you’ve contributed back to the community. This is exactly what the AGPL is designed to enable.
For more details, see the Full License or visit https://www.gnu.org/licenses/agpl-3.0.html.
Why AGPL?
The AGPL ensures that improvements to KeepTrack remain open source, even when used as a web service. If you run a modified version, you must make your source code available to users.
Need a different license? Contact Kruczek Labs about commercial licensing options.
Use of AI
KeepTrack uses AI-assisted development tools to maintain a large codebase with an international audience:
Why? Managing 50,000+ lines of code, 50+ plugins, and 12 languages as a solo developer is unsustainable without assistance. These tools enable faster releases, better internationalization, and more features while maintaining quality.
Could KeepTrack exist without AI? Yes - it did for years. But as the project grew to serve commercial, military, and educational institutions worldwide, AI became the most cost-effective way to maintain quality at scale.
For contributors: You are NOT required to use AI tools. Whether you code with Vim or Copilot, contributions are equally valued. We care about code quality, not your workflow.
Disagree with this approach? You’re free to fork and maintain your version of KeepTrack however you prefer. We respect all development philosophies.
Additional Resources
Made with ❤️ by Theodore Kruczek and contributors
Website • Discord • Issues • Discussions • Contact