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 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].
