Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

SensorKit

An open-source control system for autonomous observatories, built for space domain awareness and time-domain astronomy. SensorKit connects your telescope hardware to an automation layer that decides — continuously and safely — when to open the dome, what to observe, and when to shut down, whether that's for a passing satellite, a transient follow-up, or an ordinary night of survey work.

You describe your site in a single YAML file: which mount, camera, and dome you have, what weather limits you trust, and which observing programs are allowed to request time. SensorKit runs the night.

Highlights

  • Autonomous operation. An agent service evaluates operating modes, weather and safety constraints, and program schedules — then starts up, tasks, and shuts down each sensor on its own. A single command hands control back to a human.
  • Speaks your hardware's language. Drivers for ASCOM Alpaca, PlaneWave PWI4, and Software Bisque TheSky are included, with additional modules for INDIGO (INDI devices), NINA, and the Observable Space Node Platform.
  • Satellite tracking as a first-class citizen. Targets can be fixed alt/az or ICRS positions, TLEs, state vectors, or precomputed ephemerides. SensorKit propagates orbits and drives mounts in rate-tracking modes for fast-moving objects.
  • Observing programs in a few dozen lines of Python. A program advertises when it has work and produces the next task when asked. Scheduling, priorities, device sequencing, and FITS writing are handled for you.
  • Configuration-defined data flow. Camera frames move through a pipeline you declare in YAML: FITS headers populated from live telescope state, compression, disk, or hand-off to analysis services.
  • Built to be pulled apart. Every device driver, sensor controller, program, and the agent itself is an independent service communicating over NATS JetStream — run them on different machines, restart them independently, swap them freely.

Batteries included: Otto (standalone satellite observation scheduling), UDL (Unified Data Library tasking), and Burr (sensor characterization tasking) observing programs, plus analysis modules for astrometry and photometry (SENPAI) and all-sky transmission, and sdasim — a synthetic SDA scene renderer. SensorView is the graphical interface to a running system.

Quick start

The repository ships a complete simulated observatory — mount, camera, dome, and weather simulators with the full automation stack on top. No hardware, just Docker:

git clone <repo-url>
cd sensorkit/deploy/simulated
docker compose up --build

Open http://localhost:6080 to watch the simulated mount slew to targets. The quick start guide walks through the rest: exploring the system with the CLI, connecting SensorView, and reading the 35-line observing program that drives it.

For a demo, watch this 24/7 YouTube stream of SensorKit orchestrating:

  • An AlpacaSensor, tasked by Otto (4 random, visible GEOs)
  • A PWI4Sensor, listening to the UDL & being tasked (via bot) every 2 min in SensorView
  • A TheSkySensor, listening to NEOCP alerts (via NASA/JPL Scout)

All applications are being run on and streamed from a low-power x86 mini-PC.

Installation

pip install sensorkit

Hardware and feature support ships as optional extras — install only what your site uses:

pip install "sensorkit[alpaca,pwi4]"

SensorKit requires Python 3.13+ and a NATS server with JetStream enabled:

docker run -d --name nats -p 4222:4222 nats:alpine -js
export NATS_URL=nats://localhost:4222

See Installation for the full list of extras and how to go from an empty config to running services.

Documentation

Full documentation lives in docs/ — quick start, installation, configuration, guides for devices, sensors, programs, and the agent, plus CLI and API references. To build and serve it locally:

uv run zensical serve

Development

Requirements: Python 3.13+, uv

git clone <repo-url>
cd sensorkit
uv sync --all-extras

# Run the test suite
uv run pytest core/tests

# Run tests against a live NATS server (requires Docker)
SK_TEST_BACKEND=nats ENV=local uv run pytest core/tests

# Lint and check import-layer contracts
uv run ruff check core modules
uv run lint-imports

To run the stack natively against the containerized simulators during development, see Trying it against simulators.

Status

SensorKit is in beta and under active development. It runs real telescopes nightly, but APIs and configuration formats are still evolving, and some corners are unfinished. Feedback and issues are very welcome.

Contributing

Contribution guidelines, PR process, and coding standards are still being documented. In the meantime, please open an issue before starting work on a significant change.

License

Licensed under the Apache License 2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sensorkit-2.0.0b2.tar.gz (508.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sensorkit-2.0.0b2-py3-none-any.whl (446.6 kB view details)

Uploaded Python 3

File details

Details for the file sensorkit-2.0.0b2.tar.gz.

File metadata

  • Download URL: sensorkit-2.0.0b2.tar.gz
  • Upload date:
  • Size: 508.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.8

File hashes

Hashes for sensorkit-2.0.0b2.tar.gz
Algorithm Hash digest
SHA256 93835d0ecd7ad3daae690432009116f3658727a80994878969928738d01d1eda
MD5 f4eca7ed2b98436ec04adde9717574d1
BLAKE2b-256 002860ec9dba5bf7d4a042aef4deb1c82709af5813e4e805b19fa113b1200a27

See more details on using hashes here.

File details

Details for the file sensorkit-2.0.0b2-py3-none-any.whl.

File metadata

File hashes

Hashes for sensorkit-2.0.0b2-py3-none-any.whl
Algorithm Hash digest
SHA256 21a6542d048a42b3b3e7164ad47b8905458ff9ccffd500597adab273388648b7
MD5 a5e800c19b925441df6cb57fdca4488a
BLAKE2b-256 d0b8dce9153df5fbba0f92e4fd6c88502c6e76de9407e355d756c7a0cc0a41b6

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.0.0b2 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page