Open-source project
Genesis-Embodied-AI/genesis-world avatar
Genesis-Embodied-AI/genesis-world

Genesis World: One Scene, Six Solvers, and a Python Compiler Underneath

Simulation platform for general-purpose robotics & embodied AI learning.

29,952 stars2,860 forksPythonApache-2.0

At a glance

What is it?
Genesis World is an Apache-2.0 Python simulation platform that puts rigid bodies, FEM, MPM, PBD, SPH and IPC in a single scene with a shared state. The interesting part is not the solver list, it is the Quadrants compiler that lowers Python kernels to CUDA, ROCm, Metal, Vulkan, x86 and ARM64.
Who is it for?
Adopt Genesis World if your problem needs more than one solver type in contact with the same objects, and you want that expressed in Python rather than in a C++ engine you have to fork. Do not adopt it if you need a stable API surface today: the project was renamed from Genesis, the last push is dated 2026-09-10, and releases v1.3.2, v1.3.3 and v1.4.0 all landed inside a five-week window.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap Genesis World is aiming at: one scene, several solvers

Most robotics simulators pick a physics model and stay there. Rigid-body engines handle articulated arms and contacts; deformable solvers handle cloth, soft tissue and granular media; fluid solvers handle the rest. When a task crosses those boundaries, a cloth draped over a rigid gripper, a wheel rolling through sand, a blade cutting a mesh, the usual answer is to run two engines and hand-roll the coupling between them. That hand-rolled coupling is where the bugs live, because each engine keeps its own state and its own notion of a timestep.

Genesis World's stated answer is a unified multi-physics engine in which Rigid, FEM, MPM, Particle (PBD and SPH), uipc, an explicit coupler and SAP all share one scene and one state. The repository ships demos that exercise exactly the crossing points: cloth_on_rigid.py, rigid_mpm_attachment.py, cut_dragon.py, sph_mpm.py, sand_wheel.py. The audience is not someone simulating a single Franka arm in free space. It is a research group or a physical-AI team whose environment definition includes soft or granular material and who is tired of writing glue code between two engines that disagree about state.

Four layers, and the compiler is the load-bearing one

The README draws the stack as four layers inside a dashed box. At the top is the Simulation Interface: asset parsing for URDF, MJCF, OBJ, GLB and USD, entity accessors, controllers, sensors, parallel and heterogeneous environments, and a built-in GUI. Below that sits Physics. Below that, Render. At the bottom, Compiler.

The compiler is Quadrants, and it is the part that determines what the rest can promise. According to the README, Quadrants lowers Python kernel code to CUDA, AMD ROCm, Apple Metal, Vulkan, x86 and ARM64, and it carries the project's autodiff, GPU graphs and fastcache machinery. That is a different architecture from a simulator written in C++ with Python bindings. Here the kernels are written in Python and compiled per backend, which is why the README can claim a scale from a single laptop kernel to datacenter-grade GPUs without describing two separate code paths. Whether that claim holds on your hardware is a question about Quadrants, not about the physics demos.

The render layer is similarly pluggable. Three paths attach as camera sensors: Nyx, the in-house renderer built for robotics; Luisa, described as a DSL ray tracer; and Pyrender, a rasterizer. Nyx lives in its own repository, genesis-nyx, which matters for installation because the Nyx examples are among those the README flags as needing optional backends.

Installing it: pip, extras, and the examples that will not run

The README's Quick Installation section points at a single command for the development install: pip install -e ".[dev]". It states that most scripts run end-to-end after that. The qualifier is doing real work. Demos that depend on optional backends, and the README names the IPC and Nyx examples specifically, need the extras listed under Optional extras rather than the dev extra alone.

So the honest sequence is: run the dev install, then run a rigid example such as examples/rigid/franka_cube.py to confirm the base stack works, and only then decide whether you need the IPC or Nyx extras for the examples you actually care about. The catalogue in the README is organized to make that selection easy, split into Physics (solvers and multi-solver coupling), Rendering (in-repo camera setups plus Nyx walkthroughs hosted in genesis-nyx), and Simulation Interface (sensors, GUI, controllers, parallel and heterogeneous envs, tutorials).

What the supplied material does not give is a supported Python version range, a minimum driver version for any of the six compiler targets, or a list of the exact extras names. Those are in the documentation site at genesis-world.readthedocs.io, not in the README text available here, and anyone planning a cluster deployment should read them before assuming a backend will build.

The coupling demos are the real product, and the real risk

