# kdFlex 0.9.16 release

**URL:** <https://forum.karanadyn.com/t/kdflex-0-9-16-release/37>\
**Category:** Announcements\
**Created:** [August 29, 2025, 8:59pm UTC](https://forum.karanadyn.com/t/kdflex-0-9-16-release/37 "2025-08-29T20:59:57Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![leake](https://forum.karanadyn.com/user_avatar/forum.karanadyn.com/leake/32/19_2.png) [@leake](https://forum.karanadyn.com/u/leake)\
**Post date:** [August 29, 2025, 8:59pm UTC](https://forum.karanadyn.com/t/kdflex-0-9-16-release/37/1 "2025-08-29T20:59:57Z")

</div>

# API changes

- The `StatePropagator::setState` now exclusively uses global coordinates and resets subhinge chart offsets.
- An API has been added to WebScene to allow swapping between perspective and orthographic camera projections.
- `setEphemerisTime` has been removed from `SpiceFrame`, and `utcTimeToEphemeris` has been added to `TimeKeeper` instead.
- Integrator constructors now use enums instead of strings.
- `Ktime2Seconds` and `seconds2Ktime` have been renamed to `ktimeToSeconds` and `secondsToKtime`.
- The `SanitizeCoordinates` model has been removed, and coordinate sanitization is now performed automatically at the end of integration steps.
- Dynamic loaders/dumpers are now used for YAML/JSON, significantly reducing boilerplate code when dumping `DataStructs` with custom classes.
- The `getIndepColIndices()` method has been moved from the CK solver to the Math module, making it a more broadly useful utility.

# New features/enhancements

- A `CoordinateConstraint` class has been added to `SOADyn` to support coordinate-level constraints, such as those found in gears.
- `evalTreeMassMatrixInverse` and `evalSerialChainMassMatrixInverse` algorithms have been added.
- Versioning has been added to `DataStruct`s.
- A kinematics simulation mode has been added for simulations using accelerations.
- A `SyncRealTime` model has been added to `GeneralKModels` to limit simulation speed to a multiple of real time.
- `get/setVisible` methods have been added to `Scene`, `ProxyScene`, and `WebScene` to control the visibility of `SceneNodes`.
- TA dynamics now supports a combination of hinge loop, convel, and coordinate constraints for general systems.
- Orthographic camera projections have been added.
- Typing improvements have been made throughout the codebase.
- The `update_state_derivatives_hop_end` flag has been added to `SOADyn` to control updating derivatives at the end of each hop.
- `MultibodyTUI` now has configurable swing amplitude, notifications, and a kinematic simulation swing mode. In addition, a REPL embed has been added so users can make calls to the Python API.

# Bug fixes

- The `discard` function in Python has been overhauled to prevent memory corruption. When calling discard, users now need to ensure the variable being discarded is holding the last reference in Python (similar to how users must ensure the shared pointer being discarded is holding the last reference in C++).
- The CK solver has received more fixes for convel and coordinate constraints, correcting issues with the convel Jacobian and frozen subhinge handling.
- `CoordData::mergeCoordData()` now correctly carries forward frozen coordinate information, which is used in CK solutions.
- A bug in the `operator=` for `ArkExplicit` integrator options that previously prevented absolute tolerance from being set correctly.
- Sign error and frame mismatch in point mass gravity calculations.
- The extended OSCM now correctly works for serial and tree systems.
- A bug in the Python KModel unregister process that caused errors when models with `pre/postModelStep` lacked a period or `nextModelStepTime`.
- Registered model function names now use model IDs to prevent collisions between models with identical names.
- A typo in the CK solver caused `solveUdot()` to return velocity error instead of acceleration error.
- A typo in the Python binding for `f2f.pframeObservedRelSpVel` that incorrectly pointed to `pframeObservedRelSpAccel`.
- `CoordinateConstraint` cleanup now allows users to discard them without errors and automatically integrates cleanup into the `Multibody`.
- Primitives in `CoalScene` are now y-aligned, with a correction quaternion applied to match conventions and ensure consistency with collision outputs.
