Skip to content
The CNA BibleCNA 0.1.0-alpha.1 Edition

Appendix D Repository and Module Map

This appendix records the exact repository and physical-module boundary used for this edition. It is intentionally narrower than an organization-wide project directory: every listed sibling has a pinned revision and a defined role in dependency, verification, examples, or consumption. All sibling trees were read-only during the book audit.

The revisions below are immutable edition pins, not a promise that every sibling’s branch head will remain there. For example, the local cna-template next branch advanced to 4d0a2c8a after this audit; this edition continues to cite and reason from 1d86681, which remains available in that repository.

D.1 Pinned repository set

Repository Pin Role in this edition
cna 1bb2145d Primary C++23 XNA-style framework at v0.1.0-alpha.1; source, build, renderer, platform and verification subject of the book.
sharp-runtime f827a6c5 .NET-shaped C++ foundation consumed by CNA; object/type, collections, IO, threading/task and compatibility evidence.
easy-gl 0b46d35 Shared implementation beneath five public EasyGL renderer identities; owns portable GL objects and draw machinery.
meta-gl 571d3a6 Lower-level typed OpenGL wrapper consumed by easy-gl; not a separate CNA renderer identity.
free-direct 934f72f SDL3-based DirectDraw/DirectSound/DirectPlay compatibility layer used by CNA’s FREEDIRECT renderer and the Blupi case study.
free-api 53d7a31 Minimal Win32-style support layer consumed by free-direct; a second-level dependency, not a direct CNA module.
xna4-spec 8f61207 Converted XNA documentation corpus: 544 indexed XML type files across 19 documented namespaces; useful inventory, not a live CNA gate.
cna-samples 149a19f Official-sample translation catalog: 63 completed ports, 23 tracked placeholders, and 67 explicitly ignored source-archive entries at the pin.
cna-examples fa0b49a One CNA-native catalog application with 13 areas, 79 categories, and 249 mechanically checked demo screens.
cna-template 1d86681 Minimal consumer skeleton; evidence for how a new application composes the framework rather than for framework correctness.
cna-craft 7d7f186 Larger game consumer with desktop/Web pressure; useful integration evidence, not part of CNA’s own test suite.
cna-extended 2ff3cff Extension-library consumer modeled after MonoGame.Extended; outside the core API but relevant to package/composition boundaries.

The CNA tag also records sharp-runtime 625476d5b5fff5fa89f392c3c9af8638ff237692 as the revision used for release verification. That is release evidence, not a dependency lock: CNA’s CMake consumes a caller- supplied SHARP_RUNTIME_ROOT and does not enforce the recorded SHA. The older f827a6c5 pin in the table is retained as this book’s bounded sharp-runtime technical audit source; alpha.1 claims that depend on sharp-runtime were checked against the release record separately.

The dependency arrows are not all equivalent:

cna ---> sharp-runtime
 |----> easy-gl ---> meta-gl          (selected GL family)
 ‘----> free-direct ---> free-api     (selected FREEDIRECT family)

xna4-spec, cna-samples, cna-examples          evidence/catalog peers
cna-template, cna-craft, cna-extended         downstream consumers

Renderer-specific third parties fetched or discovered by CNA are not promoted to sibling repositories in this diagram. They remain dependencies of their owning renderer module, with their platform and acquisition gates recorded in Part IV.

D.2 Physical CNA framework modules

The root modules/CMakeLists.txt composes fifteen framework/extension modules when Net is enabled, plus the renderer tree; the experimental C adapter is a separate optional module. Directory location is source ownership: production code belongs under the owner’s src/, public and public-internal contracts under its include/, and its tests/examples alongside them. A configure-time validator rejects translation units outside a declared module tree.

Physical module Primary ownership
core CNA helper/marker surface and root framework primitives
math vectors, matrices, geometry, curves and packed math values
platform host/window/event abstraction and the selected SDL3, SDL2, headless or POSIX-terminal implementation
graphics device facade, resources, effects, model runtime and shared renderer contract
input keyboard, mouse, gamepad, touch and SDL input extensions
audio SoundEffect/XACT-facing audio objects and SDL3_mixer integration
media Song/MediaPlayer/Video and FFmpeg-conditioned paths
content ContentManager, XNB, CNJ, loose readers and glTF import core
storage StorageDevice/StorageContainer and local-filesystem behavior
runtime Game, GameWindow, components, services and timing/lifecycle composition
devices Microsoft/XNA-shaped device and sensor surface
devices-ext CNA-native camera/dialog/system/clipboard-style host services
graphics-ext CNA graphics extensions, including the former extension-layer library
gamer-services local gamer identity, guide, achievements and leaderboards; conditional on networking enablement
net sessions, gamers, packets and ENet-backed delivery/discovery; conditional
c-api optional C17 shared-library adapter over the C++ aggregate; separate experimental ABI, enabled by CNA_BUILD_C_API

The interface target CNA composes the framework modules, extension umbrellas, shared build flags, sharp-runtime closure, and the selected renderer target set. In a singular build the set has one family; CNA_GRAPHICS_RENDERERS can compose several compatible families and a configured default. Individual module aliases support narrower link-closure probes. CNA::CnaExt composes graphics-ext and devices-ext; it is distinct from the empty CNAEXT declaration marker and from the CNA_CNAEXT build option that enables selected extension products.

D.3 Renderer module tree

modules/renderers/ contains one common-contract area plus 46 implementation families. Only EasyGL maps multiple public identities to one family.

Cluster Physical family directories
OpenGL easygl, opengles1, opengl1, opengl2, opengl4, portablegl, tinygl
Native modern vulkan, webgpu, sdl-gpu, metal
Abstraction layers bgfx, magnum, llgl, diligent, sokol, wicked, fna3d, igl
DirectX / retro directx1, directx2, directx3, directx5, directx6, directx7, directx8, directx9, directx10, directx11, directx12, glide, freedirect
2D / vector / Windows sdl-renderer, skia, blend2d, openvg, nanovg, direct2d, gdi
Web DOM canvas, html-dom, svg-dom, pixijs
Diagnostic / CPU headless, software, stub

The physical tree alone does not establish a public selector, platform admissibility, resource factory, or semantic parity. Appendix B joins directory families to all 50 public identities and their narrow implementation behavior.

D.4 How to extend this map without making it stale

For a later edition, pin every repository before counting it; derive module and renderer sets from CMake/source rather than an organization README; distinguish direct dependency, transitive dependency, evidence peer and downstream consumer; and record the command/query behind every count. A local worktree of cna is not a sibling project, and an organization repository with no dependency or evidence edge is outside this bounded map.

Type at least three characters. Results are ranked by how often and where the words occur.