Skip to content

๐Ÿ“ฃ Release Notes - 0.4.1 โ€‹

Release 0.4.1 is a new release that focuses on bug fixing.

โฐ For some statistics! This release contains 82 changed files with 3,600 additions and 1,852 deletions.

๐Ÿ’ฅ Breaking Change โ€‹

๐Ÿš€ Features โ€‹

Python 3.9 Support โ€‹

We officially support Python 3.9 now! ๐ŸŽ‰ More python versions are undergoing testing and will be released as well. Removing the dependency of Python and allowing you to use Composabl with any Python version you are comfortable with.

Add Scenario as Dictionary, List[Dictionary], Scenario or List[Scenario] โ€‹

We now allow users to add scenarios as a list, dictionary or scenario class itself.

gRPC Server Extra Parameters โ€‹

We now allow Gym Space Types to be added in normal Data Types. This can be interesting when wanting to pass the Action Space and Observation Space to the simulator.



c = make(
        "observation_space": spaces.Box(-5, 5, dtype=np.float32),
        "action_space": spaces.Discrete(2)

License Server for Partners โ€‹

Our Licensing Software now supports partners. This allows us to distribute uniform keys for our entire software stack, whereafter customers can simply activate the software they want to use.

If you are a partner and want to integrate, contact us at

Pass Parameters to Simulators โ€‹

You can now pass additional parameters to the simulator that you are creating. The additional parameters will be passed to your ServerImpl class.

from composabl_core.grpc.server import Server
# ...
server = Server(ServerImpl,, args.port, args.timeout, {"extra": "parameters"})
from composabl_core.grpc.server import Server
# ...
server = Server(ServerImpl,, args.port, args.timeout, hello="world", foo="bar")

Simulator Benchmarks โ€‹

For all our out of the box simulators, we are now shipping benchmarks in our testing procedure. This allows us to start focusing on performance improvements across the board.

gRPC Async Server โ€‹

Normally features are released according to semver, but as we are still in beta, things are moving more quickly. This release brings an Async implementation for the gRPC server. This resolves issues with the sync server when the main thread needs to perform rendering.

Using it is similar to the previous one, when developing simulators:

from composabl_core.grpc.server import ServerAsync

# ...

async def start():
    # ...

    server = ServerAsync(ServerImpl,, args.port, args.timeout)
    await server.start()

    # ...

An example can be found on the Mujoco simulator

๐Ÿงช Experimental โ€‹

๐Ÿ› Bug Fix โ€‹

  • We now shutdown ray in a more graceful way
  • We now register the action masking model correctly, resolving issues with action masking itself
  • Empty responses are now handled correctly

๐Ÿ’– Improvements โ€‹

  • gRPC Logging: Log messages are more clearer when an error happens due to a change in the way we log gRPC messages./

๐Ÿ“ Documentation โ€‹

๐Ÿ”ง Maintenance โ€‹

  • Upgrade to Ray 2.8