A coolbox for trajectory design.
Explore the docs »
Report bug
·
Request feature
·
Discuss
This is the official repo for kep3 (C++ library) and its twin pykep (python package) version 3, the next-generation astrodynamics toolbox. Version 3 is not just an update — it's a full reimagining of what a space trajectory coolbox can be.
The code is still under development and we will only release the conda and PyPi packages when we are confidnt all is well coordinated. In the meantime, feel free to play around discuss API and help us debug :)
If you care about orbital mechanics, trajectory optimization, or spacecraft mission design — pykep belongs in your toolkit. From students and researchers to mission designers and competition participants (hello, GTOC!), pykep is the Swiss Army knife of astrodynamics.
⚠️ The old pykep version is no longer actively maintained. version 3 is the future.
kep3 is a C++ library with a rich Python interface (pykep) for space flight mechanics research. Built from the ground up with performance, usability, and extensibility in mind, it brings together everything the astrodynamics community has been asking for tailored at scientists who want to perform cutting edge research in space flight mechanics.
Whether you're computing Lambert arcs, propagating Keplerian orbits, or designing complex multi-gravity-assist trajectories and designing the next generation solvers for low-thrust optimization, kep3 has you covered with clean APIs, rigorous numerics, and serious speed.
Starting from the v3 line, this project follows Semantic Versioning for releases:
MAJOR: incompatible API changes.MINOR: backward-compatible new features.PATCH: backward-compatible bug fixes.
For the C++ shared library (kep), we track ABI compatibility with SOVERSION:
VERSIONis set to the full project version (MAJOR.MINOR.PATCH).SOVERSIONis tied toMAJOR.
In practice, if MAJOR changes, downstream binaries should expect possible ABI incompatibilities and rebuild/relink.
Choose one of the following installation paths, depending on your use case.
Conda is the recommended option for a fully managed scientific Python stack.
conda install -c conda-forge pykepCurrent status: conda-forge currently provides the stable v1 line. v3 packages will be published once the v3 API is stabilized.
Use pip if you prefer Python wheels from PyPI.
pip install pykepCurrent status: PyPI currently provides the stable v1 line.
Wheel availability: currently Linux arm64 and amd64.
Building from source is currently the recommended path for v3 development and testing.
- Create and activate the development environment:
conda env create -f kep3_devel.yml
conda activate kep3_devel- Configure and install
kep3andpykep:
cmake -S . -B build -G Ninja \
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 \
-DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX" \
-DCMAKE_PREFIX_PATH="$CONDA_PREFIX" \
-Dkep3_BUILD_PYTHON_BINDINGS=ON
cmake --build build --target install --parallel- Validate the installation:
python -c "import pykep; print(pykep.__version__)"The configure step controls where kep3 is installed, where dependencies are discovered, and which optional targets are generated.
-DCMAKE_EXPORT_COMPILE_COMMANDS=1
-DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX"
-DCMAKE_PREFIX_PATH="$CONDA_PREFIX"
-Dkep3_BUILD_PYTHON_BINDINGS=ON-
-DCMAKE_EXPORT_COMPILE_COMMANDS=1Producesbuild/compile_commands.json, a machine-readable compilation database used by IDEs, language servers, static analyzers, and refactoring tools. -
-DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX"Installs headers, libraries, CMake package files, and Python artifacts into the active conda environment, avoiding contamination of system paths. -
-DCMAKE_PREFIX_PATH="$CONDA_PREFIX"Prioritizes dependency resolution from the active conda environment (for exampleBoost,fmt,heyoka,xtensor,xtensor-blas). This improves reproducibility across machines. -
-Dkep3_BUILD_PYTHON_BINDINGS=ONEnables build and installation of thepykepPython extension module.
-Dkep3_BUILD_CPP_LIBRARY
-Dkep3_BUILD_TESTS
-Dkep3_BUILD_BENCHMARKS
-DKEP3_VERBOSE_CONFIGURE-
-Dkep3_BUILD_CPP_LIBRARY=OFFControls whether thekep3C++ library is built from source (default). When set toOFF, CMake will instead locate an already-installedkep3viafind_packageand report a fatal error if it is not found. This is useful when you only want to build the Python bindings (or tests/benchmarks) against akep3that has already been installed. -
-Dkep3_BUILD_TESTS=ONBuilds the C++ unit-test targets. -
-Dkep3_BUILD_BENCHMARKS=ONBuilds benchmark executables underbenchmark/. -
-DKEP3_VERBOSE_CONFIGURE=ONEmits additional configure-time diagnostics useful for dependency and toolchain troubleshooting.
-DCMAKE_BUILD_TYPE=DebugUse this with single-config generators (for example Ninja and Unix Makefiles) when you need debug symbols and lower optimization.
cmake -S . -B build -G Ninja \
-DCMAKE_EXPORT_COMPILE_COMMANDS=1 \
-DCMAKE_INSTALL_PREFIX="$CONDA_PREFIX" \
-DCMAKE_PREFIX_PATH="$CONDA_PREFIX" \
-Dkep3_BUILD_PYTHON_BINDINGS=ON \
-Dkep3_BUILD_TESTS=ON \
-Dkep3_BUILD_BENCHMARKS=ON