SimVX¶
A Python game engine. Write games in pure Python: node scenes, Vulkan rendering, browser export.
SimVX gives you a node-based scene tree, signals, animation, audio, UI widgets, physics, and a
GPU-driven Vulkan renderer: all as a clean, idiomatic Python API, with 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
static WebGPU HTML page that runs in the browser with no backend.
Why SimVX¶
Pure Python. 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 static WebGPU HTML page: 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 visual scene 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.
What SimVX is not¶
Stated up front, so you can rule it out quickly:
Not a C++ engine with Python bindings. Game logic runs in Python and pays Python’s cost. Hot paths live on the GPU or in NumPy; per-object logic does not.
No visual scripting. Python is the scripting language. Effort goes into the code editor instead.
No Godot, Unity or Unreal project compatibility. Scenes are Python modules and nothing imports a foreign scene format.
No engine-provided networking. Use
asyncio, websockets or gRPC directly; the engine does not wrap them.Not distributed on public PyPI. SimVX ships from its own package index. See Quick start.
Quick start¶
Install the current build from the project’s own index, with the example library alongside it:
pip install --pre "simvx[examples]" --extra-index-url https://pypi.simvx.com/
The --extra-index-url is not optional. The simvx name on public PyPI is a placeholder that
ships no code and declares no extras, so the bare pip install simvx[examples] warns that the
extra does not exist and installs nothing.
SimVX publishes continuously: every build is a dev release cut from a commit, which is why --pre
is needed too.
Or work from a clone, which is what you want in order to change the engine itself:
git clone https://git.simvx.com/simvx/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_update(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 static HTML page
Source on Gitea: read and clone the engine source
Note
SimVX is free and open source under AGPL-3.0. A Game-Distribution Exception lets you ship games, including closed-source ones, at no cost; a commercial licence is available for private engine forks and unbranded builds. See Licensing below.
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.
Build a 3D gem collector 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 (static HTML, WebGPU)
Architecture & patterns: Architecture, Patterns
Full symbol reference: API Reference
Licensing¶
SimVX is dual-licensed. Pick the row that matches what you want to do:
You want to… |
Path |
Cost |
Your obligation |
|---|---|---|---|
Open-source your game |
AGPL-3.0 |
Free |
License your game under AGPL-3.0; keep the |
Ship a game under any licence, including closed-source |
Game-Distribution Exception |
Free |
Display the “Made with SimVX” splash / watermark |
Ship closed-source without the splash, privately fork the engine, or use “Official SimVX” branding |
Commercial licence |
Paid |
Different parts of the repository carry different licences: the engine is
AGPL-3.0-or-later (with
Additional Terms and a
Game-Distribution Exception),
the examples (features / tutorials / demos) are MIT, the documentation is CC-BY-4.0 with MIT
code snippets (details), and each port under examples/ports/ is licensed per
port as a derivative of the original game.
