A secure, React-free Electron desktop application for exploring astronomy data and planning observations. Built with vanilla JavaScript, HTML, and CSS โ plus a static browser build that runs the same UI without Electron.
Live demo: https://guildmasterdev.github.io/Astronomer/
- NASA APOD: Browse Astronomy Picture of the Day with date picker and random selection
- Image & Video Library: Search NASA's extensive media collection
- EPIC Earth Images: View recent natural color images of Earth from space
- ISS Tracker: Real-time International Space Station position and pass predictions
- Discover what Hubble saw on your birthday
- Browse through years of Hubble observations
- Smart date matching with ยฑ3 day tolerance
- Location-based observation planning (manual or GPS)
- Twilight times (civil, nautical, astronomical)
- Moon phase and illumination calculations
- Planet visibility predictions
- ISS pass predictions for your location
- Solar System object catalog with real-time data
- Notable exoplanet database
- Distance calculations and tracking
- Quick facts and observation windows
- Save any image, object, or observation
- Export favorites as JSON
- Share functionality with system integration
- NASA API key configuration
- Dark/Light theme switching
- Metric/Imperial units
- Location defaults
- Performance modes and caching
The live demo at https://guildmasterdev.github.io/Astronomer/ runs the same UI directly in the browser โ no download required. A few notes:
- It defaults to NASA's shared
DEMO_KEY, which has tight hourly rate limits. A one-minute signup at https://api.nasa.gov/ yields a free personal key; drop it into Settings โ NASA API Key and the demo-mode banner disappears. - Favorites and settings persist to
localStorage, so they stay on the device you used. - Everything astronomical โ twilight, moon phase, planet positions, ISS passes โ runs client-side via
astronomy-engineandsatellite.js. - Location can come from the browser's Geolocation API (you'll be prompted) or from a manual entry.
The desktop build remains the better option for heavy usage (no CORS constraints, persistent encrypted store, native dialogs).
- Context Isolation: Enabled by default
- Sandbox Mode: All renderer processes sandboxed
- CSP Headers: Strict Content Security Policy
- API Whitelisting: Only approved endpoints accessible
- Rate Limiting: Built-in request throttling
- No Remote Code: No external script execution
- Node.js 20+
- npm
- NASA API Key (optional, uses
DEMO_KEYby default โ configure in the in-app Settings)
# Clone the repository
git clone https://github.com/guildmasterdev/Astronomer.git
cd Astronomer
# Install dependencies
npm install
# Run the desktop app
npm run dev- Visit api.nasa.gov
- Register for a free API key
- Add it in Settings โ NASA API Key (desktop or web)
# Desktop production build (TypeScript + Vite renderer)
npm run build
# Package desktop app for a specific platform
npm run pack:mac
npm run pack:win
npm run pack:linux
# Static web build (output: dist-web/)
npm run build:web
npm run preview:web # local preview| Shortcut | Action |
|---|---|
1-6 |
Switch tabs (Explore, Birthday, Observe, Objects, Favorites, Settings) |
Cmd/Ctrl+F |
Focus search |
Cmd/Ctrl+K |
Quick actions |
R |
Refresh current view |
Cmd/Ctrl+E |
Export favorites |
Esc |
Close modal |
Astronomer/
โโโ src/
โ โโโ main/ # Electron main process
โ โ โโโ main.ts # App entry point, BrowserWindow + CSP
โ โ โโโ menu.ts # Application menu
โ โ โโโ store.ts # Persistent storage (electron-store)
โ โ โโโ ipc.ts # IPC handlers
โ โ โโโ endpoints.ts # API whitelist
โ โ โโโ astronomy.ts # Sun/moon/planet compute
โ โ โโโ iss.ts # TLE + SGP4 pass prediction
โ โ โโโ rate-limiter.ts
โ โโโ preload/ # Secure context bridge
โ โ โโโ preload-simple.js
โ โโโ renderer/ # UI (vanilla JS, shared by desktop + web)
โ โ โโโ index.html
โ โ โโโ styles.css
โ โ โโโ app-complete.js # application logic
โ โ โโโ public/vendor/ # bundled Leaflet
โ โโโ web/ # Static browser build
โ โโโ index.html # web shell with demo banner
โ โโโ main.js # window.astronomer shim + loader
โ โโโ prepare.mjs # stages shared renderer assets
โโโ dist/ # Compiled desktop output
โโโ dist-web/ # Compiled web output
โโโ dist-electron/ # Packaged installers
npm run dev # Compiles TS then launches Electron
npm run dev:vite # Vite-hosted renderer (for live reload)
npm run build:web # Static web build
npm test # vitest
npm run test:e2e # playwright
npm run lint # ESLint 9 (flat config)
npm run typecheck # tsc --noEmitThe app uses these NASA and astronomy APIs (whitelisted in both the desktop CSP and the web fetch adapter):
- NASA APOD API
- NASA Image and Video Library
- NASA EPIC API
- JPL Horizons API
- ISS Location API (wheretheiss.at)
- ISS TLE (tle.ivanstanojevic.me)
- NASA Exoplanet Archive
- No tracking: Zero telemetry by default
- Local storage: All data stored locally (
electron-storeon desktop,localStoragein the web demo) - No accounts: No user accounts or cloud sync
- Whitelisted APIs: Desktop builds route every external call through a validated allow-list; CSP blocks everything else
- Open source: Full code transparency
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License โ see LICENSE file for details.
- NASA APIs for providing amazing space data
astronomy-enginefor celestial calculationssatellite.jsfor SGP4/SDP4 propagation- Electron team for the framework
- All contributors and testers
- Report issues: GitHub Issues
- Documentation: Wiki
Built with โค๏ธ for space enthusiasts everywhere
