All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Bevy 0.18 → 0.19 (#706).
Routine dependency bump; no 0.19 feature changes astrodyn's physics or
pipeline. Compile-level touch-points, all confined to test helpers: the
ExecutorKindAPI was removed (nowSchedule::set_executor(SingleThreadedExecutor::new())), andSystemState::get/get_mutreturn aResult(SystemParam validation moved to fetch time). - MSRV bumped to 1.95 (was 1.89). Forced by
bevy 0.19declaring its ownrust-version = "1.95"; cargo's MSRV-aware resolution refuses to build the workspace on older toolchains. README § "Minimum supported Rust version" and thetooling.ymlMSRV gate updated. - Unified
glamto 0.32 (#707). Bumped the workspaceglam0.30 → 0.32 to match Bevy 0.19's math stack, so astrodyn physics and Bevy's internal math now share a single compiledglam 0.32.1(cargo tree -d --workspacereports no glam duplicate) instead of the 0.30/0.32 split the Bevy bump left. (Cargo.lockstill lists older glam versions asnalgebra's disabled optionalconvert-glam*deps — never compiled, and present since before this change.) A one-line dependency change: glam 0.31/0.32 ship no numeric-implementation changes to the operations astrodyn uses (onlyDVec3/DMat3/DQuat), so the full Tier 3 cross-validation and bit-identity parity suites pass with unchanged tolerances and baselines.
- Dropped the unused
bevy_reflectdependency and the vestigial#[derive(Reflect)]onFrameAttachedC— the onlyReflectin the workspace, with noregister_type/registry consumer. bevy_reflect 0.19 moved to glam 0.32 (the workspace was still on glam 0.30 at the time; it was unified to 0.32 in #707), so the derive no longer resolved; since nothing introspected the type, the derive and dependency were removed rather than bumping glam across the physics core in the same PR.
0.2.0 - 2026-06-08
Second release. Headlined by the frame-identity work
(#659 / #660–#664 /
#668): every reference frame now carries a stable FrameUid, every
cross-source reference resolves through it, and a new
astrodyn_frame_doc crate captures that identity in a self-describing,
replayable wire schema.
astrodyn_frame_doccrate (#663) — frame-document schema: a self-describing serialized form of a reference-frame tree (snapshotFrameDocument+ replay-seriesFrameSeries) carrying identity, topology, origin, and epoch on every record, with bit-exactf64round-trips. Per-record validators (validate_header,validate_uid_table,validate_record) support independent streaming consumers (#659). The gateway exposes it behind a new, off-by-defaultframe-docfeature (astrodyn::frame_doc+astrodyn::frame_doc_io), keeping the production build serde-free.- Frame identity vocabulary (#660) —
FrameUidplusFrame::DESCRIPTORon the sealedFrametrait. CartesianState<F>(#650) — typed position + velocity state record with opt-in serde (the gateway'sserdefeature forwards to it).- New frames and presets: Moon mean-Earth (ME) frame for DEM
georeferencing (#652); site-anchored topocentric ENU frame (#651);
generic IAU body-fixed rotation beyond Moon/Mars (#653); a typed
Ephemerisrotation accessor (#648); Jupiter + Saturn shape presets (#649). - LSODE integrator family (#615/#616/#617) — non-stiff Adams and stiff BDF (Newton corrector + Jacobian) integrators, wired through the Bevy adapter with a parity test.
- MSRV bumped to 1.89 (was 1.87). Forced by
bevy 0.18.1declaring its ownrust-version = "1.89"; cargo's MSRV-aware resolution refuses to build the workspace on older toolchains. README § "Minimum supported Rust version" updated. - Docs and package metadata reframed to describe astrodyn as an engine-agnostic framework rather than a Bevy-first library (#647).
- Frame identity is now required throughout (#661/#664/#668).
RefFrameKindwas removed;FrameUidis required onFrameTreenodes behind a checked typed boundary (validate()+ namespace rules); and the formerSourceIdcollapsed so every cross-source reference is aFrameUid. Downstream code that built frames without identities, or referenced frames via the oldSourceId/RefFrameKindtypes, must migrate toFrameUid. astrodyn::source_frames::SourceFrameIdsgained apub central: boolfield (originally landed in #568 without a version bump). Downstream code constructing this struct via struct literal must add the new field. Detected and gated by thecargo-semver-checksCI job.
Bundled as part of #527:
cargo-denysupply-chain fence (deny.toml, advisories + licenses + bans + sources). Caught and cleared two realrustls-webpkivulnerabilities (RUSTSEC-2026-0099 / -0104) during initial wiring.- Dependabot weekly cadence on
cargoandgithub-actions, grouped minor/patch. - MSRV CI gate using
dtolnay/rust-toolchain@1.89. cargo-semver-checksgating the publicastrodynsurface against the crates.io baseline.cargo-hackfeature-powerset onastrodyn_ephemeristo keep the--no-default-featuresair-gapped build path honest.- CI ergonomics: cancel-superseded
concurrency:blocks on bothci.ymland the newtooling.yml, plusRUST_BACKTRACE=1so Tier 3 / parity panics emit stack traces. - Claude Code review +
@claudemention workflows (#666).
- Large Tier 2 / Tier 3 cross-validation expansion against JEOD Trick
sims: SIM_orbinit (full 46/46 init-variant matrix), SIM_verif_attach_mass,
SIM_dyncomp, SIM_MET, SIM_tide_verif, SIM_7_time_reversal, SIM_VER_DRAG
(with the
DRAG_OPT_CONSTaero option), SIM_RNP_J2000_prop, and the SIM_csr_compare gravity-acceleration octant sweep. Added Rosetta swing-by and Phobos mission benchmarks (#203/#204).
Fourteen publishable workspace crates at this version — the thirteen
from 0.1.0 plus the new astrodyn_frame_doc. Four publish = false
verification crates: astrodyn_verif_jeod, the new
astrodyn_verif_jeod_fixtures (pure JEOD-data parsers, no pipeline
dependency) and astrodyn_verif_nesc (NESC GN&C Lunar Check Cases
track), and astrodyn_verif_parity.
0.1.1 - 2026-05-11
Same-day patch release following the initial 0.1.0 publish.
- Ephemeris kernels are distributed via GitHub Releases (the
kernels-v1tag) rather than bundled in the published crate (#476), keeping theastrodyn_ephemeris.cratesmall. See the Environment wiki for kernel handling.
force_torque_responserecipe extracted as a reusable surface, with abevy_paritywrapper (#477).bevy_paritywrappers fordrag_verifanddrag_rot_verif(#475).
0.1.0 - 2026-04-28
Initial public release. The original phased implementation plan (Phases 1–7) closed in April 2026; ongoing work tracks as GitHub issues.
- Typed quantities (
astrodyn_quantities): phantom-taggedPosition<F>,Velocity<F>,Acceleration<F>,SecondsSince<S>,Quat<L, T>,NormalizedQuat,FrameTransform<From, To>, and theF64Extfacade (400.0.km(),51.6.deg(),420_000.0.kg()). Compile-time rejection of cross-frame mismatches and unit-dimensional errors. - Mission API (
astrodyn_bevy::prelude+astrodyn_bevy::recipes): typestateVehicleBuilder(no-state / no-integrator gates), recipe modules for Earth/Moon/Sun/Mars, common orbital elements (ISS, GEO, GTO, Molniya), and vehicle masses. - Pipeline (
astrodyn): seven-stage integration loop —TimeUpdate,EphemerisUpdate,Environment(gravity + atmosphere),Interaction(aero, SRP, gravity torque, contact, shadow),ForceCollection,Integration(with frame propagation as the integrator's post-step),DerivedState. Single API surface for ECS adapters. - Bevy adapter (
astrodyn_bevy):AstrodynPlugin,AstrodynSetsystem-set enum, component bundles, and a thin systems layer that delegates toastrodyn. - Standalone runner (
astrodyn_runner):Simulationpropagator that consumes the sameVehicleConfigas the Bevy adapter — mission code can swap between Bevy and the runner without rebuilding the configuration. - Physics models: spherical-harmonics gravity (Gottlieb algorithm), tides, third-body, RNP Earth rotation (precession/nutation/polar motion), MET atmosphere, exponential atmosphere, drag, SRP, gravity-gradient torque, contact, eclipse shadow, Earth lighting.
- Time scales: TAI, UTC, UT1, TDB, TT, GMST with leap-second table from JEOD source.
- Integrators: RK4, RKF45, ABM4, Gauss-Jackson 8th-order.
- Ephemerides: DE4xx binary reader via
anise. - Verification: three test tiers — Tier 1 unit tests, Tier 2 static reference vectors from JEOD source, Tier 3 trajectory cross-validation against JEOD Trick simulations (committed reference CSVs, Docker-based regeneration workflow).
Fourteen workspace crates at this version:
astrodyn(workspace root, gateway / orchestration),astrodyn_quantities,astrodyn_math,astrodyn_frames,astrodyn_time,astrodyn_planet,astrodyn_ephemeris,astrodyn_gravity,astrodyn_atmosphere,astrodyn_dynamics,astrodyn_interactions,astrodyn_runner,astrodyn_bevy(Bevy ECS adapter).- Plus two
publish = falseverification crates:astrodyn_verif_jeod(JEOD-source parsers + Tier 3 cross-validation tests +run_verificationscenario rigs) andastrodyn_verif_parity(runner ↔ Bevy bit-identical parity tests).