SimVX

A game engine in pure Python: node scenes, Vulkan rendering, runs in the browser.

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 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.

A PBR-lit 3D scene rendered by SimVX

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 Node subclass in a .py file; 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.py produces 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 Property system 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.

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_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

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

🚀 Install

Set up SimVX from source in a few minutes.

Installation
⚡ Quickstart

Window, draw, input: the 60-second tour.

Quickstart
🎮 Examples gallery

Browse every demo: most run in your browser.

Examples Gallery
🟦 First 2D game

Build Pong end-to-end.

Your First 2D Game
🧊 First 3D game

Build a 3D gem collector from scratch.

Your First 3D Game
🛠 Try the editor

The full visual editor, live in your browser.

https://simvx.com/editor.html

Going deeper

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 NOTICE file (no splash required)

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

Contact us

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.