A C++23 open-source 3D game engine with multiple graphics backends behind a shared RHI surface, ECS (EnTT), Jolt Physics, AngelScript scripting, and an ImGui-based editor. Originally built around first-person shooters, it now includes genre templates for RPGs, MMOs, RTS, racing, open-world, and platformers.
🌐 Website now live: sparkengine.dev
Rolling Windows artifacts may be published for development evaluation. They are
not a versioned release and do not certify stable-v1. Development artifacts may
carry checksums and provenance attestations, but no versioned Shipping-configuration
artifact has same-commit qualification across the required install, upgrade,
rollback, and release gates.
"Release" in an asset name denotes the build configuration only. Debug builds
include additional runtime diagnostics. The bootstrap installer clones and builds
the selected engine revision locally.
Current rolling artifacts and checksums · installer documentation
Build from source:
git clone --recurse-submodules https://github.com/Krilliac/SparkEngine.git
cd SparkEngine
# Windows
.\generate.bat -g "Visual Studio 17 2022" release
.\build.ps1 -config Release -editor -angelscript
# Linux / macOS
./generate.sh release -g Ninja
./build.sh releaseVisual Studio and Ninja Multi-Config builds keep binaries isolated under
build/bin/<Config> (for example, build/bin/Release/SparkEditor.exe).
Requirements: MSVC 19.36+ / GCC 13+ / Clang 17+, CMake 3.25+.
See TROUBLESHOOTING.md for build issues.
Create a game module:
cmake --install build --prefix ~/SparkEngine-install
cp -r Templates/EmptyProject MyGame && cd MyGame
cmake -B build -DCMAKE_PREFIX_PATH=~/SparkEngine-install
cmake --build build --config Release
# This template builds a module library; it does not create ./SparkEngine.
# Launch it through an existing staged/packaged SparkEngine host instead:
<path-to-existing-SparkEngine-host> -game <path-to-built-module>See Templates/README.md and SparkTemplates.
The SparkEditor source inventory contains 65 *Panel.h classes spanning scene
construction, asset and shader workflows, profiling, multiplayer operations,
collaboration, dedicated servers, world streaming, and live region design.
That file count is not a claim that every class is registered, visible by default,
or certified by stable-v1.
More screenshots
These are direct 1904×1041 captures from the current SparkEngine runtime. Each
project also has alternate wide and detail views under
docs/images/model-pipeline.
| First Person | Third Person | Top Down |
|---|---|---|
![]() |
![]() |
![]() |
| RPG | MMO | Multiplayer Arena |
|---|---|---|
![]() |
![]() |
![]() |
| Platformer | Blank 3D | Empty Project Runtime Preview |
|---|---|---|
![]() |
![]() |
![]() |
Full breadth and detail captures for every template
| Template | Wide view | Detail view |
|---|---|---|
| FPS Starter | ![]() |
![]() |
| Third Person Starter | ![]() |
![]() |
| Top Down Starter | ![]() |
![]() |
| RPG Starter | ![]() |
![]() |
| MMO Starter | ![]() |
![]() |
| Multiplayer Arena | ![]() |
![]() |
| Platformer Kit | ![]() |
![]() |
| Blank 3D | ![]() |
![]() |
| Empty Project | ![]() |
![]() |
Six backends via a shared RHI abstraction:
Support words below are the stable-v1 release-profile classifications from
docs/site/readiness.json; see
Platform support.
| Backend | Declared support |
|---|---|
| DirectX 11 | In stable-v1 — primary implementation path; profile blocked and uncertified |
| DirectX 12 | Outside stable-v1 — experimental; mesh shaders, DXR ray tracing, VRS |
| Vulkan 1.4 | Outside stable-v1 — experimental; Linux and Windows |
| OpenGL | Outside stable-v1 — experimental; the Linux RHI bootstrap requests 4.5, SDL host/editor contexts request 3.3, and the macOS fallback is capped at 4.1. Mesa llvmpipe is a development-only software route when explicitly selected and configured, not an automatic fallback |
| Metal | Outside stable-v1 — experimental; macOS, in progress |
| NullRHI | In stable-v1 — no-render path on Windows 11 x64; profile blocked and uncertified |
Render features include PBR materials, global illumination (DDGI, Adaptive Probe Volumes, hybrid ray tracing), forward/deferred/clustered render paths, cascaded shadow maps, GPU-driven rendering (compute frustum culling, indirect draw), virtual texturing, mesh shaders, DXR 1.1, FSR upscaling, and a 35-node Shader Graph. Post-processing covers bloom, HDR tone mapping (Reinhard/ACES/Uncharted 2), TAA, FXAA, MSAA, depth of field, motion blur, volumetric fog, lens flares, and light shafts.
Jolt Physics with rigid bodies (static/kinematic/dynamic), 15 collision shapes, 12 constraint types, raycasting, sphere/box overlap, shape casting, vehicles (wheeled/tracked), ragdolls, cloth, soft bodies, and destruction. Supports deterministic mode for replays and multiplayer.
The active backend selection is XAudio2 on Windows or OpenAL on non-Windows hosts, with NullAudio as the final silent fallback. Distance attenuation, Doppler, pitch/volume control, master/SFX/music channels, and an object pool for source management are implemented on the real backends.
- AngelScript — hot-reload via file watcher, bindings for selected engine APIs, per-file module isolation, client/server context separation
- Visual scripting — 64 node palette entries across 9 categories, compiles to AngelScript and uses the existing script runtime
- Shader Graph — 35+ nodes, HLSL generation, live preview
Behavior trees with blackboard, Recast/Detour NavMesh with dynamic obstacles, EQS for tactical point queries, steering behaviors (seek/flee/pursue/flock), perception (vision cones, hearing, threat memory), cover detection, formation movement, group coordination, and an AI budget limiter supporting 100+ simultaneous agents.
UDP client/server with entity replication, dirty property tracking, client-side prediction, server reconciliation, and lag compensation (hitbox rewinding, 1-second history). Message channels: Unreliable, Reliable, ReliableOrdered. Delta snapshot compression, network statistics (ping, jitter, packet loss, bandwidth). MMO-scale architecture: AreaServer + WorldServer, entity migration across server instances, per-area session management, load balancing.
EnTT-backed ECS with 75+ component types. Includes: FPS weapons, damage model, HUD; vehicle physics; inventory, quests, achievements, dialogue trees; ability/cooldown/trigger system; destructible objects; replay record/playback; day/night cycle; weather; 2D/sprite rendering; tween system; async coroutine scheduler; save/load with ECS-aware serialization; async database-backed persistence.
Large worlds: Source includes area-streaming and floating-point origin-rebasing implementations. "No load screens" and "100K+ entities per area" are design/load-test targets, not stable-v1 evidence; the 100K entity-flood test validates entity-count correctness rather than per-area throughput or release performance.
Scene hierarchy, Inspector, Asset browser, Game viewport, Gizmos (ImGuizmo), Node graphs (imnodes), Animation timeline, Material editor, Visual script editor, Terrain editor, Weapon editor, Profiler, AI debugger, Physics debug overlay, Cinematic sequencer, Dialogue editor, Ability/condition editors, Destruction editor, 2D/tilemap editors, Audio mixer, Replay panel, Save system panel, Dedicated server panel, Version control integration, Build/deployment pipeline, Level streaming, Command palette (Ctrl+P), Prefab system, Event monitor, Coroutine debugger, Collaboration panel (multi-user with node locking and presence), and more. Collaboration, visual scripting, and their service paths are experimental and outside stable-v1; rotate/scale gizmo behavior and full undo/redo certification remain open.
Nine in-tree template projects load as .dll/.so modules at runtime. All nine templates are outside stable-v1. Separately, GameModules/SparkGameFPS is the blocked in-profile slice and does not yet build independently against the installed SDK:
| Template | Highlights |
|---|---|
| Empty Project | Clean authoring world plus an explicit runtime-origin preview |
| Blank 3D | Camera controls, material studies, reusable primitive stage |
| FPS Starter | Weapons, damage, ammo, crosshair, target range |
| Third Person Starter | Character movement, pickups, portal objectives |
| Top Down Starter | Click-to-move combat, enemies, arena objectives |
| RPG Starter | Village exploration, dialogue, quests, inventory, abilities |
| MMO Starter | Player sessions, frontier objectives, area-ready gameplay |
| Platformer Kit | Gravity, sprinting, jumping, hazards, checkpoints |
| Multiplayer Arena | Teams, scoring, sudden death, symmetric tactical cover |
Tests: 6,966 test definitions across 576 files covering core utilities, ECS, physics, AI, animation, networking, gameplay, graphics, editor, and 50+ other subsystems.
ctest --test-dir build -C Release --output-on-failure --no-tests=error
# `SparkEngineTests` is the registered native-test aggregate. `TestPhysics`
# is a source-test family, not a CTest registration name.
ctest --test-dir build -C Release -R "^SparkEngineTests$" --output-on-failure --no-tests=errorSanitizer CI jobs:
| Suite | Detects |
|---|---|
| ASan + UBSan + LSan | Buffer overflows, use-after-free, UB, memory leaks |
| TSan | Data races, deadlocks |
| MSan | Reads of uninitialized memory |
Run locally:
cmake -B build-asan -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=ON \
-DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-omit-frame-pointer"
cmake --build build-asan && ./build-asan/bin/SparkTestsWhen a workflow uploads sanitizer or coverage results, they are available from that run on the GitHub Actions page. The primary Windows, Linux, and macOS lanes also retain granular JUnit XML, machine-readable JSON totals, runtime, and slow-test tables. CI rejects a missing, empty, malformed, failed, or suspiciously under-registered test run; the badge above remains explicitly source-definition based rather than claiming that every platform executed the same feature-gated cases.
Key CMake options:
| Option | Default | Description |
|---|---|---|
ENABLE_GRAPHICS |
ON | Declared option, but currently not consumed by target/source selection; setting it OFF does not strip the RHI |
ENABLE_EDITOR |
ON | ImGui editor |
ENABLE_NETWORKING |
ON | UDP multiplayer |
ENABLE_VULKAN |
ON | Vulkan backend |
ENABLE_OPENGL |
ON | OpenGL backend |
ENABLE_METAL |
ON on macOS; OFF elsewhere | Metal backend |
ENABLE_DXR |
ON | Ray tracing |
ENABLE_VR |
OFF | VR/AR |
ENABLE_MOBILE |
OFF | Mobile features |
BUILD_TESTS |
ON | Test suite |
BUILD_GAME_MODULES |
ON | 11 in-tree game modules |
ENABLE_SERVER_PROCESSES |
ON | Dedicated server, MMO gateway, daemon orchestration, and collaboration processes |
ENABLE_ASSET_PIPELINE_TOOLS |
ON | Deterministic asset cooker and isolated worker |
ENABLE_AUTOMATION_HOST |
ON | Black-box runtime automation and CI result host |
Development headless run (no editor window; this does not compile the RHI out):
cmake -B build -DENABLE_EDITOR=OFF
cmake --build build --config Release
./build/bin/SparkEngine -headless -game <module-path>ENABLE_GRAPHICS=OFF is currently inert. Compile-time graphics removal remains
unproven; the headless entry points use runtime wiring and HEAD-220 is open.
These are build and development minima — what it takes to configure, compile,
and run from source. They are deliberately broader than the supported release
surface and are not a support claim: the only declared release profile is
stable-v1 (Windows 11 x64), described under Platform support
below. Everything else in this table is experimental or uncertified.
| Minimum | Recommended | |
|---|---|---|
OS (build floor, not stable-v1) |
Windows 10 / Ubuntu 24.04 / macOS 12+ | Windows 11 / Ubuntu 24.04 |
| Compiler | MSVC 19.36, GCC 13, Clang 17 | MSVC 19.36+, GCC 13+, Clang 17+ |
| C++ | C++23 | C++23 |
| GPU | Any DirectX 11 capable | RTX 2080+ for ray tracing |
| RAM | 4 GB | 16 GB |
| Storage | 5 GB | 10 GB with all game modules |
| Build tools | CMake 3.25+ | CMake 3.25+, Ninja |
The stable-v1 contract targets the no-render NullRHIDevice path on Windows 11 x64, but the current Windows and SparkServer headless entry points pass a null graphics service and do not instantiate it (HEAD-220 remains open). NullRHI itself rasterizes no pixels; use on every other host remains uncertified.
Platform support. SparkEngine declares exactly one release profile, stable-v1:
Windows 11 x64, the MSVC v143 toolset line, Direct3D 11, NullRHI for headless
execution, C++ gameplay modules, and one installed first-party single-player
vertical slice — GameModules/SparkGameFPS — plus the required Windows editor,
console, cooker, launcher, installer, and other build products enumerated by the
contract. The profile, its boundaries, its
required gates, and its evidence are owned by
docs/site/readiness.json and rendered into the
engine-readiness handoff. Every
support word below is that contract's classification, not a separate claim.
stable-v1 is currently blocked and nothing in it is certified. In particular:
the first-party slice is in scope but its release state is blocked, and it still
builds against the engine library and source tree rather than the public SDK alone
(SDK-240, MOD-310); and the v143 line names a supported toolchain family, not
a pinned one — no exact MSVC compiler build or Windows SDK version is pinned, and
the hosted image floats, so the toolchain is neither reproducible nor certified
(BLD-100, PLT-200, CI-120).
Breadth is frozen around that shape. Linux, macOS, D3D12, Vulkan, OpenGL, Metal,
multiplayer, production services, and the prototype game modules all keep their
own open work, but that work does not gate stable-v1 — and stable-v1 certifies
none of them. They stay labelled experimental or unsupported until a profile
declares them.
Windows 11 x64 is the profile's only host. The profile remains blocked and uncertified.
The build minima in the table above describe development floors, not release certification. Windows 10 x64, Linux, and macOS remain development paths and are uncertified.
| Platform | Compiler | Backend | Declared support |
|---|---|---|---|
| Windows 11 x64 | MSVC v143 (VS 2022) | DirectX 11 | In stable-v1 — primary implementation path; blocked and uncertified |
| Windows 11 x64, headless | MSVC v143 (VS 2022) | NullRHI (no-render) target | In stable-v1 — current host wiring still passes nullptr (HEAD-220); blocked and uncertified |
| Windows 10 x64 | MSVC v143 (VS 2022) | DirectX 11 | Outside stable-v1 — documented build floor, uncertified |
| Windows, any version | MSVC v145 (VS 2026) | DirectX 11/12 | Outside stable-v1 — advisory CI lane only |
| Linux | GCC 13+ / Clang 17+ | Vulkan/OpenGL | Outside stable-v1 — experimental, CI tested |
| macOS | Apple Clang | Metal | Outside stable-v1 — experimental |
| Headless on any other host | GCC / Clang / MSVC | NullRHI (no-render) | Outside stable-v1 — uncertified |
| Resource | Description |
|---|---|
| TROUBLESHOOTING.md | Startup issues, debug commands, common fixes |
| Feature Roadmap | Planned features |
| Project Status | System status, recent changes |
| API Reference | Auto-generated symbol indexes, class hierarchy |
| Packaging Guide | Install layout, components, versioning |
| External Services & Orchestration | Dedicated hosting, gateway, daemon supervision, and collaboration |
| Offline Cooking & Automation | Deterministic asset builds, workers, pak inspection, and runtime smoke tests |
| Versioned Plugin ABI | Versioned C plugin boundary, sidecar integrity, tasks, and hot reload |
| Game Module Guide | Building standalone games with the SDK |
| Networking Config | UDP, replication, MMO server setup |
| Wiki | 198 Markdown pages in the current source inventory (excluding _Sidebar.md); inventory is not support/readiness evidence |
| DeepWiki | Community knowledge base |
Execution order: Physics → Animation → AI → Audio → Lifecycle → Render
SparkEngine/
├── SparkEngine/Source/
│ ├── Core/ Platform.h, EngineContext.h
│ ├── Graphics/ RHI (6 backends), RenderGraph, GI
│ └── Engine/
│ ├── ECS/ 75+ component types
│ ├── AI/ BehaviorTree, NavMesh, EQS
│ ├── Animation/ Skeletal, IK, Sequencer
│ ├── Networking/ UDP, Area/World Servers
│ ├── Scripting/ AngelScript, Visual Scripting
│ ├── Gameplay/ Weapons, Quests, Inventory
│ └── 20+ other systems
├── SparkEditor/Source/ 65 *Panel.h classes, collaboration
├── SparkConsole/src/ Standalone debug console
├── GameModules/ 11 in-tree module directories
├── Tests/ 6,966 test definitions, 576 files
├── wiki/ 198 Markdown pages excluding _Sidebar.md (inventory only)
└── docs/ API reference, guides
- Fork the repository and create a feature branch
- Follow the coding standards in CLAUDE.md — C++23, zero warnings, RAII, const-correct
- Add tests for new functionality
- Run
clang-format(enforced in CI) and ensure all tests pass - Open a pull request — one feature per PR
Questions and bug reports: GitHub Issues
Discussion: Discord
Documentation: Wiki
Thanks to the Jolt Physics, Dear ImGui, EnTT, Khronos (Vulkan/OpenGL), and AngelScript teams.
Spark Open License 1.0 — no royalties, no fees, use for any purpose (commercial or otherwise), modify and redistribute freely.
This project makes use of AI-assisted development. All AI-generated code is reviewed and tested before merging.
































