Repository navigation
System Requirements
Audience: Players, Producers, Engineers planning deployment targets
Thread Context: N/A (informational)
Platform/Backend Scope: Implementation/build-path inventory for Windows, Linux, macOS, and the RHI backends; release support is limited below.
Release boundary: This page records build requirements and source implementation paths; it is not a support matrix. The only declared profile is
stable-v1; its host/backend boundary is Windows 11 x64, MSVC v143, D3D11, and Windows NullRHI, with the full required product set enumerated in readiness. It is blocked and uncertified. Windows 10, Linux, macOS, other compiler lines, and other graphics backends are development or experimental paths outside it.
SparkEngine contains build and runtime paths for Windows, Linux, and macOS, with
per-platform differences in backend and feature wiring. This page distinguishes
source-enforced configuration limits from unverified planning estimates. Only
values with a source reference are treated as current implementation facts;
none of the hardware guidance is stable-v1 certification.
| Aspect | Minimum | Recommended |
|---|---|---|
| Release candidate OS | Windows 11 x64 (stable-v1 target; blocked/uncertified) |
Windows 11 x64 |
| Development floor | Windows 10 x64 (outside the release profile) | Windows 10/11 SDK development path |
| CPU Architecture | x86-64 | x86-64 |
| CPU Baseline | x86-64 with SSE4.2 (stable-v1 floor, OD-04) |
AVX2 only for host-tuned SPARK_NATIVE_ARCH=ON builds, which are not distributable |
| GPU (Primary) | D3D11 Feature Level 10.0 | D3D11 FL 11.1 |
| GPU (Optional) | D3D12 FL 12.0 (Win10+) | D3D12 FL 12.0 with DXR Tier 1.1 |
| Compiler | MSVC 19.36+ (VS 2022 17.6+, v143 toolset) | MSVC v143 / v145 |
| Audio | XAudio2 (Win32 runtime) | XAudio2 |
| CMake | 3.25+ | 3.25+ |
| C++ Standard | C++23 | C++23 |
Primary development and CI target. D3D11 is the primary implementation path,
not a shipping-certified backend; D3D12 + DXR are experimental. MinGW + Wine is
a development cross-compile path outside stable-v1 (see
Cross-Compilation — Wine Testing).
| Aspect | Minimum | Recommended |
|---|---|---|
| OS Version | Ubuntu 24.04 LTS x86-64 is the only support row (OD-10); other distributions are unsupported | Ubuntu 24.04 LTS (CI standard) |
| CPU Architecture | x86-64 only (no ARM64 Linux support today) | x86-64 with SSE4.2 |
| Graphics implementation paths | Vulkan 1.3; the OpenGL RHI bootstrap requests 4.5, while SDL runtime/editor hosts request 3.3 | Vulkan 1.3 development path |
| Software graphics route | Mesa llvmpipe only when explicitly selected and configured; it is not a GPU requirement or automatic fallback | Native GPU for development |
| Compiler | GCC 13+ or Clang 17+ | GCC 14 |
| Audio | OpenAL Soft | OpenAL Soft |
| Windowing | SDL2 + X11 | SDL2 + X11/Wayland |
| CMake | 3.25+ | 3.25+ |
| C++ Standard | C++23 | C++23 |
SPARK_HEADLESS_SUPPORT adds a compile definition used by host code; the runtime
-headless path currently initializes no graphics/RHI device. NullRHIDevice is a separate factory path;
wiring it into packaged headless hosts remains HEAD-220 work. Linux headless
execution is outside stable-v1 and uncertified. Vulkan falls back to 1.3 from
1.4 automatically at runtime.
A Linux package for that row may need at most GLIBC_2.39, GLIBCXX_3.4.33,
CXXABI_1.3.15 and GCC_14.0.0, the versions stock Ubuntu 24.04 provides.
VerifyLinuxInstalledRuntime and VerifyLinuxPackagedRuntime fail on any
higher symbol-version need. Build release packages on Ubuntu 24.04 (or in a
noble container). A build on a newer distribution links newer glibc symbol
versions and does not load on 24.04. For example, Ubuntu 26.04 binds libm
atan2f/asinf/acosf/sqrtf to GLIBC_2.43. See
Linux support evidence §6.1.
| Aspect | Minimum | Recommended |
|---|---|---|
| OS Version | macOS 13.3 Ventura (CMAKE_OSX_DEPLOYMENT_TARGET=13.3) |
macOS 15 Sequoia (the macos-15 CI image) |
| CPU Architecture | x86-64 or ARM64 | Apple Silicon (M1+) |
| CPU Baseline | ARM NEON or x64 SSE4.2 | Apple Silicon M-series |
| GPU path | Runtime device capability checks; no certified Metal release profile | Runtime device capability checks; no certified Metal release profile |
| Alternate path | OpenGL implementation path (deprecated by Apple) | Metal implementation path |
| Vulkan compatibility layer (optional) | MoltenVK translates Vulkan calls to Metal; it is not a GPU | MoltenVK development path |
| Hardware Ray Tracing | Not assumed from CPU or OS version | Runtime device must report supportsRaytracing; no Metal release certification |
| Compiler | Apple Clang (Xcode 15+) | Apple Clang (Xcode 16) |
| Audio | OpenAL Soft (Homebrew) | OpenAL Soft |
| Windowing | SDL2 | SDL2 |
| CMake | 3.25+ | 3.25+ |
Hardware RT is gated with [device supportsRaytracing] and
@available(macOS 12.0, *) in MetalRayTracing.mm. The 13.3 deployment
floor always satisfies the OS check, so supportsRaytracing is the effective
gate; devices without it fall back to the SDFGI software path automatically.
The 13.3 floor comes from C++23 std::format of floating-point values, which
needs libc++ floating-point to_chars (shipped from macOS 13.3). The single
canonical value is SPARK_MACOS_MIN_VERSION in the root CMakeLists.txt;
tools/check_macos_min_version.py (CTest MacOSBaseline_MinimumVersionParity)
fails when a workflow, this page, or a built Mach-O image disagrees with it.
These are two different things that often get conflated:
- Apple Silicon is the CPU/SoC architecture — the M-series chips (M1/M2/M3/M4) introduced in 2020. ARM64-based with unified memory shared between CPU, GPU, and Neural Engine. Replaced Intel x86 Macs.
- Metal is Apple's graphics API — the analogue of DirectX or Vulkan. Shipped in 2014 (iOS 8, OS X 10.11), long before Apple Silicon. Apple ships the API on both Intel and Apple Silicon hardware.
The API and the CPU architecture are orthogonal: Metal exists on Intel Macs,
and non-Metal code (OpenGL, for example) exists on Apple Silicon. That is a
statement about Apple's platform, not about SparkEngine. SparkEngine's source
contains x64 and ARM64 Mac paths; both are experimental and outside
stable-v1, and owner decision OD-11 limits any future macOS row to Apple
Silicon only (PLT-220).
These numbers describe what the engine itself consumes, independent of game content. Assets, entities, and game logic pile on top.
-
Worker threads:
std::hardware_concurrency() - 1(Utils/JobSystem.h:75). So a 4-core box gets 3 workers, an 8-core box gets 7. -
Physics threads: Jolt uses the same formula, dynamically sized pool
(
Physics/PhysicsSystem.cpp:385). - No hard cap on frame work — scales with content.
Instruction-set floor (BLD-100 / OD-04). The stable-v1 CPU floor is
x86-64 with SSE4.2 (the x86-64-v2 level: SSE4.1, SSE4.2, POPCNT). Unless
SPARK_NATIVE_ARCH=ON, cmake/SparkCpuFloor.cmake builds vendored Jolt with
USE_AVX, USE_AVX2, USE_AVX512, USE_FMADD, USE_F16C, USE_LZCNT and
USE_TZCNT OFF. Jolt publishes its ISA flags PUBLIC, so before this change
every target linking it (including SparkEngineLib) also compiled with
-mavx2 -mfma -mf16c -mlzcnt -mbmi. Configuration now fails when any
target or global flag selects an instruction set above the floor.
Tests/Tools/test_cpu_floor.py covers this check, including the vendored Jolt
configuration.
Two further checks cover what configure-time flag checks cannot see:
-
Linked-image scan.
tools/check_isa_baseline.pydisassembles ELF or PE images withobjdump/llvm-objdump. It fails on any AVX (VEX/EVEX), ymm/zmm, AVX-512 opmask, FMA, F16C, BMI1/BMI2, LZCNT or MOVBE instruction, and on the legacy-encoded AES-NI, PCLMULQDQ, SHA-NI, GFNI, RDRAND, RDSEED and ADX instructions, outside functions exempted with--allow-symbol, which is only for CPUID-dispatched code. It also fails on the XSAVE, TSX, FSGSBASE, SSE4a, 3DNow!, CLFLUSHOPT/CLWB, RDPID, WAITPKG, MOVDIRI/MOVDIR64B, SERIALIZE, PKU and AMX families. The one XGETBV the engine itself runs, inSpark::Detail::ReadXcr0after the CPUID OSXSAVE check, is exempt for XSAVE only, by exact procedure name. TZCNT is reported but allowed: it has the same encoding asREP BSF, which GCC and Clang emit at the SSE4.2 floor. The configure-time check also rejects the matching-mmovbe,-maes,-mpclmul,-msha,-mgfni,-mrdrnd,-mrdseed,-madx,-mvaesand-mvpclmulqdqflags. CTestCpuFloor_IsaBaselinescans the built engine, editor, server and game-module images.CpuFloor_IsaBaselineCheckerproves the scanner on ELF and PE fixtures built with and without the extensions. Windows images are not scanned in CTest yet. The image scan is registered for ELF and applicable Windows MSVC builds. The scanner checks an MSVC image against its PDB, with reviewed exemptions for the MSVC runtime's CPUID-dispatched code (see CI-Reproducible-Builds). The local Release images still contain libsodium's AVX2 and AES-NI variants, which the MSVC build of libsodium compiles, and AVX-512 loops that MSVC's auto-vectorizer adds behind a runtime__isa_availablecheck. A registered Windows scan therefore fails until the product findings and undecodable bytes are resolved. Shipping CI invokes the scan's custom target even withBUILD_TESTS=OFF; it requires matching PDBs and LLVM tools. -
Startup check. The
SparkEngine(Windows and POSIX),SparkEditorandSparkServerentry points callSpark::DescribeStableCpuFloorFailure(Spark::DetectCpuFeatures())(Utils/MultiISA.h, CPUID + XGETBV) before logging, crash handling or server startup. On a CPU missing SSE2/SSE3/SSSE3/SSE4.1/SSE4.2/POPCNT, the entry point prints the missing features (the Windows engine and editor show a message box when launched with no console) and exits with a failure code.MultiISADispatchnow picks its level from the same runtime detection, not from compile-time macros.GetDetectedLevel()andConsole_GetReport()report what the CPU can do. A dispatcher reports the kernel it actually runs throughSelectLevel(). For example, a floor build ofCpuNeuralInferenceruns its SSE2 kernel on an AVX2 CPU.
The startup check is best-effort. Static initializers run before main and
may already use SSE4.2 instructions, so a CPU below the floor can still fault
before the message appears. No Shipping binary has yet been run on an SSE4.2-only
CPU or emulator.
CpuFloor_BelowFloorStartupRefused uses Intel SDE's Penryn (below floor)
and Nehalem (at floor) models to execute the built SparkEngine --version
entry point. The required Windows VS2022 and Linux GCC Release jobs download
SDE 10.13.1 with checked SHA-256 archives, then run this CTest. SDE is a CI
tool and is not part of a SparkEngine package. This checks the real startup
path for those two CPU models; it does not replace a Shipping package run.
Core-count guidance below is an unverified planning estimate. PERF-100 remains
open; no same-commit benchmark artifact establishes a release minimum.
Default fixed budgets (all configurable in EngineSettings::Memory):
| Pool | Default | Source |
|---|---|---|
| Physics temp allocator (Jolt) | 16 MB | Physics/PhysicsSystem.cpp:381 |
| Texture streaming | 512 MB | Graphics/TextureSystem.h:379 |
| Mesh streaming | 256 MB | Core/EngineSettings.h |
| Audio streaming | 128 MB | Core/EngineSettings.h |
| Shader cache | 64 MB | Core/EngineSettings.h |
| Constant-buffer ring (per frame) | 2 MB | Graphics/ConstantBufferRing.h:15 |
| Transient vertex / index (per frame) | 4 / 2 MB | Graphics/RHI/TransientBufferAllocator.h:67 |
Content-side caps:
| Category | Cap |
|---|---|
| SDF primitives (software RT) | 2,048 (SDFSceneManager.h:42) |
| Particles (default) | 10,000 |
| Decals (default) | 256 |
| Loaded streaming areas | 4 |
| ECS entities | No hard cap — EnTT sparse set |
No current same-commit evidence artifact establishes process RSS or game-memory
baselines. The older estimates were removed pending PERF-100 measurement and
provenance.
Default render targets scale with resolution:
| Target | Default |
|---|---|
| Shadow maps | 2048×2048 (GraphicsEngineTypes.h:139) |
| Volumetric fog froxels | 160×90 at 1080p |
| Light-cluster tiles | 16×16 pixels per tile |
Ray-tracing quality-tier settings (HybridRTTypes.h:100):
| Tier | Resolution scale | Maximum trace steps |
|---|---|---|
| Low | 0.25× | 32 |
| Medium | 0.5× | 64 |
| High | 1.0× | 96 |
| Ultra | 1.0× | 128 |
No current same-commit evidence artifact establishes total VRAM envelopes.
Content, driver, backend, and resolution make those values workload-specific;
PERF-100 must provide measured budgets before release guidance is claimed.
The 512 MB texture value is a soft eviction target: TextureEviction selects
over-budget textures for eviction and then runs collection. It is not a certified
total-VRAM envelope.
SparkEditor runs the full engine plus ImGui, an inventory of 64 *Panel.h
classes, the asset database, and collaborative-edit sessions. Registration and
default visibility are separate from that source-file count. No current evidence
artifact establishes a certified editor RAM/VRAM overhead.
These figures are uncited planning placeholders, not measured requirements or
certified stable-v1 guidance. Validate them against the actual game and hardware.
For planning hypothetical game targets before release certification:
| Target | CPU | RAM | GPU | VRAM |
|---|---|---|---|---|
| Minimum | 2-core x64 (2015+) | 4 GB | GT 1030 / iGPU | 2 GB |
| Recommended | 4-core x64 (2018+) | 8 GB | GTX 1660 / RX 580 / Apple M1 | 4 GB |
| High-End (RT on) | 6-core x64 | 16 GB | Example discrete RT-class GPU; runtime capability checks still apply | 8 GB |
| Ultra (4K + RT) | 8-core x64 | 32 GB | RTX 4070 / RX 7800 / Apple M3 Max | 12 GB+ |
For CI / build machines:
| Role | Spec |
|---|---|
| Linux CI runner |
ubuntu-24.04 (GitHub-hosted) |
| Windows CI runner | GitHub-hosted windows-2022 with VS 2022; not Windows 11 host certification |
| macOS CI runner | GitHub-hosted macos-15 (Apple Silicon arm64 image) |
CI lanes use configured compiler caches for incremental build speed. Historical
wall-clock figures are planning data, not stable-v1 release evidence.
These CMake options differ in maturity. The table calls out the currently inert graphics toggle rather than presenting it as a working build reduction:
| Option | Default | Effect when OFF |
|---|---|---|
ENABLE_NETWORKING |
ON | Omits ENABLE_NETWORKING and networking libraries from SparkEngineLib; standalone service targets are controlled separately by ENABLE_SERVER_PROCESSES
|
ENABLE_VULKAN |
ON | Disables Vulkan discovery and omits SPARK_VULKAN_SUPPORT; root CMake does not separately filter Vulkan source files |
ENABLE_METAL |
auto-ON on APPLE | Smaller binary on macOS if only OpenGL is wanted |
ENABLE_DXR |
ON | Skips DXR shader compilation and, with hybrid RT enabled, omits SPARK_HARDWARE_RT
|
ENABLE_HYBRID_RT |
ON | Omits SPARK_HYBRID_RT and its hardware-RT definition setup |
ENABLE_RECAST |
ON | Drops the Recast/Detour navigation integration where the option is consumed |
SPARK_DOUBLE_PRECISION_PHYSICS |
OFF | Lower precision, less memory for huge worlds |
BUILD_TESTS |
ON | Removes SparkTests from the build entirely |
BUILD_GAME_MODULES |
ON | Omits in-tree game-module targets; editor, tools, and other enabled products remain |
See CLAUDE.md Build section for the full list.
-
"Engine won't start on macOS" — macOS/Metal is experimental and outside
stable-v1. Check the selected backend and device-capability logs; do not infer ray-tracing support from CPU architecture alone. -
"Low-spec Linux box crashes at startup" — Try
-DSPARK_HEADLESS_SUPPORT=ONat configure time and launch with-headless.SPARK_HEADLESS_SUPPORTadds its compile definition; host code implements the entry-point behavior and-headlessselects the runtime path. Mesa llvmpipe is a separate explicitly configured OpenGL development route. -
"Windows build refuses to run on Win7/8" — those hosts are below the
documented Windows 10 development floor and outside
stable-v1; no compatibility claim or diagnosis is made for them. -
"Out-of-memory under heavy RT" — Drop
HybridRTManager::SetQuality(RayTracingQuality::Low)or reduce the streaming budgets inEngineSettings::Memory.
- Platform Input — per-platform input backends
- Cross-Compilation — Wine Testing — MinGW + Wine path
- Mobile Platform — mobile port notes
- VR Support — VR-specific hardware
- RHI Abstraction Layer — backend internals
- Codebase Statistics — size metrics
Published from 614bca17b41e. Edit the canonical source in wiki/.
- Documentation
- Docs route
- Wiki index
- Guides
- Tutorials
- Samples
- Examples
- API Reference
- API route
- Reference
- Build Guide
- Dependencies
- FAQ
- Changelog
- Roadmap
- Contributing
- Code of Conduct
- Home
- FAQ
- Getting Started
- Quick-Start Tutorial
- Making Your First Game
- Making Your First Multiplayer Game
- Artist Workflow Guide
- Editor Walkthrough
- Migration Guide
- How SparkEngine Works
- Architecture Overview
- Engine Architecture Flowchart
- Creating a Game Module
- Game Modules (catalog)
- Entity Component System
- Rendering and Graphics
- Physics
- Cloth Simulation
- Audio
- Input System
- Camera System
- Scripting with AngelScript
- Visual Scripting
- AI and Navigation
- Animation
- 2D Systems
- Networking
- Dedicated Server
- Multiplayer Quick Start
- Area Server Architecture
- Scene Management
- Large World Support
- Collaborative Editing
- Coroutine System
- Event System
- Event Response System
- Job System
- UI System
- UI Layout Extensions
- Localization
- Dialogue System
- Destruction System
- Replay System
- Achievement System
- Loading System
- Mod System
- Content Delivery
- Tween System
- Memory Integrity
- Gameplay Systems
- Terrain and Procedural Generation
- Save System
- Persistence System
- Day Night Cycle and Weather
- Cinematic Sequencer
- Runtime Prefabs
- SparkEditor
- Editor Tutorials
- SparkConsole
- SparkDaemon
- Shader Pipeline
- Asset Pipeline
- Asset Validation
- Asset Migration
- Game Packaging
- Online Services
- DataTable System
- Loot and Crafting System
- CSG System
- Font System
- Timer Manager
- Movie Render Pipeline
- HLOD and World Partition
- Remote Debug System
- Selection Manager
- Asset Dependency Graph
- Editor Automation
- File Watcher
- Project Templates
- System Requirements
- VR Support
- Mobile Platform
- Accessibility
- Platform Input
- Platform Certification
- Cross-Compilation: Wine Testing
- RHI Abstraction Layer
- D3D11 Backend
- D3D12 Backend
- Vulkan Backend
- OpenGL Backend
- Metal Backend
- DXR Raytracing
- Hybrid Ray Tracing
- Upscaling (DLSS/FSR)
- Render Graph
- Shader Graph
- GPU Particles
- GPU-Driven Rendering
- Volumetric Fog
- Volumetric Clouds
- Global Illumination
- Virtual Texturing
- Water Rendering
- Clustered Lighting
- Material System
- Post-Processing
- Shadow System
- Particle System
- Decal System
- Sky and Atmosphere
- Foliage System
- Mesh Shaders
- Neural Rendering
- Configuration Reference
- Performance Tips
- Benchmark Framework
- Threading Model
- Fuzz Policy and Parser Security
- Memory Safety
- Memory Management Patterns
- Build System and CMake Modules
- Profiler and Debugging
- Performance Profiling Guide
- Telemetry System
- Crash Reporting
- Golden Image Testing
- Utilities
- Testing
- Fuzz Policy and Parser Security
- Codebase Statistics
- Codebase Health
- Error Handling Patterns
- Hot Reload Overview
- Troubleshooting
- Contributing
- Workflow Patterns
- Build Optimizations
- CI Reproducible Builds
- CI Controlled-Failure Rehearsal
- Release Publication Stages
- Session Handoff 2026-09-27
- GitHub API and PR Checks
- Git Rebase Conflicts
- Clang-Format
- Code Quality Violations
- AI Bloat Pattern
- MinGW + Wine Cross-Compilation
- Live Editor Testing
- Engine & Renderer Landscape
- DuetOS Portability Catalog
- Five-Engine Analysis
- Eleven-Engine Analysis
- ThorVG / Unity Graphics Analysis
- Advanced Techniques Catalog
- Third-Party Library Evaluation
- Engine Viability Evaluation
- Engine Feature Recommendations
- Project Recommendations
- Mac Compatibility Analysis
- Codebase Observations
- Codebase Bloat Audit
- Test Suite Audit
- Documentation Coverage Audit
- ThirdParty Dependencies Audit
- Load Test Baseline
- Gameplay Systems Status
- SparkGame Module Status
- Stub and Abandoned Features
- Memory Integrity System
- Memory Safety Evaluation
- Hardware Acceleration Systems
- Jolt Physics Integration
- GPU/CPU Separation Plan
- Daemon Services Architecture
- Online Service Boundary
- Server Operations Runbook
- Reflection & Polymorphism Refactoring Plan
- SparkBuild In-Tree
- Wine No-JobSystem Breakthrough
- Wine Role and Fallback Tiers