A browser-based controller for Seestar smart telescopes. Connect from any device on your local network to control your telescope, browse catalogs, capture images, and plan observation sessions.
Also available as a native desktop app for Linux and macOS.
Download and install the .deb — it sets up everything automatically:
curl -LO https://github.com/astrophotograph/esc/releases/latest/download/esc-web_2026.2.0_all.deb
sudo dpkg -i esc-web_2026.2.0_all.debThis installs ESC to /opt/esc, downloads Python and dependencies via uv, and starts a systemd service. First install takes a few minutes while dependencies are pulled.
Once installed, open http://<pi-ip>:9846 from any device on the same network.
# Manage the service
sudo systemctl status esc
sudo systemctl restart esc
journalctl -u esc -f
# Upgrade
curl -LO https://github.com/astrophotograph/esc/releases/latest/download/esc-web_2026.2.0_all.deb
sudo dpkg -i esc-web_2026.2.0_all.deb
# Uninstall
sudo dpkg -r esc-web # remove
sudo dpkg -P esc-web # purge (also removes venv and service user)Download the .deb or .rpm from the latest release:
# Debian/Ubuntu
sudo dpkg -i ESC_2026.2.0_amd64.deb
# Fedora/RHEL
sudo rpm -i ESC-2026.2.0-1.x86_64.rpmDownload ESC_2026.2.0_aarch64.dmg from the latest release and drag to Applications.
- Live Video Feed: MJPEG stream from the telescope with zoom, pan, and rotation
- Telescope Control: GoTo, tracking, focus, park, and manual movement
- Catalog Search: Browse deep sky objects, solar system targets, and star catalogs
- Session Planning: Plan observation sessions with target visibility analysis
- Image Processing: FITS support with stretch algorithms and plate solving
- Multiple Themes: Dark, light, and astronomy-optimized color schemes
- Dual Deployment: Run as a desktop app (Tauri) or web server (FastAPI)
ESC has two deployment modes that share the same React frontend:
- Desktop (Tauri): Rust backend with embedded Python via PyO3. Frontend communicates with Rust directly through Tauri IPC.
- Web (FastAPI): Python backend serving both the API and static frontend. Any browser on the local network can connect.
The API abstraction layer (src/services/api.ts) detects the runtime and routes calls accordingly:
React Frontend
↓
API Abstraction Layer
├─→ Desktop: Tauri IPC → Rust → PyO3 → Python
└─→ Web: HTTP POST /api/{command} → FastAPI → Python
- Node.js 18+ and pnpm 8+
- Rust (latest stable) — only needed for desktop builds
- uv (Python package manager):
curl -LsSf https://astral.sh/uv/install.sh | sh - Tauri prerequisites (desktop only): see Tauri docs
git clone https://github.com/astrophotograph/esc.git
cd esc
pnpm install
uv syncWeb mode (two terminals):
pnpm web:api # Python backend on :9846
pnpm web:dev # Vite dev server on :9273 (proxies /api to backend)Desktop mode:
./run-dev.sh # Sets up LD_LIBRARY_PATH and launches Tauri# Web frontend (outputs to dist-web/)
pnpm web:build
# Desktop app
pnpm tauri:build
# Web .deb package
pnpm web:build && ./deploy/build-deb.shpnpm test # TypeScript/React tests
pnpm test:python # Python tests
pnpm test:rust # Rust tests
pnpm test:all # Everything
pnpm test:coverage # With coverage reportpnpm format # Prettier (TypeScript)
pnpm format:python # Ruff (Python)
pnpm lint # ESLint
pnpm lint:python # Ruff linteresc/
├── src/ # React frontend
│ ├── components/ # UI components
│ ├── hooks/ # React hooks (polling, shortcuts, etc.)
│ ├── services/ # API abstraction layer
│ ├── stores/ # Zustand state stores
│ └── themes/ # Theme definitions
├── src-tauri/ # Rust backend (desktop mode)
│ └── src/
│ ├── commands/ # Tauri command handlers
│ └── python/ # PyO3 bridge
├── python/ # Python backend (web + embedded)
│ ├── telescope/ # Seestar bridge and discovery
│ ├── catalog/ # Deep sky object catalogs
│ ├── imaging/ # FITS processing, plate solving
│ ├── planning/ # Session planning
│ └── web_api.py # FastAPI server
├── deploy/ # Packaging (systemd, .deb build)
├── run-dev.sh # Desktop dev launcher
├── pyproject.toml # Python dependencies
└── package.json # Node dependencies
- Follow the existing code style
- Run
pnpm formatandpnpm lintbefore committing - Add tests for new features
See LICENSE file for details.