Feature Roadmap

Status of every engine subsystem as of the latest audit (April 2026). Recently added (Tier 1 editor prep, late April): audio pause/resume, component default-init callbacks + construct-by-name (enables "+ Add Component" in the Inspector), SafiEngineOwned tag + SafiActiveCamera singleton enforcement (fixes double-tag bugs across snapshot restore), 128-bit SafiStableId GUID auto-attached to every named entity and used as the scene-save / snapshot-restore key (renames stay correct, prefabs become cheap), project-root-relative asset paths (scenes are now portable across machines), SafiPrimitive.textureSafiTextureHandle with RAII hooks so primitive textures dedup, hot-reload, and never leak, file-watcher → hot-reload that polls mtimes under the project root, hierarchy helpers (safi_entity_set_parent with cycle rejection, _detach_from_parent, _children), change bus observing every serializable component for M6 undo, and entity presets (safi_preset_*) for the M5 Create menu.

Before that (mid April): Play/Pause/Stop toolbar with auto-snapshot on Play and restore on Stop, translate/rotate/scale gizmo driven by the toolbar's tool picker, editor fly-cam that arbitrates the active-camera tag on Edit ↔ Play, editor-mode singleton (SafiEditorState) with a dedicated SafiGamePhase gate so gameplay pauses in Edit mode, in-memory scene snapshot/restore for non-destructive Play→Stop, JSON scene serialization (save/load/clear with a component registry), asset handles (refcounted, path-cached), procedural primitives (plane/box/sphere/capsule), and miniaudio audio with 2D/3D playback.

BadgeMeaning
ImplementedFully working in the engine
PartialStruct or logic exists but incomplete
WIPPlanned, not yet started

ECS & Core

FeatureStatusAPI Page
EntitiesImplementedECS Overview
ComponentsImplementedStock Components
QueriesImplementedSystems
Resources / SingletonsImplementedResources
Add/remove at runtimeImplementedECS Overview
Parent/child hierarchyImplementedECS Overview
Startup stageWIPScheduler
Fixed update stageImplementedScheduler
Engine-owned render stageImplementedScheduler
System ordering APIPartialScheduler
Component registryImplementedRegistry
Component default-initImplementedRegistry
Change bus (dirty tracker)ImplementedRegistry
Stable entity ID (GUID)ImplementedComponents
Engine-owned entity tagImplementedComponents
Singleton-tag enforcementImplementedComponents
Scene serialization (JSON)ImplementedScene
Scene snapshot / restoreImplementedScene
Entity presetsImplementedScene
Editor-mode singletonImplementedEditor State
Game phase / pipeline gateImplementedScheduler

Transform & Spatial

FeatureStatusAPI Page
Local transform (SafiTransform)ImplementedTransform
Global / world transformImplementedTransform
Hierarchy propagationImplementedTransform
Change tracking / dirty flagsWIPTransform

Camera & Visibility

FeatureStatusAPI Page
Camera componentImplementedCamera
Perspective projectionPartialCamera
Orthographic projectionWIPCamera
Active camera systemWIPCamera
Visibility flagsWIPVisibility
Frustum cullingWIPVisibility
Render layers / masksWIPVisibility

Rendering

FeatureStatusAPI Page
SDL_gpu rendererImplementedRenderer
Mesh upload & destructionImplementedMesh
Depth testingImplementedMaterial
Draw pass executionImplementedRender Overview
Unlit materialImplementedMaterial
Shader loading (HLSL -> SPIR-V + MSL)ImplementedShader
glTF loader (single primitive)ImplementedglTF Loader
Multi-material glTF (SafiModel)ImplementedglTF Loader
Procedural primitives (box/sphere/…)ImplementedPrimitives
Inspector-editable color + textureImplementedPrimitives
Material parametersPartialMaterial
Shader/material abstractionPartialMaterial
Culling (back-face)PartialMaterial
Opaque passPartialRender Overview
Blinn-Phong lit materialImplementedLighting
PBR materialWIPMaterial
Alpha modes / blendingWIPMaterial
Double-sided flagWIPMaterial
Render extractionWIPRender Overview
Draw queue / sortingWIPRender Overview
Transparent passWIPRender Overview
Pipeline cacheWIPRender Overview

Lighting

FeatureStatusAPI Page
Directional lightImplementedLighting
Point lightImplementedLighting
Spot lightImplementedLighting
Rect light (area)ImplementedLighting
Sky light (ambient)ImplementedLighting
Light uniform buffersImplementedLighting
Lit shading pathImplementedLighting
Shadow mappingWIPLighting
Light bakingWIPLighting
PBR (Cook-Torrance)WIPLighting

Assets

FeatureStatusAPI Page
Mesh abstraction (SafiMesh)ImplementedMesh
Texture (raw in material)PartialMaterial
Material abstractionPartialMaterial
Shader loadingPartialShader
glTF / scene loadingImplementedglTF Loader
Asset handles / IDsImplementedAssets
Caching / deduplicationImplementedAssets
Project-root path resolutionImplementedAssets
Shader-root path resolutionImplementedAssets
Hot-reload (file-watcher)ImplementedAssets
Hot-reload → primitive syncImplementedAssets
Directory enumerationImplementedAssets
Async / staged loadingWIPAssets

