Skip to main content

nnx-ppo

Experimental implementation of Proximal Policy Optimization in JAX, with first-class support for recurrent/stateful networks. Networks are built with flax.nnx; environments follow the MuJoCo Playground API.

Status: experimental — the API may change without notice.

Highlights

  • Stateful modules. Recurrent layers, delayed connections, and noisy / variational populations are all first-class citizens. Carry state is threaded through rollout collection and multi-epoch loss replay, and is reset correctly when the environment resets — something other JAX RL libraries (e.g. Brax) do not natively support.
  • PyTree observations. Observations can be arbitrary nested dicts, which makes it easy to route different streams (proprioception, vision, imitation targets, …) to different parts of a network.
  • PyTree actions and rewards. Actions and rewards are also allowed to be PyTrees, which simplifies multi-actuator and multi-agent setups.

Installation

pip install nnx-ppo

nnx-ppo installs the CPU build of JAX by default. For a CUDA 12 GPU build:

pip install nnx-ppo "jax[cuda12]"

Optional extras:

  • nnx_ppo[examples] — brax, wandb, and playground (import name mujoco_playground) for the scripts in examples/.
  • nnx_ppo[dev] — test-suite dependencies (pytest, pyright, beartype, absl-py, plus playground for the env-driven tests).

Quick example

from flax import nnx
import mujoco_playground

from nnx_ppo.algorithms import ppo
from nnx_ppo.algorithms.config import TrainConfig, PPOConfig, EvalConfig
from nnx_ppo.networks.factories import make_mlp_actor_critic
from nnx_ppo.wrappers import episode_wrapper

env = mujoco_playground.registry.load("CartpoleBalance")
train_env = episode_wrapper.EpisodeWrapper(env, 1000)

rngs = nnx.Rngs(0)
nets = make_mlp_actor_critic(
    env.observation_size,
    env.action_size,
    actor_hidden_sizes=[64] * 4,
    critic_hidden_sizes=[256] * 2,
    rngs=rngs,
    normalize_obs=True,
)

result = ppo.train_ppo(
    train_env,
    nets,
    TrainConfig(
        ppo=PPOConfig(n_envs=1024, rollout_length=30, total_steps=10_000_000),
        eval=EvalConfig(enabled=True, every_steps=500_000, n_envs=64,
                        max_episode_length=1000),
    ),
    eval_env=env,
)
print(f"Final eval reward: {result.eval_history[-1]['episode_reward_mean']}")

See examples/wandb_logging.py for a complete training script with W&B logging and video recording.

Documentation

Full documentation, tutorials, and API reference are at https://nnx-ppo.readthedocs.io.

License

BSD 3-Clause — see LICENSE.

Metadata

Release files for nnx-ppo 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nnx-ppo 0.3.0
File Size Uploaded
nnx_ppo-0.3.0.tar.gz 84.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nnx-ppo 0.3.0
File Interpreter ABI Platform
nnx_ppo-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 190.6 kB

Release files / nnx_ppo-0.3.0.tar.gz

Download URL nnx_ppo-0.3.0.tar.gz
Size 84.0 kB
Tags Source
SHA-256 checksum
How to use checksums
86eb4f65255ad09480d25a5c63a3b6c037aa875b62306d409d7923f3ff17ce1e
BLAKE2b-256 checksum
How to use checksums
d70869b142084e3a6cef30f6759e2ec73cea5fb79e952a8946179de56571583a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 1, 2026.

Transparency log

Release files / nnx_ppo-0.3.0-py3-none-any.whl

Download URL nnx_ppo-0.3.0-py3-none-any.whl
Size 106.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
733a3282ce08cd592176895026a2d5e3da988bc8de5bbc9a5061e7595cb222ed
BLAKE2b-256 checksum
How to use checksums
177addd5837088c644deb5a3b5d6381d51cf8cc26754446ca4e0db35d22df693
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page