The example list is the most informative artifact in the repository. It is not a tour of features, it is a map of which combinations the maintainers consider worth demonstrating. Cloth on rigid. Rigid plus MPM with attachments. Cutting a dragon mesh. SPH coupled to MPM. A sand wheel. Stable fluid smoke. PBD liquid and PBD cloth. FEM with hard and soft constraints. IPC robot cloth teleop.

That breadth is the pitch and also the caution. A unified engine that carries rigid bodies, three particle methods, FEM, MPM and IPC in one state has more surface area than a rigid-only simulator, and the failure modes are correspondingly harder to isolate. When a cloth-on-rigid demo produces an unexpected result, the question is whether the error is in the cloth solver, the rigid solver, the explicit coupler between them, or the compiled kernel. Nothing in the supplied material describes a debugging or validation tool for separating those. The README mentions an explicit coupler and SAP as physics components but does not document their stability criteria or the timestep constraints they impose.

There is also a naming hazard. The project was previously named Genesis, and the README says so directly. Search results, forum threads and older scripts that refer to Genesis may or may not map onto the current package name, genesis-world. The PyPI package is genesis-world, which is what you should pin.

Where a single-solver simulator is the better choice

If your environment is articulated rigid bodies in contact with other rigid bodies, and you are training a manipulation policy, the multi-solver machinery is overhead you will pay for and never use. A simulator whose entire design is optimized around one contact model will have a smaller API, fewer optional extras to resolve, and a shorter path from install to first rollout. Genesis World's own rigid examples, franka_cube.py, tower.py, contype.py, are there to prove the rigid path works, not to argue that it is the reason to switch.

The same applies to teams that need a frozen API. Three releases, v1.3.2, v1.3.3 and v1.4.0, landed between 2026-08-07 and 2026-09-06. That cadence is healthy for a project of this age and hostile to anyone pinning loosely. If your pipeline cannot absorb a monthly minor bump, pin an exact version and budget time for the upgrade.

The comparison that matters is architectural, not feature-by-feature. Genesis World compiles Python kernels to six backends through Quadrants and keeps every solver in one scene. A conventional rigid-body simulator with Python bindings inverts that: the engine is a fixed native library, and Python is a control surface. The first approach lets you write a new solver or a coupling term in the same language as your environment code, at the cost of depending on a compiler that must correctly target Metal, ROCm and Vulkan as well as CUDA. The second gives you a stable native core and asks you to leave Python when you need to change physics. Neither is wrong; they fail in different places.

Maintenance cost, licence, and what to check before you commit

Apache-2.0 is a permissive licence with an explicit patent grant and a requirement to preserve notices and state changes. For a research group embedding the simulator in a pipeline, that is about as unobstructed as it gets. It is not legal advice, and the licence file in the repository, not this summary, is the authoritative text. Note that the stack depends on components in separate repositories, notably genesis-nyx and quadrants, and their licences are separate questions from this one.

On maintenance: the project started as an academic effort in December 2024, was renamed from Genesis to Genesis World, and development is now officially supported by Genesis AI. Commercial backing behind an Apache-2.0 project is a specific trade. It reduces the chance of abandonment and increases the chance that roadmap priorities are set by the sponsor's product needs rather than by yours. The rename is the visible symptom: it already invalidated the name that appears in older documentation and scripts.

Upgrade cost is dominated by the compiler, not the Python API. A Quadrants change that affects a backend you rely on is not something you can work around at the environment level. Before adopting, verify three things on your own hardware: that pip install -e ".[dev]" completes and examples/rigid/franka_cube.py runs; that the optional extras for your chosen renderer, Nyx, Luisa or Pyrender, resolve; and that the coupling demo closest to your task, whether that is cloth_on_rigid.py, rigid_mpm_attachment.py or cut_dragon.py, produces a result you consider physically plausible. If the third check fails, no amount of API ergonomics will save the project for you.

Editorial conclusion

Adopt Genesis World if your problem needs more than one solver type in contact with the same objects, and you want that expressed in Python rather than in a C++ engine you have to fork. Do not adopt it if you need a stable API surface today: the project was renamed from Genesis, the last push is dated 2026-09-10, and releases v1.3.2, v1.3.3 and v1.4.0 all landed inside a five-week window. Before committing, install with pip install -e ".[dev]" and run examples/coupling/rigid_mpm_attachment.py and examples/coupling/cloth_on_rigid.py on your actual hardware, then check whether the IPC and Nyx examples resolve their optional extras on your platform.

Official sources

  1. Genesis-Embodied-AI/genesis-world on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes