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 | 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 |
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)"]
- Universal Loading: Seamlessly load SPK, BPC, PCK, FK, TPC, and the new LKA (Location Kernel Anise) files.
- Analysis Engine: A declarative system to define engineering reports and events using S-Expressions. Define complex queries (eclipses, line-of-sight) on a client and execute them safely on remote workers without arbitrary code execution risks.
- Time System Mastery: Extensive support for all time systems (TT, TAI, ET, TDB, UTC, GPS) powered by the
hifitimelibrary. - Rigid Body Physics: Validated high-precision translations, rotations, and rigid body transformations.
- Frame Safety: ANISE checks that all frame translations or rotations are physically valid before performing any computation.
- Concurrency: Designed for modern hardware. Forget about mutexes and race conditions; ANISE guarantees thread safety.
This repository contains the entire ANISE suite:
π¦ ANISE Core (Rust)
The heart of the project. Direct access to the full range of features, memory safety, and robust error handling.
- Location:
./anise - Docs: API Documentation
π ANISE Python
First-class support for Python. Leverage Rust's speed without leaving your favorite scripting environment. Includes Jupyter notebooks and tutorials.
- Location:
./anise-py
π₯οΈ ANISE GUI
A 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.
- Location:
./anise-gui
βοΈ ANISE CLI
Command-line utilities for quick file inspection, downloading test data, and converting kernel formats.
- Location:
./anise-cli
We rigorously validate ANISE against SPICE. Our validation workflow runs:
- Over 100,000 queries on the
DE440.bspfile. - 7,305 queries for each frame in the
PCK08file (covering 20 years of data). - Thousands of rotations from Earth's high-precision BPC file.
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:
- de440s.bsp: JPL's latest ephemeris dataset (1900-2050).
- de440.bsp: JPL's long-term ephemeris dataset.
- pck08.pca: Planetary constants kernel (ANISE format), built from JPL's gravitational data.
- moon_fk_de440.epa: A Moon frame kernel built from JPL data.
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 [email protected].
