Loading repository data…
Loading repository data…
nyx-space / repository
A thread-safe, zero-cost alternative to NASA SPICE toolkit, computing spacecraft, planetary, coordinate frame, instrument transformations, ground station visibility, and orbital elements. Engineered for high-throughput Python concurrent execution and flight software, with proven lunar flight heritage.
NASA TRL 9: ANISE was used throughout the operations of the Firefly Blue Ghost lunar lander, from launch until successful landing.
Tired of the usual complexities, global state, and lack of thread safety in legacy astrodynamics toolkits? ANISE is a fresh, Rust-powered alternative to the NAIF SPICE toolkit, engineered for modern computing environments.
Whether you are plotting a trajectory to Mars, orienting a constellation of satellites, or performing massive parallel analysis on the cloud, ANISE provides the tools you need to get it right.
Space missions demand precision, but modern engineering demands efficiency and safety.
| Feature | CSPICE / SpiceyPy | ANISE |
|---|---|---|
| Thread Safety | No (Global state/locks) | Guaranteed (Rust ownership) |
| Performance | Single-threaded | Parallel (many queries) |
| Math Validation | Runtime errors | Type-safe Frame checks |
| API Style | Procedural (Integer IDs) | Object-Oriented / Pythonic |
| Serialization | None | S-Expressions (Cloud Native) |
ANISE supports many SPICE kernels. Binary kernels are supported as-is, while text kernels must be transformed into their ANISE equivalent (usually .pca or .lka files).
| Kernel Type | Supported | Note |
|---|---|---|
| BSP / SPK | ✅ | Supported as-is |
| BPC | ✅ | Supported as-is |
| TK (Text) | 🔄 | Supported after transformation |
| LSK | 🔄 | Supported after transformation |
| GM | 🔄 | Supported after transformation |
| CK | ❌ | Yet to be supported |
| SCLK | ❌ | Yet to be supported |
| DSK | ❌ | Yet to be supported |
| IK / EK | ❌ | Yet to be supported |
For more details on SPK types, refer to the NAIF SPK Required Reading. The following table summarizes the types supported by ANISE.
| SPK Type | Interpolation | NAIF SPICE | ANISE | Typically used in |
|---|---|---|---|---|
| Type 1 | Modified Differences | ✅ | ✅ | NASA internal trajectory tools (e.g. DPTRAJ) |
| Type 2 | Chebyshev Triplet | ✅ | ✅ | Planetary ephemerides (e.g., JPL DE series) |
| Type 3 | Chebyshev Sextuplet | ✅ | ✅ | Planetary ephemerides (e.g., JPL DE series) |
| Type 5 | Discrete states | ✅ | ❌ | Two-body propagation |
| Type 8 | Lagrange (Equal Step) | ✅ | 🧪 | Uncommon spacecraft trajectories from numerical integration |
| Type 9 | Lagrange (Unequal Step) | ✅ | ✅ | Spacecraft trajectories from numerical integration |
| Type 10 | Space Command TLE | ✅ | ❌ | Please don't use TLEs, a punch-card format (no joke) |
| Type 12 | Hermite (Equal Step) | ✅ | 🧪 | Uncommon spacecraft trajectories from numerical integration |
| Type 13 | Hermite (Unequal Step) | ✅ | ✅ | Spacecraft trajectories from numerical integration |
| Type 14 |
Note: 🧪 means the SPK type is supported but no public SPK of that type could be found to validate the implementation. Please provide one if you have one!
ANISE is a "Core + Bindings" ecosystem. The heavy lifting is done in Rust, ensuring maximum performance and safety, which is then exposed to your language or tool of choice.
graph TD
Data[Kernels: SPK, PCK, LKA] --> Core
Core["ANISE Core (Rust)"]
Core --> Bindings[Bindings & Tools]
Bindings --> Py["Python (anise-py)"]
Bindings --> CLI["CLI Tools (anise-cli)"]
Bindings --> GUI["Visualizer (anise-gui)"]
Bindings --> CPP["C++ (Coming Soon)"]
hifitime library.This repository contains the entire ANISE suite:
The heart of the project. Direct access to the full range of features, memory safety, and robust error handling.
./aniseFirst-class support for Python. Leverage Rust's speed without leaving your favorite scripting environment. Includes Jupyter notebooks and tutorials.
./anise-pyA graphical interface to inspect your data files. Quickly check segment start/end times in any time scale (including UNIX UTC seconds) for SPK, BPC, and PCA files.
./anise-guiCommand-line utilities for quick file inspection, downloading test data, and converting kernel formats.
./anise-cliWe rigorously validate ANISE against SPICE. Our validation workflow runs:
DE440.bsp file.PCK08 file (covering 20 years of data).A Note on Precision: The PCK data from the IAU is based on polynomial approximations expressed in centuries past J2000. While legacy toolkits use floating-point arithmetic for time, ANISE uses hifitime (integer arithmetic) for all time computations. You might see discrepancies of up to 1 millidegree in rotation angles, but this represents ANISE's higher temporal precision avoiding floating-point rounding errors.
Nyx Space provides several important SPICE files for your convenience:
Note on Lunar Frames: For accurate lunar work, we recommend using the
moon_fk_de440.epafile withmoon_pa_de440_200625.bpc(Principal Axes) and an ephemeris file (e.g.,de440.bsp), rather than the low-fidelity IAU Moon frame. Seemoon_de440_220930.txtfor details.
ANISE is an open-source project, and we welcome contributions! Whether you want to request a feature, report a bug, contribute code, or improve the documentation, we appreciate your help.
ANISE is distributed under the Mozilla Public License 2.0 (MPL-2.0). This license allows you to use ANISE in both open and proprietary software, with the requirement that any modifications to the ANISE source code are also released under the MPL-2.0.
For more details, see the full license text or a summary on GitHub.
ANISE is heavily inspired by the NAIF SPICE toolkit and its excellent documentation.
Have questions or feedback? Open an issue on GitHub or email the maintainer at christopher.rabotin@gmail.com.
| Chebyshev Sextuplet (Unequal Step) |
| ✅ |
| ❌ |
| Never seen in the wild, probably good for slow-moving objects |
| Type 15 | Precessing Conic Propagation | ✅ | ❌ | Precessing conic elements |
| Type 17 | Equinoctial Elements | ✅ | ❌ | NAIF docs |
| Type 18 | ESOC/DDID Hermite/Lagrange Interpolation | ✅ | ❌ | NAIF docs |
| Type 19 | ESOC/DDID Piecewise Interpolation | ✅ | ❌ | NAIF docs |
| Type 20 | Chebyshev Triplet (velocity only) | ✅ | ❌ | NAIF docs |
| Type 21 | Extended Modified Difference Arrays | ✅ | ❌ | NAIF docs |