An accurate and efficient core layer for space flight dynamics applications
Orekit is a low level space dynamics library written
in Java. Orekit is designed to be easily used in very different contexts, from
quick studies up to critical operations.
As a library, Orekit provides basic
elements (orbits, dates, attitude, frames, …) and various algorithms to
handle them (conversions, propagations, pointing, events detection, orbit determination …).
Features
Accurate Orbit Propagation:
Supports analytical, semianalytical, numerical, and TLE-based propagation.
Flexible Orbit and Attitude Models:
Easily switch between Cartesian, Keplerian, circular, and equinoctial orbit representations.
Includes standard and customizable attitude laws (e.g., nadir, target pointing…).
Event Detection:
Built-in detectors for eclipses, ground station visibility…
Maneuver Modeling:
Supports impulse and continuous maneuvers with integration into propagation and event detection.
Robust Time and Reference Frames:
High-precision time handling with multiple time scales and leap second support.
Reference frames for Earth-centered and inertial calculations.
Orbit Determination:
Tools for orbit fitting, parameter estimation, and measurement processing.
Reliable Earth and Environmental Models:
Includes Earth shape and potential for realistic simulations.
Standard Format and Data Handling:
Supports reading and writing common space data formats for easy integration and interoperability.
Open Source and Easy Integration:
Thanks to its Apache License 2.0.
Your Orekit-dependant application will most likely require you to load previously downloaded Orekit data. A simple way
to do this is to use the following code snippet:
final File orekitData = new File("path/to/orekit/data/folder");
final DataProvider dirCrawler = new DirectoryCrawler(orekitData);
DataContext.getDefault().getDataProvidersManager().addProvider(dirCrawler);
Replace /path/to/orekit-data with the actual path to your unzipped data folder.
Getting Started
Keplerian propagation
In this section, you will learn the building blocks to create a KeplerianPropagator.
Note: It is assumed that the code necessary to load the Orekit data is written at the beginning of your script as
explained in Installation
1. Create an Orbit
The first step is to create an Orbit. Several types are available in Orekit:
KeplerianOrbit
CartesianOrbit
EquinoctialOrbit
CircularOrbit
For the sake of this example, we will build a KeplerianOrbit
double sma = 7000e3; // Semi-major axis [m]
double ecc = 0.001; // Eccentricity [-]
double inc = FastMath.toRadians(15); // Inclination [rad]
double pa = FastMath.toRadians(30); // Perigee Argument [rad]
double raan = FastMath.toRadians(45); // Right Ascension of the Ascending Node[rad]
double anomaly = FastMath.toRadians(60); // Anomaly [rad]
PositionAngleType positionAngleType = PositionAngleType.MEAN; // Type of anomaly angle used (MEAN, TRUE, ECCENTRIC)
Frame inertialFrame = FramesFactory.getGCRF(); // Earth-Centered Inertial frame
AbsoluteDate date = new AbsoluteDate(2002, 1, 1, 0, 0, 0, TimeScalesFactory.getUTC()); // Date of the orbit
double mu = Constants.EIGEN5C_EARTH_MU; // Earth's standard gravitational parameter used in EIGEN-5C gravity field model
Orbit orbit = new KeplerianOrbit(sma, ecc, inc, pa, raan, anomaly,
positionAngleType, inertialFrame, date, mu);
API | Documentation | Forum
Orekit is a low level space dynamics library written in Java. Orekit is designed to be easily used in very different contexts, from quick studies up to critical operations.
As a library, Orekit provides basic elements (orbits, dates, attitude, frames, …) and various algorithms to handle them (conversions, propagations, pointing, events detection, orbit determination …).
Features
Accurate Orbit Propagation: Supports analytical, semianalytical, numerical, and TLE-based propagation.
Flexible Orbit and Attitude Models: Easily switch between Cartesian, Keplerian, circular, and equinoctial orbit representations. Includes standard and customizable attitude laws (e.g., nadir, target pointing…).
Event Detection: Built-in detectors for eclipses, ground station visibility…
Maneuver Modeling: Supports impulse and continuous maneuvers with integration into propagation and event detection.
Robust Time and Reference Frames: High-precision time handling with multiple time scales and leap second support. Reference frames for Earth-centered and inertial calculations.
Orbit Determination: Tools for orbit fitting, parameter estimation, and measurement processing.
Reliable Earth and Environmental Models: Includes Earth shape and potential for realistic simulations.
Standard Format and Data Handling: Supports reading and writing common space data formats for easy integration and interoperability.
Open Source and Easy Integration: Thanks to its Apache License 2.0.
And much more !
Installation
1. Requirements
Before you begin, make sure you have the following installed:
2. Add Orekit as a Dependency
For Maven, add the following to your
pom.xmlinside the<dependencies>section:3. Download Orekit Data
Orekit requires external data files (Earth orientation parameters, leap seconds, etc.). To get these data, you can either:
Physical Dataon the Official Orekit website and extract the archive4. Load Orekit data
Your Orekit-dependant application will most likely require you to load previously downloaded Orekit data. A simple way to do this is to use the following code snippet:
Replace
/path/to/orekit-datawith the actual path to your unzipped data folder.Getting Started
Keplerian propagation
In this section, you will learn the building blocks to create a
KeplerianPropagator.1. Create an
OrbitThe first step is to create an
Orbit. Several types are available in Orekit:KeplerianOrbitCartesianOrbitEquinoctialOrbitCircularOrbitFor the sake of this example, we will build a
KeplerianOrbitOutput
Displaying this orbit using:
should output:
2. Create a
PropagatorNow that we have defined an orbit, we can create a
Propagatorto specify how the orbit will be propagated through time.In this case we will create a basic
KeplerianPropagator:3. Propagate !
You are now ready to propagate this orbit through time. To do so you can specify:
We will propagate for one
Constants.JULIAN_DAYstarting from the initial orbit date:Output
Displaying final state’s orbit using:
should output:
Full java code
Going further
Tutorials
For more advanced usage of Orekit, check out the Official Orekit tutorials repository.
Documentation
The following documentation is available:
Getting help
The main communication channel is our forum. You can report bugs and suggest new features in our issues tracking system.
Build & Run locally
Want to include your own modifications to Orekit rather than simply relying on it as a dependency ? Please check out building.md
Python wrapper
If interested in Official Orekit Python wrappers, please check out:
Download
Official releases
Official Orekit releases are available on our Gitlab instance. They are also available in the Maven repository.
Development version
To get the latest development version, please clone our official repository and checkout the
developbranch:Note: Our official repository is mirrored on Github.
Contributing
Orekit exists thanks to the contribution of many people. Please take a look at our contributing guidelines if you’re interested in helping!
Dependencies
Orekit relies on the following Free and Open-Source Software libraries, all released under business friendly FOSS licenses.
Compile-time/run-time dependencies
Test-time dependencies
JUnit 6, a widely used unit test framework released under the Eclipse Public License, version 1.0.
Mockito, a mocking framework for unit tests, released under MIT license.
ArchUnit, a framework for unit tests on software architecture, released under Apache License, version 2.0.
More detailed information is available in the Maven site.
How to cite
To cite Orekit in publications, please refer to the following Digital Object Identifier for the latest release: 10.5281/zenodo.7249096
For a specific version, search the zenodo website for their respective DOI.
License
Orekit is licensed by CS GROUP under the Apache License, version 2.0. A copy of this license is provided in the LICENSE.txt file.