empyrean-sys 0.7.0

Low-level FFI bindings to the libempyrean astrodynamics C ABI. For an ergonomic Rust API, use the empyrean crate.
Documentation

empyrean-sys

Low-level FFI bindings to the libempyrean astrodynamics C ABI


empyrean-sys exposes the C ABI of libempyrean to Rust as raw, unsafe, bindgen-generated declarations. It does not attempt to wrap, type-check, or RAII-manage the underlying handles.

[dependencies]
empyrean-sys = "0.7"
use empyrean_sys::*;
use std::ffi::CString;

// All entry points are unsafe; pointer ownership and lifetime are the
// caller's responsibility. See empyrean/include/empyrean.h for the
// authoritative C ABI documentation.
unsafe {
    let mut ctx: *mut empyrean_context_t = std::ptr::null_mut();
    let data_dir = CString::new("").unwrap();
    let rc = empyrean_context_new(data_dir.as_ptr(), &mut ctx);
    assert_eq!(rc, 0);
    empyrean_context_free(ctx);
}

Most users want the safe wrapper instead — see the empyrean crate, which builds on empyrean-sys to provide typed handles, Result-returning entry points, and Rust-native lifetime management.

Runtime requirement

empyrean-sys opens libempyrean.{dylib,so,dll} at run time via libloading (dlopen). The library is distributed separately as a binary release on GitHub and inside the published Python wheel. The path is resolved from the EMPYREAN_LIB environment variable if set, else a libempyrean.* sitting next to the loaded module, else a build-time location — a sibling ../target/release build, an EMPYREAN_LIB_DIR override, or a checksum-pinned download from the GitHub release. The FFI bindings are pre-generated and committed, so no C header, libclang, or bindgen is needed to build.

License

Source code in this crate is licensed under the BSD 3-Clause License. The closed-source libempyrean runtime it loads at runtime is governed by a separate proprietary binary license; see the main repository for the dual-license breakdown.

Copyright © 2024–2026 Joachim Moeyens. All rights reserved.