Installation¶
SimVX is not on PyPI yet: install from source.
Requirements¶
System Requirements
Python 3.14+
Vulkan 1.2+ capable GPU and drivers
glslc shader compiler (from the Vulkan SDK)
One windowing library: GLFW3, SDL3, or PySide6 (any one works: see Windowing Backends)
uv: workspace packages resolve only throughuv run
Install uv if you don’t have it:
curl -LsSf https://astral.sh/uv/install.sh | sh
Per-Platform Setup¶
Arch / Manjaro¶
sudo pacman -S vulkan-devel glfw shaderc
Ubuntu / Debian¶
sudo apt install libvulkan-dev libglfw3-dev glslc
macOS¶
Install the Vulkan SDK (includes MoltenVK and glslc), then:
brew install glfw
Clone & Install¶
git clone https://fezzik.dev/fezzik/simvx.git
cd simvx
# Install all workspace packages (editable) into the project venv
uv sync
# Optional: pull in dev tools (pytest, ruff, mypy, black) and/or doc build deps
uv sync --group dev --group docs
To install only a subset of packages editable (e.g. when working on a single package), use the explicit form instead:
uv pip install -e packages/core -e packages/graphics
The two dependency groups defined in the workspace pyproject.toml:
Group |
Adds |
When you need it |
|---|---|---|
|
|
running the test suite or pre-commit checks |
|
|
building the documentation locally |
Both are optional: you can use SimVX without either.
Native audio extension¶
Audio playback uses a small C extension (ma_engine) compiled at install
time by a PEP 517 build hook (packages/core/build_audio_ext_hook.py).
Three install modes control how the build is treated:
Env var |
Behaviour at install |
Behaviour at runtime |
|---|---|---|
(default) |
Tries to compile. On failure (no C compiler, etc.) the install succeeds and prints a stderr WARNING. |
If the |
|
Skips the compile step entirely. Quiet. |
Same legacy fallback with WARNING. |
|
Fails the install if the compile fails. For CI / production pipelines. |
Native required: runtime can’t fall back if the file was never built. |
# Default (best-effort native build)
uv pip install -e packages/core
# Skip the build, accept the legacy mixer
SIMVX_SKIP_AUDIO_BUILD=1 uv pip install -e packages/core
# Hard require: fail loud on missing compiler
SIMVX_REQUIRE_AUDIO_NATIVE=1 uv pip install -e packages/core
Two runtime env vars control the fallback policy:
Env var |
Effect |
|---|---|
(default) |
Native → legacy (with WARNING) → null (with WARNING). |
|
Native or |
To rebuild the extension after install without re-running pip:
uv run --with setuptools simvx build-audio
Verify Installation¶
Check the Vulkan driver:
vulkaninfo --summary
Import-check the packages:
from simvx.core import Node, SceneTree, Vec3, Property
from simvx.graphics import App
Run the core test suite:
uv run --package simvx-core pytest
Next¶
Quickstart: open a window in 20 lines
Your First 2D Game: build a Pong game end-to-end
Your First 3D Game: build a 3D asteroid dodger