Skip to main content
Pre-release

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

SensorKit

CI Coverage Docs PyPI Python License

Open-source orchestration for autonomous sensor systems. Built for space domain awareness, fully capable for time-domain astronomy.

SensorKit is a Python framework for edge-distributed control systems, plus a complete, extensible ground-based sensor stack built on it. It drives your hardware, manages multiple tasking sources, and runs the full operating lifecycle, from scheduling observations to standing down for weather. Configurable from a single YAML file.

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. ASCOM Alpaca, PlaneWave PWI4, Software Bisque TheSky, and more, all included.
  • 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.

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.

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

The modules table below lists every extra. See Installation for how to go from an empty config to running services.

Modules

Every module below ships in the box. Each one is an install extra named after the module, with underscores written as dashes, so node_platform becomes node-platform.

Module Kind What it does
alpaca Hardware ASCOM Alpaca cameras, mounts, domes, focusers, filter wheels, rotators, switches, weather, and safety monitors
autoslew Hardware ASA Autoslew mounts over Alpaca, including ASA satellite tracking, pointing model, and Nasmyth selection
indigo Hardware INDIGO (and INDI) devices over the INDIGO WebSocket protocol
nina Hardware N.I.N.A. equipment through the Advanced API plugin
node_platform Hardware Observable Space Node Platform mounts, enclosures, optics, and weather
pwi4 Hardware PlaneWave Instruments mounts, focusers, rotators, and covers over the PWI4 HTTP API
thesky Hardware Software Bisque TheSky over its JavaScript-over-TCP scripting interface
otto Program Autonomous satellite collection from NORAD IDs, orbit regimes, or Horizons names, across a camera parameter grid
udl Program Unified Data Library tasking. Polls CollectRequests, reports progress, and delivers products back
burr Program Sensor characterization and calibration tasking
senpai Analysis Per-frame astrometry and photometry, with results published back into the system
sky_transmission Analysis All-sky star matching for live cloud and sky-transmission telemetry
sdasim Simulation Synthetic SDA scene renderer that presents itself as an ordinary camera device
slack Notification Real-time Slack alerts and daily observatory summaries

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. Backend tests are parametrized over the fake backend and a
# real NATS server in a container; the latter is skipped when Docker is absent.
uv run pytest core/tests

# Force every test onto a live NATS server instead of the fake backend
SK_TEST_BACKEND=nats uv run pytest core/tests

# Also run tests needing site-local hardware or services
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.0b3.tar.gz (600.4 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.0b3-py3-none-any.whl (504.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sensorkit-2.0.0b3.tar.gz
  • Upload date:
  • Size: 600.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sensorkit-2.0.0b3.tar.gz
Algorithm Hash digest
SHA256 b8ea4fb15a9c68d9264f87c75ad23dc36a1e1fe7a6ddc080438753ff5d20b675
MD5 810226d6aa612278918ee32883cb7f26
BLAKE2b-256 4340d58f4c1638213e2e953e74f921725ed80d07f2a9cb3fa79d159c285eafdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for sensorkit-2.0.0b3.tar.gz:

Publisher: pypi.yml on sensorkit/sensorkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: sensorkit-2.0.0b3-py3-none-any.whl
  • Upload date:
  • Size: 504.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sensorkit-2.0.0b3-py3-none-any.whl
Algorithm Hash digest
SHA256 c0532dde856d56c9f82c2b0c904bbb607e873efd299d6ad7cc4998e60bfe800c
MD5 0a8f9d1a702ed899c66b1c032b1979e4
BLAKE2b-256 a6401e2d2b5eb6a334b635f4dbf3f8e8bba993631feed0f9e4c55ecc4ce9af19

See more details on using hashes here.

Provenance

The following attestation bundles were made for sensorkit-2.0.0b3-py3-none-any.whl:

Publisher: pypi.yml on sensorkit/sensorkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

2.0.0b3 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