SimVX

A Godot-inspired game engine written entirely in Python, featuring a scene-tree node system, Vulkan rendering, and a rich set of built-in systems for building games and simulations.

Features

  • Node system with scene tree hierarchy, signals, groups, and coroutines

  • 3D rendering via Vulkan (GPU-driven, multi-draw indirect batching)

  • Animation with tweens, sprite sheets, keyframe clips, and state machines

  • Audio with 2D/3D spatial playback, distance attenuation, and bus routing

  • UI widgets including buttons, sliders, text edits, and layout containers

  • Collision detection with GJK narrowphase, AABB broadphase, and raycasting

  • Scene serialization — scenes round-trip as Python source (JSON/pickle for save-game data)

  • Math library with Vec2, Vec3, Quat, and matrix utilities (pure NumPy)

Installation

# Install all packages in editable/dev mode
uv pip install -e packages/core -e packages/graphics -e packages/web -e packages/editor -e packages/ide

Requirements: Python 3.13+, NumPy, Vulkan 1.2+ GPU, GLFW3, glslc shader compiler.

Quick Start

import math
from simvx.core import Node, Camera3D, MeshInstance3D, Mesh, Material
from simvx.graphics import App

class MyGame(Node):
    def ready(self):
        cam = Camera3D(position=(0, 5, 10))
        cam.look_at((0, 0, 0))
        self.add_child(cam)

        self.cube = self.add_child(MeshInstance3D(
            name="Cube",
            mesh=Mesh.cube(),
            material=Material(colour=(1, 0, 0)),
        ))

    def process(self, dt):
        self.cube.rotate((0, 1, 0), math.radians(90) * dt)  # 90°/sec

app = App(width=1280, height=720, title="My Game")
app.run(MyGame())

Note

SimVX ships under a custom non-commercial licence (with a small-scale commercial exception). See LICENSE for the exact terms before using it in a product.

Core Engine