Genesis World 1.3.3 on your machine: version check green, official Franka hello-scene stepping. That’s the bar for this page. Genesis World is the Apache 2.0 general physics simulator (rigid, FEM, MPM, SPH/PBD, couplers) behind one Python API – the project once called “Genesis,” now with Genesis AI support.
Deploy guide only. No Isaac/MuJoCo bake-off, no FPS brochure. Commands track PyPI genesis-world==1.3.3 and the genesis-world GitHub repo as of mid-August 2026 (release dated 13 Aug 2026 per PyPI/GitHub).
Dropping a full physics stack onto a laptop is weirdly like packing a lab into a backpack: the sim API looks small until one missing GL library turns the viewer into a slideshow. Worth expecting that mess up front.
System requirements before you touch pip
Official install docs pin Python 3.10-3.13 (>=3.10,<3.14). Linux, macOS, Windows all show up in the support table. Linux + NVIDIA CUDA is still the fastest practical path; CPU-only is fine for a smoke test.
| OS | GPU | GPU sim | CPU sim | Interactive viewer | Headless render |
|---|---|---|---|---|---|
| Linux | NVIDIA / AMD / Intel | Yes | Yes | Yes | Yes |
| Windows | NVIDIA / AMD / Intel | Yes | Yes | Yes | Yes |
| macOS | Apple Silicon | Yes (Metal) | Yes | Yes | Yes |
Order matters: matching PyTorch first, Genesis second. Community cloud write-ups (as of May 2026) often pair PyTorch 2.1+ with CUDA 12.x drivers (e.g. 525+); run nvidia-smi before you grab wheels – API shifts between minors are real. A clean venv plus torch is usually several GB. One Franka smoke test is light on RAM/VRAM; big batches are not.
Download source and install Genesis World 1.3.3
PyPI name is genesis-world. Pin the wheel so a floating minor does not ambush a training job overnight.
# 1) Fresh environment (recommended)
python3.12 -m venv .venv-genesis
source .venv-genesis/bin/activate # Windows: .venv-genesisScriptsactivate
pip install --upgrade pip
# 2) PyTorch for YOUR platform - https://pytorch.org/get-started/locally/
# Example NVIDIA CUDA 12.6:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
# 3) Genesis World 1.3.3 (PyPI latest as of 13 Aug 2026)
pip install "genesis-world==1.3.3"
Main branch ahead of PyPI?
pip install git+https://github.com/Genesis-Embodied-AI/genesis-world.git
Contributors – wheel off, clone, editable:
pip uninstall genesis-world -y
git clone https://github.com/Genesis-Embodied-AI/genesis-world.git
cd genesis-world
pip install -e ".[dev]"
Extras after core: pip install pyuipc (IPC/uipc; Linux/Windows x86 + NVIDIA), pip install gs-nyx (Nyx renderer). After any git checkout on an editable tree, re-run pip install -e ".[dev]" so entry points match HEAD – the README is blunt about that.
Docker and uv (when pip isn’t enough)
git clone https://github.com/Genesis-Embodied-AI/genesis-world.git
cd genesis-world
docker build -t genesis -f docker/Dockerfile docker
xhost +local:root
docker run --gpus all --rm -it
-e DISPLAY=$DISPLAY
-e LOCAL_USER_ID="$(id -u)"
-v /dev/dri:/dev/dri
-v /tmp/.X11-unix/:/tmp/.X11-unix
-v "$(pwd)":/workspace
--name genesis genesis:latest
AMD: build docker/Dockerfile.amdgpu as genesis-amd, pass KFD/DRI devices, init with gs.init(backend=gs.amdgpu). Prefer a fast local toolchain? Install uv, uv sync in the clone, torch via the right index, then uv run examples/rigid/single_franka.py.
First-time configuration: gs.init that won’t bite you
The catch is global state. gs.init() runs once per process, before any Scene. Call it again without gs.destroy() and you get Genesis already initialized. Not flaky – by design.
import genesis as gs
gs.init(backend=gs.gpu) # CUDA → AMD → Metal → CPU
print("backend:", gs.backend, "device:", gs.device)
Knobs that matter (keyword-only), per the initialization docs:
backend=gs.cpu | gs.cuda | gs.amdgpu | gs.metal | gs.gpuprecision="32"(default) or"64"– Apple Metal rejects 64-bit floats (raises); stay on 32 thereseed=0plususe_deterministic_algorithms=True(called out in 1.3.x) for bit-exact replay on one machine – throughput cost attachedperformance_mode=Trueonly when the scene layout is frozen (policy training): roughly 30% faster sim, but a layout change can mean multi-minute kernel recompiles. Wrong default while you still swap robots every few minuteslogging_level="warning"if boot logs bury real errors
v1.3.3 also tightens rigid solver convergence and MuJoCo contact-patch compatibility – skim the GitHub release notes before you assume old training flags still behave.
Verify the install works
pip show genesis-world | grep -E 'Name|Version'
# expect: Version: 1.3.3
python - <<'PY'
import genesis as gs
gs.init(backend=gs.cpu) # no GPU required for this check
print("init ok", gs.backend)
scene = gs.Scene()
scene.add_entity(gs.morphs.Plane())
scene.add_entity(gs.morphs.MJCF(file="xml/franka_emika_panda/panda.xml"))
scene.build()
for _ in range(50):
scene.step()
print("hello scene stepped 50 times")
PY
Same skeleton as the official Hello, Genesis World tutorial (Franka MJCF under bundled assets). First build() JIT-compiles kernels – coffee-break slow is normal. Exit cleanly (Ctrl-C is OK; a hard kill like Ctrl-\ is not) so the cache survives. Restart after a hard kill and you pay compile again.
Headless VM? Default headless scene, or set show_viewer=False. “No display detected” is the viewer asking for a window you do not have – not a failed wheel install.
Honest question after the verify block: how much of day one will be drivers and GL paths versus actual controllers? On a clean Linux+NVIDIA box, maybe twenty minutes. On WSL2 or a half-configured Docker GPU pass-through, plan for the afternoon.
Common install errors and fixes
genesis.GenesisException: Genesis hasn't been initialized. Did you call gs.init()?
An engine submodule imported before init. Call gs.init(...) first. Type-checkers only: guard with TYPE_CHECKING.
Circular import on import genesis
Cwd is the cloned source tree while a non-editable PyPI wheel is installed. cd out of the repo – or uninstall and pip install -e ".[dev]" / ".[render]" inside it. Official troubleshooting documents this exact mix-up.
Viewer / cam.render() crawls on Ubuntu
Silent MESA CPU fallback. Install NVIDIA GL (e.g. sudo apt install -y libnvidia-gl-525), check ldconfig -p | grep EGL for libEGL_nvidia.so.0, and in containers set NVIDIA_DRIVER_CAPABILITIES=all (often PYOPENGL_PLATFORM=egl too). Missing ICD under /usr/share/glvnd/egl_vendor.d/ is a classic Docker trap.
WSL2 / Docker black window or CPU fallback
Pass LD_LIBRARY_PATH=/usr/lib/wsl/lib. Nested Ubuntu on Win11 NVIDIA sometimes needs the docs’ GALLIUM_DRIVER=d3d12 / MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA experiments.
CUDA init failures on new GPUs
PyTorch wheel CUDA must match the driver. If torch cannot see the device, Genesis will not either – fix torch, then re-init.
Upgrade, pin, and uninstall
pip install -U "genesis-world==1.3.3"
# or floating latest:
pip install -U genesis-world
From source: git pull, then pip install -e ".[dev]" again. Read GitHub release notes before jumping minors – deterministic flags and contact defaults shifted in 1.3.x; older scripts may need option tweaks.
pip uninstall genesis-world gs-nyx pyuipc -y
deactivate
rm -rf .venv-genesis
docker rm -f genesis 2>/dev/null; docker rmi genesis genesis-amd 2>/dev/null
Run the verify block above, then open the Hello Genesis docs page again and drive joints instead of watching gravity win.
FAQ
What is the latest Genesis World version right now?
1.3.3 on PyPI and GitHub (13 Aug 2026). pip show genesis-world after install. Ignore posts still citing 0.2.x.
Do I need a GPU to install this general physics simulator?
No. gs.init(backend=gs.cpu) is enough to prove imports and asset paths. GPU backends matter when you batch hundreds or thousands of envs for RL – not for “does the wheel work.” A laptop CPU can save you from burning cloud hours on a broken env.
Pip install worked – why does the first scene.build take forever?
Not a broken install. Genesis JIT-compiles solver kernels for that scene layout and backend; the first build() pays it. Later identical layouts reuse cache only if the process exited cleanly – remember the Ctrl-C note above. People flip performance_mode=True too early and then wonder why every robot swap recompiles for minutes. Leave that flag for fixed training scenes once the layout is locked.