SimVX¶
A Godot-style game engine in pure Python: node scenes, Vulkan rendering, runs in the browser.
SimVX gives you a Godot-like scene tree, signals, animation, audio, UI widgets, physics, and a
GPU-driven Vulkan renderer: all as a clean, idiomatic Python API, with nothing to compile and no
second language to learn. The visual editor and the integrated IDE are themselves built using the
engine. Scenes are authored and saved as ordinary .py files, and any game can be exported to a
single self-contained WebGPU HTML page that runs in the browser.
Why SimVX¶
Pure Python, no build step. Write game logic, tools, and editor plugins in real Python: use any PyPI package,
pdb, and your existing toolchain. No custom scripting language.Scenes are Python. A scene is a
Nodesubclass in a.pyfile; the editor round-trips scenes to and from source. No custom scene format. (Save-games use JSON or pickle.)One command to the browser.
simvx export web game.pyproduces a single standalone WebGPU HTML file: the same scene code as the desktop Vulkan build.
Features¶
Node scene tree: hierarchy, signals, groups, coroutines, and a
Propertysystem that is inspector-visible and serialisable.GPU-driven rendering: a Vulkan forward renderer (multi-draw indirect, PBR, shadows, SSAO, bloom, post-processing) on the desktop; WebGPU in the browser.
2D and 3D, one API: sprites, tilemaps, and 2D lighting alongside PBR meshes, skeletal animation, particles, and physics.
Animation & audio: tweens, sprite sheets, keyframe clips, and state machines; 2D/3D spatial audio with bus routing.
UI, editor & IDE: buttons, sliders, trees, and layout containers, plus a Godot-style visual editor and an engine-native Python IDE, all built on the same widget system.
Headless test harness: render frames without a window, replay input deterministically, and assert on scene state.
Quick start¶
Install from source with uv (SimVX is not yet on PyPI):
git clone https://fezzik.dev/fezzik/simvx.git
cd simvx
uv sync
Then write a scene: a Node subclass is a complete program:
import math
from simvx.core import Camera3D, Material, Mesh, MeshInstance3D, Node
from simvx.graphics import App
class MyGame(Node):
def on_ready(self):
cam = self.add_child(Camera3D(position=(0, 5, 10)))
cam.look_at((0, 0, 0))
self.cube = self.add_child(MeshInstance3D(
name="Cube",
mesh=Mesh.cube(),
material=Material(colour=(1.0, 0.2, 0.2, 1.0)),
))
def on_process(self, dt):
self.cube.rotate((0, 1, 0), math.radians(90) * dt) # 90 degrees/sec
App(width=1280, height=720, title="My Game").run(MyGame())
Run it with uv run python my_game.py and a window opens with a red cube spinning. Or launch a full game straight away:
uv run python examples/demos/asteroids2d.py
Where to go next¶
Examples gallery: every demo, most playable right in your browser
Live editor: the full visual editor, no install (beta)
Documentation: quickstart, tutorials, and the full API reference
Web export guide: ship a game as a single HTML file
Source on Gitea: report issues and contribute
Note
SimVX is free for non-commercial use. See LICENSE for the exact terms before using it in a product.
Start here¶
Set up SimVX from source in a few minutes.
Window, draw, input: the 60-second tour.
Browse every demo: most run in your browser.
Build Pong end-to-end.
A 3D asteroid dodger from scratch.
The full visual editor, live in your browser.
Going deeper¶
Engine API: Core Engine (nodes, signals, animation, audio, UI, physics, …)
Rendering: Graphics Backend (cameras, materials, shaders, 2D drawing)
Ship to the web: Web Export (single-file HTML, WebGPU)
Architecture & patterns: Architecture, Patterns
Full symbol reference: API Reference