Input

FeatureStatusAPI Page
Keyboard (held / pressed / released)ImplementedInput
Mouse position & buttonsImplementedInput
Mouse deltaImplementedInput
Input abstraction (ECS singleton)ImplementedInput
Scroll / mouse wheelImplementedInput
Keyboard modifiers (Ctrl/Shift/etc.)ImplementedInput

Time

FeatureStatusAPI Page
Delta timeImplementedTime
Elapsed timeImplementedTime
Frame counterImplementedTime
Fixed timestepImplementedTime

Debug UI

FeatureStatusAPI Page
MicroUI backend (SDL_gpu batched-quad)ImplementedDebug UI
Scene hierarchy panelImplementedDebug UI
Inspector panelImplementedDebug UI
Entity selectionImplementedDebug UI
Component inspection (Transform, Camera, MeshRenderer, Spin, Lights)ImplementedDebug UI
Custom widget supportImplementedDebug UI

Editor

The SafiEngine editor is a debug-UI–based scene authoring tool that runs in the same process as the game. See the Editor plan for the full milestone breakdown.

FeatureStatusNotes
Scene hierarchy panelImplementedTree view with parent/child, click-to-select
Inspector with editable componentsImplementedNumber, vec3, checkbox, dropdown widgets
Entity selectionImplementedClick in scene panel or programmatically
Editor-mode singleton (SafiEditorState)ImplementedEdit / Play / Paused, selected entity
Pipeline gate (fixed + game)ImplementedFixed-update + SafiGamePhase skipped when not Play
Play / Pause / Stop toolbarImplementedMicroUI strip with mode + tool buttons; auto-snapshot on Play, auto-restore on Stop
Snapshot / restore (Play→Stop)Implementedsafi_scene_snapshot_all + non-destructive restore
Scene serialization (save/load)ImplementedJSON format via cJSON + component registry
Scene viewport camera (editor-only)ImplementedSafiEditorCamera fly-cam; RMB-drag to look, WASD/QE to move
Viewport gizmos (translate / rotate / scale)ImplementedThree-axis handles, screen-space hit-test, drag-to-transform
Asset browser panelWIPBrowse meshes, materials, textures from disk
Drag-and-drop asset assignmentWIPDrop a mesh onto a MeshRenderer field
Entity creation menuWIP"Create > Empty / Mesh / Light / Camera"
Component add / remove UIWIP"+" button in Inspector, searchable component list
Undo / redoWIPSnapshot ring buffer triggered by Inspector/gizmo edits
Multi-selectWIPBatch-edit shared fields
Prefabs / entity templatesWIPReusable entity blueprints
Debug physics wireframeWIPJolt's debug renderer overlay
Build / package menuWIPExport a standalone game binary + assets

Audio

FeatureStatusAPI Page
miniaudio integrationImplementedAudio
2D playback (sfx + music)ImplementedAudio
3D positional audioImplementedAudio
Mixer buses (master/music/sfx/ui)ImplementedAudio
Streaming (long files)ImplementedAudio
WAV / FLAC / MP3 decodingImplementedAudio
Listener pose APIImplementedAudio
Voice pause / resumeImplementedAudio
Per-bus lowpass / reverbWIPAudio
DopplerWIPAudio

Physics & Collision

FeatureStatusAPI Page
Jolt integrationImplementedPhysics
Box colliderImplementedPhysics
Sphere colliderImplementedPhysics
Static bodiesImplementedPhysics
Dynamic bodiesImplementedPhysics
Kinematic bodiesImplementedPhysics
Capsule colliderWIPPhysics
RaycastsImplementedPhysics
Overlap checksImplementedPhysics
Contact callbacksWIPPhysics
Constraints / jointsWIPPhysics

Next milestone

Editor MVP — grow the debug UI into a real scene authoring tool so games can be built without writing C bootstrap code. See the Editor plan for milestone details.

  1. Play / Pause / Stop toolbar ✅ (Editor Toolbar)
  2. Scene serialization / load from file ✅ (Scene)
  3. Editor fly-camera ✅ (Editor Camera)
  4. Viewport gizmos (translate / rotate / scale) ✅ (Editor Gizmo)
  5. Tier 1 editor-prep engine work ✅ (stable entity IDs, project-root asset paths, texture handles on primitives, hot-reload, hierarchy helpers, change bus, entity presets, component default-init, audio pause/resume)
  6. Asset browser panel UI (handle system + hot-reload shipped — see Assets)
  7. Entity creation menu + component add/remove UI (presets + default-init shipped — see Scene, Registry)
  8. Undo/redo over Inspector + gizmo edits (change bus shipped — see Registry)
  9. Debug physics wireframe rendering
  10. PBR material pipeline (enables richer material previews in the editor)