{"id":48760700,"url":"https://github.com/novix-science/mlx-sim","last_synced_at":"2026-04-29T04:00:58.437Z","repository":{"id":345911012,"uuid":"1187809906","full_name":"novix-science/mlx-sim","owner":"novix-science","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-21T15:21:58.000Z","size":1303,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-22T00:14:03.390Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novix-science.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-21T07:37:38.000Z","updated_at":"2026-03-21T15:23:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/novix-science/mlx-sim","commit_stats":null,"previous_names":["novix-science/mlx-sim"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/novix-science/mlx-sim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novix-science%2Fmlx-sim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novix-science%2Fmlx-sim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novix-science%2Fmlx-sim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novix-science%2Fmlx-sim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novix-science","download_url":"https://codeload.github.com/novix-science/mlx-sim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novix-science%2Fmlx-sim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32409944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T03:46:11.172Z","status":"ssl_error","status_checked_at":"2026-04-29T03:37:55.317Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-13T06:00:40.902Z","updated_at":"2026-04-29T04:00:58.432Z","avatar_url":"https://github.com/novix-science.png","language":"Python","funding_links":[],"categories":["\u003ca name=\"Python\"\u003e\u003c/a\u003ePython"],"sub_categories":[],"readme":"# mlx-sim\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![macOS](https://img.shields.io/badge/platform-macOS%20Apple%20Silicon-lightgrey.svg)](https://support.apple.com/en-us/HT211814)\n[![CI](https://github.com/mlx-sim/mlx-sim/actions/workflows/ci.yml/badge.svg)](https://github.com/mlx-sim/mlx-sim/actions/workflows/ci.yml)\n\n**Apple-Silicon-first robotics simulation platform.**\n\nmlx-sim is a high-performance physics simulator built from the ground up for Apple Silicon, using Metal GPU compute for rendering and designed for reinforcement learning workflows.\n\n## Features\n\n- **Metal GPU acceleration** — native Apple Silicon rendering and compute\n- **Rigid body dynamics** — impulse-based solver with GJK/EPA collision detection\n- **Articulated bodies** — Featherstone ABA forward dynamics, RNEA inverse dynamics\n- **URDF \u0026 MJCF loading** — import robots and scenes from standard formats\n- **Gymnasium environments** — drop-in RL environments with vectorized parallel execution\n- **Sensor pipeline** — IMU, camera (RGB), and depth sensors with noise models\n- **Domain randomization** — built-in sim-to-real transfer support\n- **Python bindings** — full API access via pybind11\n\n## Installation\n\n```bash\npip install mlx-sim\n```\n\nWith RL environment support:\n\n```bash\npip install \"mlx-sim[rl]\"\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/mlx-sim/mlx-sim.git\ncd mlx-sim\ncmake -B build -DCMAKE_BUILD_TYPE=Release\ncmake --build build -j\npip install -e \".[rl,dev]\"\n```\n\n### Requirements\n\n- macOS with Apple Silicon (M1+)\n- CMake \u003e= 3.24\n- Xcode Command Line Tools\n- Python \u003e= 3.10\n\n## Quick Example\n\n```python\nimport mlx_sim\n\n# Create a simulation world\nworld = mlx_sim.World({\"timestep\": 0.002, \"n_substeps\": 4})\nworld.load_urdf(\"robot.urdf\")\n\n# Run simulation\nfor _ in range(1000):\n    world.step()\n\npositions = world.get_body_positions()  # (N, 3) numpy array\nprint(f\"Bodies: {world.n_bodies}, Time: {world.time:.3f}s\")\n```\n\n### Gymnasium RL Environment\n\n```python\nimport gymnasium as gym\nimport mlx_sim.envs\n\nenv = gym.make(\"MlxSimReach-v0\")\nobs, info = env.reset(seed=42)\n\nfor _ in range(200):\n    action = env.action_space.sample()\n    obs, reward, terminated, truncated, info = env.step(action)\n    if terminated or truncated:\n        obs, info = env.reset()\n\nenv.close()\n```\n\n### Vectorized Training\n\n```python\nfrom mlx_sim.envs import ReachEnv, MlxSimVecEnv\nimport numpy as np\n\nvec_env = MlxSimVecEnv(lambda: ReachEnv(), num_envs=8)\nobs, infos = vec_env.reset()\n\nfor _ in range(1000):\n    actions = np.random.randn(8, vec_env.single_action_space.shape[0])\n    actions = np.clip(actions, -1, 1).astype(np.float32)\n    obs, rewards, terminateds, truncateds, infos = vec_env.step(actions)\n\nvec_env.close()\n```\n\n## Project Structure\n\n| Directory | Description |\n|---|---|\n| `src/core/` | Math types, ECS, core utilities |\n| `src/physics/` | Rigid body dynamics, collision detection |\n| `src/render/` | Metal renderer, shaders |\n| `src/runtime/` | Simulation loop, scene management |\n| `src/python/` | pybind11 Python bindings |\n| `python/` | Python package (envs, viewer) |\n| `tests/` | Unit tests |\n| `viewer/` | MetalKit viewer app |\n| `docs/` | Documentation |\n\n## Documentation\n\nFull documentation: [https://mlx-sim.github.io/mlx-sim/](https://mlx-sim.github.io/mlx-sim/)\n\n- [Getting Started](docs/getting-started.md)\n- [Tutorials](docs/tutorials/first-simulation.md)\n- [API Reference](docs/api/core.md)\n- [Contributing](docs/contributing.md)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovix-science%2Fmlx-sim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovix-science%2Fmlx-sim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovix-science%2Fmlx-sim/lists"}