# cs-si/orekit architecture

> Architecture diagram of the GitHub repository cs-si/orekit, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cs-si/orekit
- Repository: https://github.com/cs-si/orekit

## Overview

Orekit is a Java space-flight-dynamics library. A representative user workflow is to configure data access, define an orbit and propagation model, then propagate to obtain spacecraft states; propagation also supports event detection and state sampling. Other major capabilities include orbit determination, attitude and maneuver modeling, environmental models, and standard-format data handling. The graph combines README-documented workflow and capabilities with relationships visible in sampled source or the source index; paths for unsampled subsystems use exact directories from the tree.

Main entry points: [`src/main/java/org/orekit/propagation/SpacecraftState.java`](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/SpacecraftState.java) (Spacecraft state), [`src/main/java/org/orekit/propagation`](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/propagation) (Orbit propagation), [`src/main/java/org/orekit/orbits/Orbit.java`](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/orbits/Orbit.java) (Orbit models), [`src/main/java/org/orekit/data/DataProvidersManager.java`](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/data/DataProvidersManager.java) (Data access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_foundations["Time and geometry"]
  node_time["Time scales<br/>[AbsoluteDate.java]"]
  node_frames["Reference frames<br/>[Frame.java]"]
  node_exceptions["Error reporting"]
end

subgraph group_dynamics["Orbit dynamics"]
  node_orbit["Orbit models<br/>[Orbit.java]"]
  node_propagation["Orbit propagation"]
  node_spacecraft_state["Spacecraft state"]
  node_events["Event detection<br/>[EventDetector.java]"]
  node_step_sampling["Step sampling"]
  node_field_state["Field spacecraft state"]
  node_field_events["Field event detection"]
end

subgraph group_determination["Orbit determination"]
  node_measurements["Measurements"]
  node_estimation["Orbit estimation"]
  node_iod["Initial orbit determination"]
end

subgraph group_data["Data and formats"]
  node_data_access["Data access"]
  node_providers["Data providers"]
  node_filters["Data filters"]
  node_format_io["Space data formats"]
end

subgraph group_models["Mission models"]
  node_attitude["Attitude models"]
  node_maneuvers["Maneuver models"]
  node_environment["Earth environment"]
end

node_user(("Library user"))

node_user -->|"configures"| node_data_access
node_user -->|"defines"| node_orbit
node_user -->|"creates and runs"| node_propagation
node_orbit -->|"initializes"| node_propagation
node_propagation -->|"returns"| node_spacecraft_state
node_data_access -->|"crawls"| node_providers
node_data_access -->|"uses"| node_filters
node_estimation -->|"processes"| node_measurements
node_estimation -->|"uses"| node_spacecraft_state
node_estimation -->|"handles"| node_measurements
node_spacecraft_state -->|"contains"| node_orbit
node_spacecraft_state -->|"contains"| node_attitude
node_field_state -->|"converts to"| node_spacecraft_state
node_events -->|"evaluates"| node_spacecraft_state
node_field_events -->|"evaluates"| node_field_state
node_step_sampling -->|"interpolates"| node_spacecraft_state
node_exceptions -->|"reports errors for"| node_time
node_iod -.->|"estimates"| node_orbit
node_propagation -.->|"supports detection"| node_events
node_propagation -.->|"supports sampling"| node_step_sampling
node_propagation -.->|"integrates maneuvers"| node_maneuvers
node_orbit -.->|"uses"| node_frames
node_orbit -.->|"uses"| node_time
node_format_io -.->|"loads data"| node_data_access
node_environment -.->|"uses data"| node_data_access

click node_data_access "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/data/DataProvidersManager.java"
click node_providers "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/data"
click node_filters "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/data/FiltersManager.java"
click node_time "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/time/AbsoluteDate.java"
click node_frames "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/frames/Frame.java"
click node_orbit "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/orbits/Orbit.java"
click node_propagation "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/propagation"
click node_spacecraft_state "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/SpacecraftState.java"
click node_events "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/events/EventDetector.java"
click node_step_sampling "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/sampling/OrekitStepInterpolator.java"
click node_attitude "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/attitudes"
click node_maneuvers "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/forces/maneuvers"
click node_environment "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/models/earth"
click node_measurements "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/estimation/measurements"
click node_estimation "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/estimation/leastsquares"
click node_iod "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/estimation/iod"
click node_format_io "https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/files"
click node_exceptions "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/errors/OrekitException.java"
click node_field_state "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/FieldSpacecraftState.java"
click node_field_events "https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/events/FieldEventDetector.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_time,node_frames,node_exceptions,node_user toneBlue
class node_orbit,node_propagation,node_spacecraft_state,node_events,node_step_sampling,node_field_state,node_field_events toneAmber
class node_measurements,node_estimation,node_iod toneMint
class node_data_access,node_providers,node_filters,node_format_io toneRose
class node_attitude,node_maneuvers,node_environment toneIndigo
```

## Components

### Time and geometry

- [Time scales](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/time/AbsoluteDate.java): `src/main/java/org/orekit/time/AbsoluteDate.java`
- [Reference frames](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/frames/Frame.java): `src/main/java/org/orekit/frames/Frame.java`
- [Error reporting](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/errors/OrekitException.java): `src/main/java/org/orekit/errors/OrekitException.java`

### Orbit dynamics

- [Orbit models](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/orbits/Orbit.java): `src/main/java/org/orekit/orbits/Orbit.java`
- [Orbit propagation](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/propagation): `src/main/java/org/orekit/propagation`
- [Spacecraft state](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/SpacecraftState.java): `src/main/java/org/orekit/propagation/SpacecraftState.java`
- [Event detection](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/events/EventDetector.java): `src/main/java/org/orekit/propagation/events/EventDetector.java`
- [Step sampling](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/sampling/OrekitStepInterpolator.java): `src/main/java/org/orekit/propagation/sampling/OrekitStepInterpolator.java`
- [Field spacecraft state](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/FieldSpacecraftState.java): `src/main/java/org/orekit/propagation/FieldSpacecraftState.java`
- [Field event detection](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/propagation/events/FieldEventDetector.java): `src/main/java/org/orekit/propagation/events/FieldEventDetector.java`

### Orbit determination

- [Measurements](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/estimation/measurements): `src/main/java/org/orekit/estimation/measurements`
- [Orbit estimation](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/estimation/leastsquares): `src/main/java/org/orekit/estimation/leastsquares`
- [Initial orbit determination](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/estimation/iod): `src/main/java/org/orekit/estimation/iod`

### Data and formats

- [Data access](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/data/DataProvidersManager.java): `src/main/java/org/orekit/data/DataProvidersManager.java`
- [Data providers](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/data): `src/main/java/org/orekit/data`
- [Data filters](https://github.com/cs-si/orekit/blob/develop/src/main/java/org/orekit/data/FiltersManager.java): `src/main/java/org/orekit/data/FiltersManager.java`
- [Space data formats](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/files): `src/main/java/org/orekit/files`

### Mission models

- [Attitude models](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/attitudes): `src/main/java/org/orekit/attitudes`
- [Maneuver models](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/forces/maneuvers): `src/main/java/org/orekit/forces/maneuvers`
- [Earth environment](https://github.com/cs-si/orekit/tree/develop/src/main/java/org/orekit/models/earth): `src/main/java/org/orekit/models/earth`

### Other components

- **Library user**

## Connections

- Library user → Data access: configures (evidence: `README.md`)
- Library user → Orbit models: defines (evidence: `README.md`)
- Library user → Orbit propagation: creates and runs (evidence: `README.md`)
- Orbit models → Orbit propagation: initializes (evidence: `README.md`)
- Orbit propagation → Spacecraft state: returns (evidence: `README.md`)
- Data access → Data providers: crawls (evidence: `src/main/java/org/orekit/data/DataProvidersManager.java`)
- Data access → Data filters: uses (evidence: `src/main/java/org/orekit/data/DataProvidersManager.java`)
- Orbit estimation → Measurements: processes (evidence: `src/main/java/org/orekit/estimation/leastsquares/MeasurementHandler.java`)
- Orbit estimation → Spacecraft state: uses (evidence: `src/main/java/org/orekit/estimation/leastsquares/MeasurementHandler.java`)
- Orbit estimation → Measurements: handles (evidence: `src/main/java/org/orekit/estimation/leastsquares/MeasurementHandler.java`)
- Spacecraft state → Orbit models: contains (evidence: `src/main/java/org/orekit/propagation/SpacecraftState.java`)
- Spacecraft state → Attitude models: contains (evidence: `src/main/java/org/orekit/propagation/SpacecraftState.java`)
- Field spacecraft state → Spacecraft state: converts to (evidence: `src/main/java/org/orekit/propagation/FieldSpacecraftState.java`)
- Event detection → Spacecraft state: evaluates (evidence: `src/main/java/org/orekit/propagation/events/EventDetector.java`)
- Field event detection → Field spacecraft state: evaluates (evidence: `src/main/java/org/orekit/propagation/events/FieldEventDetector.java`)
- Step sampling → Spacecraft state: interpolates (evidence: `src/main/java/org/orekit/propagation/sampling/OrekitStepInterpolator.java`)
- Error reporting → Time scales: reports errors for (evidence: `src/main/java/org/orekit/errors/OrekitException.java`)
- Initial orbit determination → Orbit models: estimates
- Orbit propagation → Event detection: supports detection (evidence: `src/main/java/org/orekit/propagation/numerical/SwitchEventHandler.java`)
- Orbit propagation → Step sampling: supports sampling (evidence: `src/main/java/org/orekit/propagation/covariance/LinearKeplerianCovarianceHandler.java`)
- Orbit propagation → Maneuver models: integrates maneuvers (evidence: `src/main/java/org/orekit/forces/maneuvers/SmallManeuverAnalyticalModel.java`)
- Orbit models → Reference frames: uses (evidence: `src/main/java/org/orekit/orbits/Orbit.java`)
- Orbit models → Time scales: uses (evidence: `src/main/java/org/orekit/orbits/Orbit.java`)
- Space data formats → Data access: loads data (evidence: `src/main/java/org/orekit/data/DataProvidersManager.java`)
- Earth environment → Data access: uses data
