# kdFlex 1.0.2 release

**URL:** <https://forum.karanadyn.com/t/kdflex-1-0-2-release/44>\
**Category:** Announcements\
**Created:** [January 24, 2026, 12:48am UTC](https://forum.karanadyn.com/t/kdflex-1-0-2-release/44 "2026-01-24T00:48:19Z")\
**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:** [January 24, 2026, 12:48am UTC](https://forum.karanadyn.com/t/kdflex-1-0-2-release/44/1 "2026-01-24T00:48:19Z")

</div>

# kdFlex 1.0.2 Code Changes Summary

## API Changes

- Updated the arguments for creating a [`ProxyScenePart`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.ProxyScenePart.create), [`WebScenePart`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.WebScenePart.create), or [`CoalScenePart`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.CoalScenePart.create). The arguments have been reordered so that the [`Scene`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.Scene) container for the part comes before the geometry.
- Broke out ModelManager class from StatePropagator, and the latter is now derived from the former. [doc](https://portal.karanadyn.com/docs/1.0.2/usage_guide.html#the-model-manager)
- Added documentation area organized by beginner, intermediate, expert level users [link](https://portal.karanadyn.com/docs/1.0.2/expertise.html)
- Added program skeletons documentation section [link](https://portal.karanadyn.com/docs/1.0.2/procedures.html)
- Tightened up class/method names to comply with conventions.
- The `StatePropagatorDS.toStatePropagator` has been refactored to take a SubTree instance reather than a MulitibodyDS. This allows the method to work with direct SubTrees, and makes it simpler to use. Any values previously looked up using the MultibodyDS now use the refactored IdMixin global lookup instead. See the [StatePropagatorDS.toStatePropagator](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Dynamics/SOADyn_types/index.html#Karana.Dynamics.SOADyn_types.StatePropagatorDS.toStatePropagator) for moer deTAILS.
- The `before_hop` argument in the `TimedEvent` constructor has been renamed to `pre_hop` to match other locations in the code base. In addition, `dumpString` methods have been refactored to use `pre-hop` and `post-hop` rather than `before hop` and `after hop`. See [TimedEvent](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Dynamics/index.html#Karana.Dynamics.TimedEvent) for more details.
- `DashApp` was refactored so that the data plotting functions can be defined in C++. In addition, the Dash server and associated websocket are now handled ina completely different Python process so they don’t get bottlenecked by the GIL. See the [DataPlotter recipe](https://portal.karanadyn.com/docs/1.0.2/recipes.html#plotting) for more details.
- Renamed `KLOG_LEVEL` to `KARANA_LOG_LEVEL`. See the [logging](https://portal.karanadyn.com/docs/1.0.2/usage_guide.html#logging) section for details.
- Renamed `current`/`stale` to `healthy`/`not healthy` and `finalized`/`initialized` to `ready`. See [LockingBase](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Core/index.html#Karana.Core.LockingBase) for details.

## New Features

- Added [`findShareDir`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Core/index.html#Karana.Core.findShareDir), which is used to find the path where the `/share/Karana` directory was installed. This checks platform specific standard locations as well as the `KARANA_SHARE_DIR` [environment variable](https://portal.karanadyn.com/docs/1.0.2/expertise.html#environment-variables), if set.
- Added [`WebUI.HttpWsServer`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/WebUI/index.html#Karana.WebUI.HttpWsServer). This is an application-agnostic HTTP and websocket server with APIs in both C++ and Python. This is a common baseline for various web frontends in kdFlex.
- Added a [convex hull visualization helper](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/KUtils/vizutils/index.html#Karana.KUtils.vizutils.computeSphereSweptHull). This creates a sphere-swept convex hull containing a given list of points, which can then be visualized. Building on this, there is also a routine to [create a convex hull for a body’s nodes](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/KUtils/vizutils/index.html#Karana.KUtils.vizutils.createBodyHullPartSpec)
- Added a [node force visualization helper](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/KUtils/vizutils/index.html#Karana.KUtils.vizutils.NodeForceVisualizer). This draws an arrow from the [`Node`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Dynamics/index.html#Karana.Dynamics.Node) to continually visualize the external force at the node as the simulation evolves.
- Added the StatePropagator::euilibrateSciPy() method
- UniformGravity and PointMassGravity have been refactored into one, simpler Gravity KModel. This KModel takes a GravityInterface, which can be used to switch what type of gravity is being computed. In addition, this GravityInterface can be passed to other KModels or Prefabs as needed to retrieve the current gravity value. See the [2-link pendlum example](https://portal.karanadyn.com/docs/1.0.2/generated/notebooks/example_2_link_pendulum/notebook.html#register-models) for an example.

## Enhancements

- Added [`WebScene.server`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.WebScene.server), which can be called to get a handle to the web server being used by a [`WebScene`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.WebScene) instance.
- Added [`ProxyScene.clientScenes`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.ProxyScene.clientScenes), which lists all the scenes that have been registered with [`ProxyScene.registerClientScene`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Scene/index.html#Karana.Scene.ProxyScene.registerClientScene).
- The cmake files for kdFlex now include a `find_dependency` call for `sundials`, `assimp` and `zlib` so user scripts don’t need to include this.
- Now SubTree::enableAlgorithmicUse() calls allFinalized() to verify that all parameters have been initialized.

## Bug Fixes

- Improve error checking upon creating a [`SubGraph`](https://portal.karanadyn.com/docs/1.0.2/generated/python_api/Karana/Dynamics/index.html#Karana.Dynamics.SubGraph.create) with no parent.
- Fixed bug with `NoopIntegrator` preventing it from being used with `StatePropagator`. Now, this can be used with `StatePropagator` as expected.
