Detailed Roadmap

Technical roadmap - in-progress, planned, and long-term milestones

CNA is a long-term open-source project. There are no fixed release dates. Progress is incremental. This roadmap describes goals and current priorities, not commitments.

Current state — API surface essentially complete

CNA implements 227 of the 245 public XNA 4.0 types, verified by 4,373 unit tests and 490 GPU pixel-readback tests across four backends. Full 2D and 3D rendering work on Linux via EasyGL, Vulkan and bgfx, and the House 3D demo runs in the browser today. Remaining work is depth rather than breadth: the content pipeline, custom shaders, and platform expansion.

Active work items

  • Compiled .fx shader bytecode — the single biggest barrier to porting existing XNA games, and what blocks 23 of the 86 official XNA samples
  • Open rendering bugs on individual backends (bgfx RenderTargetCube depth, EasyGL two-attachment MRT, Vulkan DepthBias) — see Verification & Known Issues
  • XNB binary content pipeline (CNA uses a custom JSON content descriptor format instead) — the main remaining XNA-compatibility gap
  • Net/GamerServices/Avatar hardening pass: real host migration, simulated network conditions, a real Guide message-box overlay, disk-persisted achievements/leaderboards (see plan_net.md)
  • Native Windows CI validation (MSVC 2022, MinGW-w64) — basic Windows support already works via cross-compiled MinGW-w64, verified under Wine
  • Emscripten: extended test suite, audio validation on web target

Completed milestones

✅ Milestone: Speedy Blupi full port

The Speedy Blupi game has been fully ported to CNA, validating real-world XNA API coverage — SpriteBatch, input, audio, content loading, and game loop fidelity all proven in a shipping game.

✅ Milestone: Android support

CNA runs on Android via SDL3's native Android support. The NDK toolchain is configured and validated on Android hardware with the SDL_RENDERER backend.

✅ Milestone: Emscripten / WebAssembly

EasyGL + WebGL 2 builds and runs. The House 3D Demo and CNA Demo are playable in the browser. Full 2D and 3D rendering work via WebAssembly.

✅ Milestone: Vulkan backend — all five stock effects, SpriteBatch bug fixed

Vulkan is the second-most mature backend: all five stock effects are real and pixel-tested, plus instancing, MRT, MSAA, and a real DepthStencilState. The multi-Begin/End SpriteBatch data-loss bug is fixed (2026-07-07, Task 664).

✅ Milestone: bgfx backend — full 2D+3D pixel-verified parity (Phase 72)

bgfx now matches EasyGL and Vulkan for pixel-verified 2D+3D coverage — all five stock effects, render targets with MSAA, texture 3D/cube, and per-draw state. Remaining gaps: custom ShaderEffect source compilation unsupported, and OcclusionQuery correctness unverifiable under this project's sandbox (software GL 2.1 driver).

✅ Milestone: Touch input and XACT audio

Input::Touch reaches ~98% behavior fidelity (byte-faithful FNA gesture pipeline, wired end-to-end). Audio (XACT: AudioEngine/SoundBank/WaveBank/Cue) reaches ~97% (real .xgs/.xsb/.xwb parsing plus SDL3_mixer playback). Microphone capture is wired to real SDL3 audio streams. Both were previously open gaps on this roadmap.

✅ Milestone: GamerServices, Net, and Avatar

Complete GamerServices API surface (Gamer, SignedInGamer, GamerProfile, FriendCollection, leaderboards, Guide, achievements) with local/synthetic semantics matching FNA's approach. Complete NetworkSession API (5 enums + 18 classes) with real ENet-backed networking for SystemLink, verified across Linux, Windows (Wine), Web (Emscripten), and Android. Avatar ported from a decompiled real XNA 4.0 reference assembly — FNA never implemented this. A hardening pass is ongoing (see "Active work items").

✅ Milestone: Windows — basic platform support

Windows is now a real target via the SDL_RENDERER backend (MSVC 2022, clang-cl, or MinGW-w64), cross-compiled with MinGW-w64 from Linux and verified running under Wine. Native Windows CI validation remains the open item, tracked above.

Remaining work

Milestone: Expanded test coverage

GoogleTest suite expansion: game loop semantics, cross-backend rendering consistency, Audio unit tests. Regression protection for API changes.

Milestone: Vulkan BlendState and OcclusionQuery — Done

Both are now implemented. BlendState has a real per-Blend/BlendFunction mapping covering all 13 XNA blend factors, including BlendFactor and InverseBlendFactor; bgfx received the equivalent fix. OcclusionQuery now does real per-draw-call correlation on Vulkan.

Phase 3 - Stabilization and platform expansion

3D rendering extensions (EasyGL: done; Vulkan: advanced; bgfx: advanced, full parity)

Full 3D rendering — geometry, materials (BasicEffect and all effects), vertex/index buffers, depth, blend, cull — is implemented and working across EasyGL, Vulkan, and bgfx, including in the browser. The remaining gaps before all backends reach full parity are Vulkan's BlendState/OcclusionQuery and bgfx's custom ShaderEffect support.

Public stable release (v1.0)

A versioned, stable release of CNA with:

  • Full XNA 4.0 public API coverage
  • Two or more stable backends
  • Multi-platform validation (Linux, Windows, Android)
  • Comprehensive test suite
  • API stability guarantee

Contributing to the roadmap

The best contributions at this stage are:

  • Implementing missing XNA API classes (any unchecked entry in XNA Compatibility)
  • Improving backend feature parity (bgfx, Vulkan)
  • Writing tests for existing implementation
  • Testing on Windows, Android, or other platform targets
  • Porting games to CNA to expose API gaps

Open issues and TODO markers in the source are the best starting points. See the GitHub repository.