Changelog¶
All notable changes to RLMesh are documented here. This changelog tracks the rlmesh Python package on PyPI. The Rust crates are internal implementation detail and currently carry no separate user stability promise.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.0-rc.2 - Unreleased¶
The pre-1.0 breaking wave: rc.2 freezes the wire contract and finalizes the authoring API. It does not interoperate with rc.1, so upgrade every environment, model, and runtime together.
Breaking changes¶
Observation and action values now travel as spec-directed bytes, and protocol generation (
rlmesh-wire-v1) is matched by exact equality. An rc.1 peer cannot connect to an rc.2 peer.Roles are required on
ImageTag,StateTag,TextTag,Image, andText, passed as the first argument:ImageTag(IMAGE_PRIMARY),Text(INSTRUCTION).Adapter spec classes use their final names. Rename the old input and action classes in your imports, for example
ImageInputtoImage,StateComponenttoConcat,ActionComponenttoActuator,ActionLayouttoAction.action_horizon=onrun()andsession()is nowexecution_horizon=, andexecute_horizonis gone fromAction. The horizon is a runtime setting, not part of the spec.predict_chunk(self, observation)no longer takes a horizon; return your native chunk and the runtime replays it one action per step. An autoregressive head may addexecution_horizon: int = 1to decode exactly that many.on_resetis removed fromModelandSession. Useon_episode_end, which fires at every episode boundary on both the local and served paths; a subclassreset()is wired to it.Sandbox config is grouped. Pass
build=SandboxBuild(...)andruntime=SandboxRuntime(...)instead of flat kwargs:SandboxEnv("CartPole-v1", build=SandboxBuild(packages=["gymnasium==1.3.0"])).
Added¶
Action chunking and batched prediction in the runtime. Implement the most general of four corners and the runtime derives the rest:
predict,predict_chunk,predict_batch,predict_chunk_batch. The runtime owns chunk replay and the execution horizon, so one action still reaches the environment per step.session()andSessionfor manualreset/predict/stepcontrol alongsiderun(), plusSession.reader()andSession.read()for read-only, role-addressed views of an observation through the model’s adapter.PyTorch and JAX environments served with framework tensors:
EnvServer(env, framework="torch", device="cuda:0"), withrlmesh.torchandrlmesh.jaxfactory, model, and sandbox classes. A model’sdevicemoves observations beforepredict.Declared construction parameters:
EnvFactory.params = ParamSpec(Param(...))validatesmake()arguments and adds aVectortype.enumerate_variants()lists a factory’s concrete sub-environments.describe(),describe_json(), andpython -m rlmesh.describeemit a JSON metadata envelope for a factory or model without constructing it.More adapter conversions: rotation accept-sets, image
fit,normalizeranges, channel validation, optional cameras, per-actuatorclip, role-less actuators, andadapter.advisories()for data-loss notes. A newer environment contract also parses against an older core and fails only when a model input needs the missing piece.A live debug viewer: pass
view="terminal",view="http:9000", orview="both"torun()/session(), or configurerlmesh.View(...). It is best-effort and never breaks an eval.Sampling and ergonomic helpers on the space wrappers.
Changed¶
The adapter engine and chunk replay moved into the Rust core for vectorized, stateful serving. The Python authoring path is unchanged.
Actuatorscale,invert, andthresholdapply on both sides and compose in order, so a model can bridge its output convention at the boundary.
Fixed¶
Sandbox startup waits longer before timing out, so slow environments such as LIBERO task suites start reliably.
Debug viewer fixes for SSH terminals and observation-fed frames.
0.1.0-rc.1 - 2026-06-17¶
First release candidate for 0.1.0. RLMesh connects models to environments across process, dependency, and machine boundaries with a Gymnasium-style API.
Added¶
Serve Gymnasium-style environments and drive them with
reset,step,render, andcloseover local or remote gRPC transports.DLPack-native
Tensortransport with zero-copy NumPy, Torch, and JAX backends (#3).Run served environments locally or rebuild them identically in an isolated sandbox (
SandboxEnv) (#8).Evaluate models locally, against a remote server, or inside a sandbox (
Model,RemoteModel,SandboxModel) (#11).Tag-driven IO adapters that resolve environment tags against model specs at runtime (#9).
Negotiated workflow editions content-pinned to the
2026.06edition spec (#2).Per-lane
NEXT_STEPautoreset contract for vector environments (#7).
Changed¶
Hardened the public Python API, space wrappers, and transport for the stable surface (#5).