Nebula Space Toolkit
nstk is the Python package for Nebula Space Toolkit, a library for space
systems engineering and analysis. It is designed for users who need reusable
building blocks for orbit propagation, coordinate transforms, geometry,
coverage analysis, localization workflows, and mission-oriented plotting.
What NSTK Provides
- Orbit construction and propagation interfaces built around Orekit
- Coordinate and frame transforms for common astrodynamics workflows
- Coverage and access analysis utilities
- Line-of-sight, terrain, and other geometric analysis tools
- Localization and measurement helpers for angle, time-difference, and frequency-difference studies
- 2D and 3D plotting tools for orbits and geospatial views
Package Layout
The top-level package is organized into the following modules:
nstk.propagation: orbit creation, propagation, and Walker constellationsnstk.transforms: geodetic, ECEF, ENU, AER, and timed frame transformsnstk.geometry: line-of-sight, terrain, raster-mask, and sun-position toolsnstk.coverage: interval and fixed-step coverage analysisnstk.localization: measurement models and localization helpersnstk.plotting: basemaps and orbit visualizationnstk.time_utils: shared Orekit and Astropy time conversion helpers
Installation
Install the base package with:
pip install nstk
The base install includes the core package plus the offline data dependency
nstk-data.
Optional extras are available for heavier workflows:
pip install "nstk[propagation]"
pip install "nstk[plotting]"
pip install "nstk[all]"
Extras are intended for:
propagation: Orekit-backed propagation and timed frame operationsplotting: Cartopy and related geospatial plotting supportall: all optional dependencies used by the project
Installing From Source
For local development, install from the repository root:
python -m pip install -e .
To include optional features during development:
python -m pip install -e ".[propagation]"
python -m pip install -e ".[plotting]"
python -m pip install -e ".[all]"
If Orekit-backed features later report that nstk-data is missing, install it
into the same environment as nstk and your Jupyter kernel:
python -m pip install nstk-data
Data and Runtime Behavior
Nebula Space Toolkit uses the separate nstk-data package for bundled Orekit
and Cartopy assets. This keeps the code package smaller and allows data updates
to be managed independently.
Orekit-backed features initialize lazily on first use. Most users do not need to do anything beyond installing the appropriate extra.
If you want one simple top-level setup call for Orekit plus NSTK's bundled offline Cartopy assets, initialize the runtime once near the top of your script or notebook:
import nstk
nstk.initialize()
For fully offline-friendly workflows, disable Astropy IERS downloads and relax its IERS age checks through the same entry point:
import nstk
nstk.initialize(offline=True)
If you want to use custom data directories instead of the bundled
nstk-data package, pass them explicitly:
import nstk
nstk.initialize(
orekit_data_path="/path/to/orekit-data",
cartopy_data_path="/path/to/cartopy-data",
)
For Orekit-only advanced workflows, the lower-level helpers
nstk.initialize_orekit(...) and nstk.set_orekit_data_path(...) remain
available.
Minimal Example
The example below shows a simple Orekit-backed orbit workflow:
import nstk
nstk.initialize()
from astropy.time import Time
from nstk.propagation import Orbit, build_two_body_propagator
propagator = build_two_body_propagator(
epoch=Time("2026-01-01T00:00:00", scale="utc"),
a=7000e3,
e=0.001,
i=0.9,
raan=0.1,
argp=0.2,
anomaly=0.3,
anomaly_type="mean",
inertial_frame="gcrf",
)
orbit = Orbit(propagator)
position_m = orbit.get_position(0.0, frame="gcrf")
print(position_m)
This example requires the propagation extra.
Orbit Attitude Defaults
NSTK orbit propagators default to attitude="vvlh", which is implemented as
Orekit LofOffset(native_frame, LOFType.VVLH). This is a reasonable default
for a general Earth-observing satellite because it keeps the spacecraft body in
a local orbital, nadir-pointing attitude law.
Supported local-orbital attitude names include:
vvlhandlvlh_ccsdsfor the CCSDS-style local orbital frame familylvlhandqswfor Orekit's STK/Vallado-style LVLH familytnw,ntw,vnc,eqw,enu, andnedfor other built-in Orekit local orbital frames
You can also pass an Orekit LOFType, a prebuilt Orekit AttitudeProvider,
or one of NSTK's attitude-provider helpers through attitude_provider= on a
propagator factory, and later swap the installed provider with
Orbit.set_attitude_provider(...).
Examples
Additional usage examples are provided in the examples/ directory, including:
- orbit usage
- orbit attitude configuration
- transforms
- Walker constellations
- interval coverage
Project Identity
- Brand name:
Nebula Space Toolkit - PyPI package:
nstk - Python import:
import nstk
Attribution
NSTK is a part of Nebula Space Systems
Metadata
Release files for nstk 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| nstk-0.1.3.tar.gz | 13.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nstk-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.8 MB
Release files / nstk-0.1.3.tar.gz
| Download URL | nstk-0.1.3.tar.gz |
|---|---|
| Size | 13.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6cefb05d159ac8825966475670f9d647d1d3c104e7ba70a06fc693a6e65a8f3
|
|
BLAKE2b-256 checksum How to use checksums |
27c0b3efaa9877bfd641df1b00b67ddaf711fa16b7ec634f33d41df9b357e4d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 13, 2026.
Transparency logRelease files / nstk-0.1.3-py3-none-any.whl
| Download URL | nstk-0.1.3-py3-none-any.whl |
|---|---|
| Size | 444.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1741d86f930d82ddb5f423ab0b7766d338d436a877a553308e2f39d7f6c22764
|
|
BLAKE2b-256 checksum How to use checksums |
b2818a88929e6aa3088b8586c75469d5094720522510605cd0df0f22b0cd6247
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 13, 2026.
Transparency log