Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
561 lines (501 loc) · 50.2 KB
/
Copy pathindex.html
File metadata and controls
561 lines (501 loc) · 50.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CNA - C++ Reimplementation of the XNA 4.0 API</title>
<meta name="description" content="Documentation for CNA snapshot c1c316b9, a post-alpha.1 development snapshot: a C++23 XNA 4.0 reimplementation with 14 renderer identities, a C ABI and the C# binding CNA.NET, browser and Android routes, and a build-time content pipeline.">
<meta property="og:type" content="website">
<meta property="og:site_name" content="CNA">
<meta property="og:url" content="https://libcna.com/">
<link rel="canonical" href="https://libcna.com/">
<meta property="og:title" content="CNA - C++ Reimplementation of the XNA 4.0 API">
<meta property="og:description" content="Documentation for CNA snapshot c1c316b9, a post-alpha.1 development snapshot: a C++23 XNA 4.0 reimplementation with 14 renderer identities, a C ABI and the C# binding CNA.NET, browser and Android routes, and a build-time content pipeline.">
<link rel="stylesheet" href="css/style.css">
<link rel="icon" href="favicon.svg" type="image/svg+xml">
<!-- Analytics: Replace the block below with your preferred privacy-respecting analytics provider -->
<!-- Example: Plausible (https://plausible.io), Fathom, or GoatCounter -->
<!-- <script defer data-domain="libcna.com" src="https://plausible.io/js/plausible.js"></script> -->
<link rel="stylesheet" href="css/prism-tomorrow.min.css">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"name": "CNA – C++23 XNA 4.0 Reimplementation",
"url": "https://libcna.com/",
"potentialAction": {
"@type": "SearchAction",
"target": "https://libcna.com/search.html?q={search_term_string}",
"query-input": "required name=search_term_string"
}
},
{
"@type": "SoftwareApplication",
"name": "CNA",
"description": "CNA is a C++23 reimplementation of Microsoft XNA 4.0 with independent platform, audio and graphics selection axes, 14 public renderer identities, a C ABI and a C# binding (CNA.NET); this site documents development snapshot c1c316b9 of the pre-1.0 (0.1.0-alpha.1) code base.",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Linux, Windows, macOS, iOS, Android, WebAssembly",
"license": "https://opensource.org/licenses/MS-PL",
"url": "https://github.com/libcna/cna",
"programmingLanguage": "C++"
}
]
}
</script>
<script>(function(){try{var t=localStorage.getItem("cna-theme");if(t==="light"||t==="dark")document.documentElement.setAttribute("data-theme",t);}catch(e){}})();</script>
</head>
<body>
<a class="skip-link" href="#main-content">Skip to content</a>
<nav class="nav">
<div class="nav-container">
<a href="index.html" class="nav-brand">CNA</a>
<button class="nav-toggle" aria-label="Toggle navigation" aria-expanded="false">
<span></span><span></span><span></span>
</button>
<div class="nav-menu">
<a href="index.html" class="nav-link">Home</a>
<a href="about.html" class="nav-link">About</a>
<a href="features.html" class="nav-link">Features</a>
<a href="architecture.html" class="nav-link">Architecture</a>
<a href="documentation.html" class="nav-link">Documentation</a>
<a href="development/index.html" class="nav-link">Development</a>
<a href="deep-dives/index.html" class="nav-link">Deep Dives</a>
<a href="tutorials.html" class="nav-link">Tutorials</a>
<a href="demos.html" class="nav-link">Demos</a>
<a href="showcase.html" class="nav-link">Showcase</a>
<a href="videos.html" class="nav-link">Videos</a>
<a href="roadmap.html" class="nav-link">Roadmap</a>
<a href="contact.html" class="nav-link">Contact</a>
<a href="network.html" class="nav-link">Network</a>
<a href="search.html" class="nav-link">Search</a>
<a href="https://github.com/libcna/cna" class="nav-link nav-link--github" target="_blank" rel="noopener">GitHub</a>
<a href="https://blog.libcna.com/" class="nav-link nav-link--blog" target="_blank" rel="noopener">Blog</a>
<a href="https://www.youtube.com/@libcna" class="nav-link nav-link--youtube" target="_blank" rel="noopener">YouTube</a>
<a href="https://discord.gg/vrnc4n6DaE" class="nav-link nav-link--discord" target="_blank" rel="noopener">Discord</a>
</div>
<button class="theme-toggle" type="button" aria-label="Switch to light theme" title="Switch to light theme">
<svg class="theme-icon-light" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12 17a5 5 0 1 1 0-10 5 5 0 0 1 0 10zm0-2a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.5 4.9l1.4-1.4 2.1 2.1-1.4 1.4L3.5 4.9zm13.5 13.5l1.4-1.4 2.1 2.1-1.4 1.4-2.1-2.1zM19.1 3.5l1.4 1.4-2.1 2.1-1.4-1.4 2.1-2.1zM5.6 17l1.4 1.4-2.1 2.1-1.4-1.4L5.6 17zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></svg>
<svg class="theme-icon-dark" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12.3 22a10 10 0 0 1-1.6-19.9c.6-.1 1 .5.8 1a7.9 7.9 0 0 0 9.7 10.6c.5-.2 1 .3.9.8A10 10 0 0 1 12.3 22z"/></svg>
</button>
</div>
</nav>
<main id="main-content">
<!-- Hero -->
<section class="hero" style="padding-top: clamp(2.5rem, 5vw, 4.5rem);">
<div class="hero-badge">Snapshot c1c316b9 · post-alpha.1 development · 9 October 2026</div>
<h1>CNA</h1>
<a href="https://github.com/libcna/cna" class="github-ribbon" target="_blank" rel="noopener" style="display:inline-flex;align-items:center;gap:0.4rem;background:#24292e;color:#fff;padding:6px 14px;border-radius:20px;font-size:0.85rem;text-decoration:none;margin-bottom:1rem;">
<svg height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
View on GitHub
</a>
<p class="hero-subtitle">A modern C++23 reimplementation of Microsoft XNA 4.0 with independent platform, audio and graphics layers.</p>
<div class="hero-language-support" aria-label="CNA Blog">
<span class="hero-language-support-icon" aria-hidden="true">📝</span>
<p><strong>CNA now has a Blog.</strong> Its articles describe different areas of CNA. <strong>Link:</strong> <a href="https://blog.libcna.com/" target="_blank" rel="noopener">blog.libcna.com</a>.</p>
</div>
<div class="hero-language-support" aria-label="Sample porting status">
<span class="hero-language-support-icon" aria-hidden="true">🔧</span>
<p><strong>XNA samples, in C++ and in the browser.</strong> The C++ port of Microsoft’s XNA 4.0 samples is practically complete: <strong>91</strong> sample and game projects run as native C++ CNA programs, and <strong>90</strong> C++ builds are <strong>playable in your browser</strong> at <a href="https://samples.libcna.com/" target="_blank" rel="noopener">samples.libcna.com</a>. The Racing Game Kit is ported too, but not hosted. The original C# samples also run unchanged on <a href="docs/cna-net.html">CNA.NET</a>. <a href="showcase.html#xna-samples">How these numbers are counted</a>.</p>
</div>
<div class="hero-language-support" aria-label="Language bindings">
<span class="hero-language-support-icon" aria-hidden="true">🌐</span>
<div>
<p><strong>CNA actively maintains C and C# bindings.</strong> CNA itself is written in C++23, its native implementation language. The experimental <a href="docs/c-api.html"><strong>C</strong></a> ABI (0.46.0, opt-in build) exposes that implementation to other languages, and <a href="docs/cna-net.html"><strong>C# through CNA.NET</strong></a> is built on it: a <code>Microsoft.Xna.Framework</code>-compatible facade over the same native runtime, so existing XNA 4.0 C# game source often runs without being rewritten. CNA.NET is beta and pairs with exactly this ABI version.</p>
<p class="hero-language-support-note"><a href="docs/c-api.html#archived-bindings">Archived language bindings</a>: CNA also has eight further bindings — Common Lisp, Go, Java, Python, Ruby, Rust, Swift and TypeScript — several of them well advanced. They are archived in CNA Lab because keeping them current with a fast-moving pre-1.0 ABI took too much time, and may be revived if there is community interest.</p>
</div>
</div>
<div class="hero-cta">
<a href="documentation.html" class="btn btn-primary">📄 View Documentation</a>
<a href="docs/releases.html" class="btn btn-outline">Release notes</a>
<a href="https://github.com/libcna/cna" class="btn btn-secondary" target="_blank" rel="noopener">🔗 View GitHub Repository</a>
<a href="demos.html" class="btn btn-outline">► Try Web Builds</a>
</div>
<p class="hero-meta">Ms-PL · C++23 · pre-1.0 API · commit <code>c1c316b9</code> (after tag <code>v0.1.0-alpha.1</code>)</p>
</section>
<!-- Quick stats -->
<section class="section section--alt" style="padding:1rem 0;">
<div class="container">
<div style="display:flex;flex-wrap:wrap;gap:2rem;justify-content:center;text-align:center;">
<div title="CNA_VERSION_STRING is still 0.1.0-alpha.1 at snapshot c1c316b9; no newer tag exists. This site documents the development branch after the v0.1.0-alpha.1 tag."><div style="font-size:2rem;font-weight:700;color:var(--primary);">0.1.0</div><div style="font-size:0.85rem;color:var(--text-muted);">alpha.1 version string</div></div>
<div title="3,687 commits (1,299 first-parent, 65 merges) between tag v0.1.0-alpha.1 (1bb2145d, 20 Aug 2026) and snapshot c1c316b9 (9 Oct 2026)"><div style="font-size:2rem;font-weight:700;color:var(--primary);">3,687</div><div style="font-size:0.85rem;color:var(--text-muted);">Commits since the alpha.1 tag</div></div>
<div title="14 public identities over 12 implementation families; the OpenGL ES 3, OpenGL 3.3 and WebGL 2 identities share one EasyGL family. Unknown or unsupported names stop the CMake configure step."><div style="font-size:2rem;font-weight:700;color:var(--primary);">14</div><div style="font-size:0.85rem;color:var(--text-muted);">Renderer identities</div></div>
<div title="12 renderer implementation families under modules/renderers; EasyGL implements three identities, every other family one."><div style="font-size:2rem;font-weight:700;color:var(--primary);">12</div><div style="font-size:0.85rem;color:var(--text-muted);">Implementation families</div></div>
<div title="CNA_PLATFORM: SDL3 (default), Headless and POSIX Terminal. SDL3 is the one windowing implementation: Windows, X11, Wayland, macOS, iOS, Android and the browser are reached through SDL's own video drivers. Terminal is offered on POSIX hosts."><div style="font-size:2rem;font-weight:700;color:var(--primary);">3</div><div style="font-size:0.85rem;color:var(--text-muted);">Platform implementations</div></div>
<div title="CNA_AUDIO_PLATFORM: SDL3, ALSA and Null. SDL3 and ALSA enable the XNA playback mixer (SOUND_ENABLED); Null is a deterministic device-level surface only."><div style="font-size:2rem;font-weight:700;color:var(--primary);">3</div><div style="font-size:0.85rem;color:var(--text-muted);">Audio platform choices</div></div>
<div title="Across 813 CNA-owned C++ test sources (781 contain macros); vendored third_party sources excluded. 781 standalone renderer pixel programs are not counted. Definitions are not executed cases and no CTest total is published."><div style="font-size:2rem;font-weight:700;color:var(--primary);">11,380</div><div style="font-size:0.85rem;color:var(--text-muted);">Static test definitions</div></div>
<div title="Mac mini M4 (Apple M4, 16 GB, macOS 27.0.1, Xcode 27): the METAL, OPENGL33, WEBGPU, SDL_GPU, FNA3D, SOFTWARE and SDL_RENDERER trees each passed their full CTest suite (10,875 to 11,916 tests, none failed; named skips only). Recorded by CNA's Apple campaign with the console locked, so on-screen presentation was not observed; not CI."><div style="font-size:2rem;font-weight:700;color:var(--primary);">7</div><div style="font-size:0.85rem;color:var(--text-muted);">Renderer test trees passing on a physical Mac mini M4</div></div>
<div title="Representation only: every documented XNA 4.0 runtime member (331/331 types) has a declaration in CNA's public headers, measured by tools/audit_xna_runtime_surface.py. It does not claim behavioral parity."><div style="font-size:2rem;font-weight:700;color:var(--primary);">3,627 / 3,627</div><div style="font-size:0.85rem;color:var(--text-muted);">XNA runtime members represented</div></div>
<div title="External repository, pinned: cna-samples @ 5db32e6 (2026-10-03). 91 of the 153 entries of the SAMPLE-001 to SAMPLE-153 audit list are complete C++ ports; 8 relevant XNA 4.0 C# programs remain and 54 entries are not port targets (XNA 3.x or older, Silverlight, WinForms tools, VB.NET, C++, asset packs). The Racing Game Kit is a separate, additional port. Not a result for CNA snapshot c1c316b9."><div style="font-size:2rem;font-weight:700;color:var(--primary);">91</div><div style="font-size:0.85rem;color:var(--text-muted);">C++ sample ports complete</div></div>
<div title="samples.libcna.com @ b3939de (2026-10-03): 90 playable C++ WebAssembly builds of the ported samples (one, PerformanceUtility, marked partial); each was run in Chrome when its port was completed."><div style="font-size:2rem;font-weight:700;color:var(--primary);">90</div><div style="font-size:0.85rem;color:var(--text-muted);">Samples playable in the browser</div></div>
<div title="cna-dotnet-samples @ 1e6d763 (2026-10-04): 83 Microsoft XNA 4.0 sample projects (84 programs) built from byte-identical upstream C# source run on CNA.NET on Linux, in headless Chromium and on the x86_64 Android emulator; CNA's Apple campaign also smoke-ran all 84 on a physical Mac mini M4 (osx-arm64) with the SOFTWARE and METAL renderers. Recorded in campaign ledgers, not CI."><div style="font-size:2rem;font-weight:700;color:var(--primary);">84</div><div style="font-size:0.85rem;color:var(--text-muted);">Original C# sample programs on CNA.NET</div></div>
<div title="Workflow files (24 jobs), not passing lanes. The Windows lanes are manual; no workflow runs the XNA oracle corpus, an Android build or a C API library build."><div style="font-size:2rem;font-weight:700;color:var(--primary);">18</div><div style="font-size:0.85rem;color:var(--text-muted);">CI workflow files</div></div>
</div>
</div>
</section>
<!-- Status notice -->
<section class="section section--alt">
<div class="container">
<div class="callout callout--warn">
<span class="callout-icon">⚠</span>
<p><strong>Development snapshot, not a release.</strong> This site documents CNA commit <code>c1c316b9</code> (9 October 2026, branch <code>apple/m4-stabilization</code>), 3,687 commits after the <code>v0.1.0-alpha.1</code> tag. CNA’s own version string is still <code>0.1.0-alpha.1</code> and public APIs may change before 1.0. Since the tag CNA gained a curated 14-renderer set, SDL3 as its one windowing platform (Windows, X11 and Wayland through SDL’s video drivers), ALSA audio, a build-time Content Pipeline that writes XNB and the new CNB format, an XNA Design module, Diagnostics and an Inspector, service-backed Gamer Services with an optional server, and an experimental C ABI now at 0.46.0 that the C# binding CNA.NET is built on (the ABI’s release gate still reports “Not ready”). This snapshot has also been tested on a physical Mac mini M4 and in the iOS Simulator (see <a href="docs/platforms.html#macos">macOS</a> and <a href="docs/platforms.html#ios">iOS</a>). GitHub’s default branch still points at the alpha.1 commit, so clone <code>apple/m4-stabilization</code> to follow this documentation. See <a href="docs/releases.html">Releases & versioning</a> for the exact boundary.</p>
</div>
<div class="callout callout--info">
<span class="callout-icon">📝</span>
<p><strong>Read capabilities narrowly.</strong> The 14 public renderer identities share 12 implementation families and are not equally complete: one, <code>SDL_RENDERER</code>, is deliberately 2D-only. A normal build contains one renderer; <code>CNA_GRAPHICS_RENDERERS</code> can opt into several compatible families and <code>GraphicsRendererSelection</code> chooses one before the first device. Platform host integration (<code>CNA_PLATFORM</code>), audio I/O (<code>CNA_AUDIO_PLATFORM</code>), graphics rendering and the target operating system are separate axes. Compiled XNA effects are not universal: FNA3D supports them by default and eight more renderer families need an explicit build option, so a default build reports the capability on one identity only. The default <code>Reach</code> graphics profile is enforced on every renderer, so MRT, occlusion queries and float targets require <code>HiDef</code>.</p>
</div>
</div>
</section>
<!-- Feature overview -->
<section class="section">
<div class="container">
<span class="section-label">What is CNA?</span>
<h2 class="section-title">XNA 4.0 for the modern C++ era</h2>
<p class="section-desc">CNA brings the XNA programming model to native C++ without a managed runtime, while keeping host integration, audio and graphics independently selectable.</p>
<div class="cards">
<div class="card">
<span class="card-icon">⚙</span>
<h3>XNA-Compatible API</h3>
<p>Public API follows XNA namespaces and patterns - <code>Microsoft::Xna::Framework</code> - so XNA knowledge transfers directly to CNA. All 3,627 documented XNA 4.0 runtime members across 331 types are represented in the public headers (representation, not a claim of identical behavior), and the previously missing <code>Framework.Design</code> converters now exist as an opt-in module. See <a href="docs/xna-compatibility.html">XNA Compatibility</a>.</p>
</div>
<div class="card">
<span class="card-icon">🔗</span>
<h3>Independent platform layer</h3>
<p><code>CNA_PLATFORM</code> selects one of three host integrations: <strong>SDL3</strong> (default), the one windowing implementation, which reaches Windows, X11, Wayland, macOS, iOS, Android and the browser through SDL’s own video drivers, or the windowless Headless and POSIX Terminal hosts. <code>CNA_AUDIO_PLATFORM</code> independently accepts SDL3, <strong>ALSA</strong> (CNA’s own mixer) or Null; SDL3 and ALSA enable <code>SOUND_ENABLED</code> and the XNA playback engine. <code>CNA_ENABLE_SDL=OFF</code> builds a windowless binary without SDL entirely. See <a href="docs/platforms.html">Platforms</a>.</p>
</div>
<div class="card">
<span class="card-icon">🌐</span>
<h3>Pluggable Renderers</h3>
<p><strong>14 public renderer identities</strong> are implemented by 12 families. Single-renderer builds remain the compact default; compatible sets can be linked with <code>CNA_GRAPHICS_RENDERERS</code> and selected before device creation. The set spans OpenGL ES 3, desktop OpenGL 3.3, WebGL 2, Vulkan, SDL_GPU, WebGPU, Metal, FNA3D, Direct3D 9 and 11, SDL_Renderer, and the GPU-free Software, Headless and Stub implementations. See <a href="docs/rendering-backends.html">Renderers</a>.</p>
</div>
<div class="card">
<span class="card-icon">🏅</span>
<h3>Native C++23</h3>
<p>Full control over memory, lifetimes, and rendering. No garbage collector, no managed runtime - pure native performance.</p>
</div>
<div class="card">
<span class="card-icon">🖥</span>
<h3>Cross-Platform</h3>
<p>Linux is the primary development host (SDL3 on X11 or Wayland); Windows runs through SDL3’s Windows driver with the Direct3D 9 and 11 renderers, whose native CI lanes are manual; the browser is a real CNA platform through Emscripten, with <code>WEBGL2</code> and experimental <code>WEBGPU</code> — see the 90 <a href="https://samples.libcna.com/" target="_blank" rel="noopener">playable sample builds</a>. macOS was tested on a <strong>physical Mac mini M4</strong>: seven renderer trees, native <code>METAL</code> among them, passed their full test suites with no failure (presentation was not observed on screen; no Intel Mac was run). iOS is experimental: <code>SDL_RENDERER</code> and <code>METAL</code> run in the <strong>iOS Simulator</strong> with an exact pixel probe and the device build final-links, but no physical iPhone or iPad has run CNA. Android has NDK/source integration without an automatic gate; real games and samples have been run on the Android emulator.</p>
</div>
<div class="card">
<span class="card-icon">📦</span>
<h3>Real <code>.xnb</code> Content Pipeline</h3>
<p>A real XNB loader is wired into <code>ContentManager</code> with 61 built-in readers, LZX decompression and shared-resource resolution, and the load ladder now tries <code>.xnb</code>, then CNA’s <code>.cnb</code>, then loose files. New since alpha.1: the build-time <a href="docs/content-pipeline.html">Content Pipeline</a> (<code>cna-content</code>, importers, processors and a <code>.contentproj</code> workflow) <strong>writes XNB and CNB</strong>, so CNA no longer depends on XNA or MonoGame tooling to author content. See <a href="docs/cnb-format.html">the CNB format</a>.</p>
</div>
<div class="card">
<span class="card-icon">✨</span>
<h3>PBR & Skeletal Animation</h3>
<p>Beyond the XNA stock effects, CNA ships non-XNA (<code>EXT</code>) extensions: <code>PbrEffect</code> and <code>SkinnedPbrEffect</code> for physically based rendering with shadow and image-based-lighting inputs, <code>SkinningData</code> with <code>AnimationPlayer</code> and animation clips (the Avatar path has its own <code>SkinnedModelEXT</code>), and <code>MorphTargetEXT</code> blend shapes. Runtime glTF 2.0 loading works without a tooling step; the offline converter remains available. The opt-in <code>CNAEXT</code> module adds retro post-processing effects (ASCII, CRT and colour-depth reduction) and debug drawing. See <a href="docs/cnaext-extensions.html">CNAEXT extensions</a>.</p>
</div>
<div class="card">
<span class="card-icon">🔧</span>
<h3>Built on sharp-runtime</h3>
<p>CNA rests on <a href="https://github.com/libcna/sharp-runtime" target="_blank" rel="noopener">sharp-runtime</a>, a C++23 implementation of a practical .NET BCL subset covering <code>System::Collections</code>, <code>IO</code>, <code>Text</code> (including JSON and regular expressions), <code>Net</code>, <code>Threading</code>, <code>Xml</code>, <code>Globalization</code> and <code>Numerics</code>. It is a required sibling checkout with its own independently moving history — this CNA snapshot needs sharp-runtime’s <code>apple/m4-stabilization</code> branch, not its default branch.</p>
</div>
<div class="card">
<span class="card-icon">🎮</span>
<h3>Verified Against Real XNA</h3>
<p>A <strong>39-scene oracle corpus</strong> of reference images captured from the genuine XNA 4.0 runtime (run under Wine with DXVK on Linux) is compared with CNA’s DIRECTX9 output at zero tolerance. The repository records all 39 scenes as pixel-exact on that path (the last consolidated report covers 31, later per-scene notes record the rest, and nothing was re-run for this site); the other renderers are held to a narrower bar, and none of this runs in CI. A running FNA build provides value-level differential checks. Real XNA programs are the other half of the evidence: 91 of Microsoft’s XNA 4.0 samples and games have complete C++ ports (cna-samples revision <code>5db32e6</code>), 90 of them play in the browser, and 84 original C# sample programs run unchanged through CNA.NET. See <a href="showcase.html">the Showcase</a> and <a href="docs/verification.html">Verification</a>.</p>
</div>
<div class="card">
<span class="card-icon">📈</span>
<h3>Diagnostics & Inspector</h3>
<p>New since alpha.1: <code>CNA_DIAGNOSTICS</code> (<code>OFF</code>, <code>STATS</code> or <code>FULL</code>) records frame, resource and renderer statistics, and the opt-in <a href="docs/inspector.html">Inspector</a> exposes a running game to a browser UI through an authenticated local agent. Both are off by default and no CI lane builds them yet. Start with <a href="docs/diagnostics.html">Diagnostics</a>.</p>
</div>
<div class="card">
<span class="card-icon">#</span>
<h3>C# through CNA.NET</h3>
<p>C++ is CNA’s implementation, and its <a href="docs/c-api.html">C ABI</a> opens it to other languages. <a href="docs/cna-net.html">CNA.NET</a> builds on that ABI: <code>CNA.XnaCompat</code> exposes the <code>Microsoft.Xna.Framework</code> API, so existing XNA 4.0 C# source compiles against CNA’s native runtime, usually without changes to the game code. It targets source compatibility, not Microsoft’s binaries, and is beta. Start a new game from the <code>dotnet new</code> template or <a href="docs/migrating-to-cna-net.html">migrate an XNA, FNA or MonoGame game</a>.</p>
</div>
<div class="card">
<span class="card-icon">🎮</span>
<h3>Runs in the browser</h3>
<p>WebAssembly is a first-class CNA target, not a screenshot gallery: <strong>90 C++ ports of Microsoft’s XNA samples</strong> are playable at <a href="https://samples.libcna.com/" target="_blank" rel="noopener">samples.libcna.com</a>, and more games are on the <a href="demos.html">Demos page</a>. Saves persist in the browser’s storage, and games that start threads have a threaded build. CNA.NET has its own browser host for C# games, so far qualified in headless Chromium.</p>
</div>
<div class="card">
<span class="card-icon">🏅</span>
<h3>Gamer Services & Avatars</h3>
<p>XNA’s <code>GamerServices</code>, Guide, avatars and <code>NetworkSession</code> work offline with local profiles, and can optionally connect to the self-hosted <a href="https://github.com/libcna/cna-gamer-services-server" target="_blank" rel="noopener">CNA Gamer Services server</a> for accounts and sign-in, friends and presence, achievements and leaderboards, messages, parties, avatars and relayed online sessions with invitations and host migration. The server is CNA’s own and not Xbox LIVE compatible. See <a href="docs/gamer-services.html">Gamer Services & Avatars</a>.</p>
</div>
</div>
</div>
</section>
<!-- Why CNA? -->
<section class="section section--alt">
<div class="container">
<span class="section-label">Motivation</span>
<h2 class="section-title">Why CNA?</h2>
<p class="section-desc">CNA fills a specific gap: there is no other mature native C++ reimplementation of the XNA 4.0 API.</p>
<div class="cards cards--2">
<div class="card">
<h3>No managed runtime</h3>
<p>C++ avoids GC pauses, managed heap overhead, and JIT warmup. Useful for performance-critical or embedded scenarios where .NET is unavailable.</p>
</div>
<div class="card">
<h3>Familiar API</h3>
<p>The XNA programming model is genuinely good design. CNA preserves it in C++ — if you know XNA or MonoGame, you'll be productive in minutes.</p>
</div>
<div class="card">
<h3>Pluggable renderers</h3>
<p>Swap between OpenGL ES 3, desktop OpenGL 3.3, Vulkan, SDL_Renderer, SDL_GPU, Metal, FNA3D, native Direct3D 9 and 11, browser WebGL 2, experimental WebGPU, or the GPU-free Software and Headless renderers at build time — without changing a line of game code, and with several linked into one binary if you opt in.</p>
</div>
</div>
</div>
</section>
<!-- Code example -->
<section class="section section--alt">
<div class="container">
<span class="section-label">Code Example</span>
<h2 class="section-title">Familiar XNA-style game loop</h2>
<p class="section-desc">If you know XNA or MonoGame, CNA will feel immediately recognisable - just in native C++.</p>
<pre><code>#include "Microsoft/Xna/Framework/Game.hpp"
#include "Microsoft/Xna/Framework/GraphicsDeviceManager.hpp"
#include "Microsoft/Xna/Framework/Graphics/SpriteBatch.hpp"
#include "Microsoft/Xna/Framework/Graphics/Texture2D.hpp"
using namespace Microsoft::Xna::Framework;
using namespace Microsoft::Xna::Framework::Graphics;
class MyGame final : public Game {
public:
MyGame() : graphics_(this) {}
protected:
void LoadContent() override {
spriteBatch_ = std::make_unique<SpriteBatch>(getGraphicsDeviceProperty());
logo_ = std::make_unique<Texture2D>("assets/logo.png", getGraphicsDeviceProperty());
}
void Draw(const GameTime& gameTime) override {
getGraphicsDeviceProperty().Clear(Color::CornflowerBlue);
spriteBatch_->Begin();
spriteBatch_->Draw(*logo_, 100.0f, 80.0f);
spriteBatch_->End();
Game::Draw(gameTime); // draws components; Game presents the frame after Draw returns
}
private:
GraphicsDeviceManager graphics_;
std::unique_ptr<SpriteBatch> spriteBatch_;
std::unique_ptr<Texture2D> logo_;
};
int main() { MyGame game; game.Run(); }</code></pre>
<a href="docs/getting-started.html" class="btn btn-primary btn-sm">Get Started →</a>
</div>
</section>
<!-- Quickstart -->
<section class="section">
<div class="container">
<span class="section-label">Quickstart</span>
<h2 class="section-title">Get running from source</h2>
<pre><code># 1. Clone CNA's documented branch and its sibling repositories (these are NOT submodules).
# GitHub's default branch of cna is still the alpha.1 commit; sharp-runtime and meta-gl use
# their branches of the same name, easy-gl its default branch.
git clone -b apple/m4-stabilization https://github.com/libcna/cna.git
git -C cna checkout c1c316b9c7a846ce8002809c151fcd1af14942c9
git clone -b apple/m4-stabilization https://github.com/libcna/sharp-runtime.git
git clone https://github.com/libcna/easy-gl.git
git clone -b apple/m4-stabilization https://github.com/libcna/meta-gl.git
cd cna
git submodule update --init # non-recursive is correct, and much faster
# 2. System packages. FFmpeg is optional now (video throws NotSupportedException without it).
# Install the X11/GL/audio development headers BEFORE the first configure so the vendored SDL3
# gets real window and audio drivers; CI installs, on top of the basics below (abridged; the full list is on the Building page):
# libx11-dev libxext-dev libxrandr-dev libxi-dev libxcursor-dev libxkbcommon-dev
# libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev libvulkan-dev libasound2-dev libpulse-dev libdbus-1-dev
sudo apt install cmake g++ ninja-build pkg-config
# 3. Configure and build (OPENGLES3 is the Linux default - needs OpenGL ES 3.0).
# The first configure also builds SDL3 from source, so allow a few minutes.
cmake -S . -B build -DCNA_GRAPHICS_RENDERER=OPENGLES3
cmake --build build --target cna_demo_2d
# 4. Build one of the 22 focused test targets (CnaMathTests, CnaContentTests, CnaInputModuleTests, ...).
# Many CTest entries are separate executables and GPU tests need a display: the build guide
# explains the CNA_TEST_DISPLAY policy and how to run them under xvfb-run.
cmake --build build --target CnaMathTests</code></pre>
<a href="docs/getting-started.html" class="btn btn-primary btn-sm">Full Getting Started Guide →</a>
<a href="docs/building.html" class="btn btn-secondary btn-sm" style="margin-left:0.5rem;">All Build Options →</a>
<a href="development/index.html" class="btn btn-secondary btn-sm" style="margin-left:0.5rem;">Development & Maintainer Guide →</a>
<a href="deep-dives/index.html" class="btn btn-secondary btn-sm" style="margin-left:0.5rem;">Deep Dives →</a>
<a href="known-issues/index.html" class="btn btn-secondary btn-sm" style="margin-left:0.5rem;">Known Issues →</a>
</div>
</section>
<!-- Related projects -->
<section class="section">
<div class="container">
<span class="section-label">See Also</span>
<h2 class="section-title">Related projects & references</h2>
<p class="section-desc">CNA sits in a larger public ecosystem: required runtime layers, renderer libraries, starter projects, ports, tools, games and primary XNA references. The links below were re-checked against GitHub on 4 October 2026, including the public <a href="https://github.com/openeggbert" target="_blank" rel="noopener">openeggbert GitHub account</a>; several stale or dead links were corrected.</p>
<div class="callout callout--note" style="margin-bottom:2rem;">
<span class="callout-icon">🔗</span>
<p><strong>Release boundary:</strong> this site documents CNA snapshot <code>c1c316b9</code>. Companion repositories have their own branches and release cadence; a link here means “related and public”, not that its current default branch builds against this exact snapshot. Numbers on these cards are tied to the named repository revision, not to CNA. Required sibling checkouts for a chosen CNA configuration are identified separately in the <a href="docs/building.html">build guide</a>.</p>
</div>
<div class="callout callout--info" style="margin-bottom:2rem;">
<span class="callout-icon">📝</span>
<p><strong>CNA is partially based on FNA (C#).</strong> Portions of CNA's API design and implementation are derived from <a href="https://github.com/FNA-XNA/FNA" target="_blank" rel="noopener">FNA</a> - a managed C# reimplementation of XNA 4.0 by Ethan Lee, licensed under the Ms-PL. CNA translates these portions into native C++23. See <a href="about.html#fna">About</a> and the snapshot's <a href="https://github.com/libcna/cna/blob/c1c316b9c7a846ce8002809c151fcd1af14942c9/THIRD_PARTY_NOTICES.md" target="_blank" rel="noopener">THIRD_PARTY_NOTICES.md</a> for full attribution.</p>
</div>
<div class="cards cards--2">
<div class="card">
<h3>Microsoft XNA 4.0 Documentation</h3>
<p>The original XNA Game Studio 4.0 API documentation on Microsoft Learn - the reference CNA aims to be compatible with.</p>
<a href="https://learn.microsoft.com/en-us/previous-versions/windows/xna/bb200104(v=xnagamestudio.41)" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">Microsoft Learn ↗</a>
</div>
<div class="card">
<h3>FNA</h3>
<p>FNA is a reimplementation of the Microsoft XNA Game Studio 4.0.4 libraries, targeting C#/.NET. CNA shares the Ms-PL licence and portions derived from FNA.</p>
<a href="https://fna-xna.github.io/docs/" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">FNA Docs ↗</a>
</div>
<div class="card">
<h3>MonoGame</h3>
<p>MonoGame is a cross-platform successor to XNA for C#. Its documentation is a valuable reference for understanding the XNA API surface.</p>
<a href="https://docs.monogame.net/articles/index.html" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">MonoGame Docs ↗</a>
</div>
<div class="card">
<h3>sharp-runtime</h3>
<p>The C++23 implementation of the practical <code>System.*</code> surface used throughout CNA: value types, strings, collections, IO, text, threading, XML, JSON and more. Every build of this snapshot requires this sibling checkout, and it must be the repository’s <code>apple/m4-stabilization</code> branch (its default branch lacks the components CNA now requests).</p>
<a href="https://github.com/libcna/sharp-runtime" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">sharp-runtime on GitHub ↗</a>
</div>
<div class="card">
<h3>easy-gl & meta-gl</h3>
<p><code>meta-gl</code> supplies type-safe OpenGL/OpenGL ES loading and calls; <code>easy-gl</code> adds the toolkit-independent object layer used by CNA's three EasyGL renderer identities. Clone both beside CNA when building those identities.</p>
<a href="https://github.com/libcna/easy-gl" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">easy-gl ↗</a>
<a href="https://github.com/libcna/meta-gl" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">meta-gl ↗</a>
</div>
<div class="card">
<h3>Easy3D</h3>
<p>A deliberately small companion library for CNA projects that need practical cameras, billboard/cube batching, texture atlases and debug drawing without hiding CNA behind a separate engine abstraction. It lives in the <code>openeggbert</code> account.</p>
<a href="https://github.com/openeggbert/easy-3d" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">easy-3d on GitHub ↗</a>
</div>
<div class="card">
<h3>CNA glTF Viewer</h3>
<p>A focused desktop viewer for <code>.gltf</code> and <code>.glb</code> assets. It exercises both CNA’s direct runtime glTF path and the <code>cna_tool_gltf_to_cnj</code> conversion path, including materials, skins and animation playback. The working code is on the repository’s <code>develop</code> branch.</p>
<a href="https://github.com/libcna/cna-gltf-viewer/tree/develop" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-gltf-viewer on GitHub ↗</a>
</div>
<div class="card">
<h3>CNA.NET</h3>
<p>CNA’s C# binding: a <code>Microsoft.Xna.Framework</code>-compatible facade (<code>CNA.XnaCompat</code>) over an idiomatic managed API and an internal P/Invoke layer that talks only to CNA’s C ABI. It is beta and source-first; it admits exactly C ABI 0.46.0, the version this snapshot exports, after a compatibility review recorded by CNA’s Apple campaign, and on a physical Mac mini M4 (osx-arm64) its suites, package acceptance, template and samples ran locally. Companion repositories: <a href="https://github.com/libcna/cna-dotnet-template" target="_blank" rel="noopener">cna-dotnet-template</a> (a <code>dotnet new</code> template with desktop, browser and Android heads), <a href="https://github.com/libcna/cna-dotnet-samples" target="_blank" rel="noopener">cna-dotnet-samples</a> (the original XNA C# samples, unchanged) and <a href="https://github.com/libcna/cna-multi-language-3d-demo" target="_blank" rel="noopener">cna-multi-language-3d-demo</a> (one game in C++, C and C#).</p>
<a href="docs/cna-net.html" class="btn btn-secondary btn-sm mt-2">CNA.NET overview</a>
<a href="https://github.com/libcna/cna-dotnet" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-dotnet on GitHub ↗</a>
</div>
<div class="card">
<h3>Galaxy Eggbert</h3>
<p>A playable 3D game and editor built directly on CNA with Easy3D helpers. It provides a substantial real-game consumer for terrain, models, UI, audio, persistence and authoring workflows beyond isolated samples.</p>
<a href="https://github.com/openeggbert/galaxy-eggbert" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">galaxy-eggbert on GitHub ↗</a>
</div>
<div class="card">
<h3>Mobile Eggbert</h3>
<p>A C++ migration of the 2013 Windows Phone XNA game (Speedy Blupi), decompiled from the original release, moved through MonoGame and then onto CNA. It consumes CNA directly, builds natively on desktop from source, has an Android Gradle/NDK project (no APK is published) and a playable <a href="demos.html">browser build</a>. Its results belong to the CNA revision it was built with, not to this snapshot.</p>
<a href="https://github.com/openeggbert/mobile-eggbert" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">mobile-eggbert on GitHub ↗</a>
</div>
<div class="card">
<h3>MeshCraft</h3>
<p>A C++23 scene editor and conversion toolchain for editable MC3 scenes and glTF/GLB output. Its graphical editor has a CNA rendering path, while its command-line converters can run without CNA.</p>
<a href="https://github.com/libcna/mesh-craft" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">mesh-craft on GitHub ↗</a>
</div>
<div class="card">
<h3>cna-samples</h3>
<p><strong>91 C++ ports of Microsoft’s XNA Game Studio 4.0 samples and games are complete</strong> in the repository’s own plan (revision <code>5db32e6</code>, 3 October 2026), and 90 C++ builds are published as playable browser builds. The plan audits 153 entries (SAMPLE-001 to SAMPLE-153), not 153 games: 8 relevant XNA 4.0 C# programs remain, and 54 entries are not port targets (XNA 3.x or older, Silverlight, WinForms tools, VB.NET, C++, asset packs). The Racing Game Kit is ported in its own plan and is not hosted. These are results for CNA <code>next</code> on that date, not for this snapshot. Shader-driven samples such as Bloom, ShadowMapping and Skinning run through CNA’s compiled-effect path.</p>
<a href="https://github.com/libcna/cna-samples" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-samples on GitHub ↗</a>
<a href="https://samples.libcna.com/" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">Play samples ↗</a>
</div>
<div class="card">
<h3>CNA Car Simulator</h3>
<p>A realistic passenger-car driving simulator in a fictional Czech landscape, built on CNA <code>next</code> and sharp-runtime <code>next</code>, with traffic, weather, a day-night cycle and a helicopter. Playable in the browser; two videos on the CNA YouTube channel.</p>
<a href="https://demos.libcna.com/cna-car-simulator/cna-car-simulator.html" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">Play in Browser ↗</a>
<a href="https://github.com/libcna/cna-car-simulator" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-car-simulator on GitHub ↗</a>
</div>
<div class="card">
<h3>CNA Street</h3>
<p>A procedurally generated European inner-city street — a signalised junction, traffic, pedestrians, shadows and reflections — rendered with CNA. The web build generates the street in your browser, so the first start takes about a minute.</p>
<a href="https://demos.libcna.com/cna-street/cna-street.html" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">Play in Browser ↗</a>
<a href="https://github.com/libcna/cna-street" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-street on GitHub ↗</a>
</div>
<div class="card">
<h3>cna-lab</h3>
<p>A collection of experimental CNA projects kept as git subtrees — among them black-pine, tamagotchi-cna and wolf-cna, several of which share their names with browser builds on the <a href="demos.html">Demos page</a>. It is also the archive of CNA’s eight <a href="docs/c-api.html#archived-bindings">archived language bindings</a> (under <code>bindings/</code>), with their templates and full history.</p>
<a href="https://github.com/libcna/cna-lab" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-lab on GitHub ↗</a>
</div>
<div class="card">
<h3>cna-extended</h3>
<p>A C++23 port of <strong>MonoGame.Extended</strong> with about 100,000 lines of C++ (102,360 lines in 890 files at revision <code>5775ecc97</code>). All 18 upstream subsystems are implemented — tilemaps (Tiled TMX, LDtk and Ogmo), particles, ECS, screens, tweening, collisions, bitmap fonts, input listeners, animations and more — plus a non-upstream <code>World3DEXT</code> layer: an ECS-based 3D renderer with frustum culling, skinned models, octree and spatial-hash broadphases, a 3D particle system and voxel tilemaps. Its default build is headers-only — pass <code>-DCNA_EXTENDED_LINK_CNA=ON</code> to actually link. The working code is on the <code>develop</code> branch.</p>
<a href="https://github.com/libcna/cna-extended/tree/develop" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-extended on GitHub ↗</a>
</div>
<div class="card">
<h3>cna-examples</h3>
<p>A single browsable catalogue app that teaches CNA’s own APIs, one demo screen at a time — <em>Home → Area → Category → Demo</em>, navigable at runtime with no rebuild. At revision <code>ea33c9a29</code> (13 September 2026) the catalogue registers <strong>249 demo screens</strong> across 13 areas, all populated, with a catalogue checker and a headless sweep tool; its README reports all 249 rendering on both OPENGLES3 and SDL_RENDERER.</p>
<a href="https://github.com/libcna/cna-examples" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-examples on GitHub ↗</a>
</div>
<div class="card">
<h3>cna-template</h3>
<p>The starting point for a new CNA game. The C++ is deliberately tiny — a HelloGame that loads a texture and moves it — because the build wiring is the actual product: per-renderer CMake presets, a complete Android gradle project, MinGW-w64 cross-compilation, Emscripten asset preloading, Windows DLL deployment and a <code>dependencies.lock</code> pinning exact CNA and sharp-runtime commits. Its public revision pins CNA from 11 August 2026 and its weekly CI is currently red, so treat it as a template to adapt, not as a verified build of this snapshot.</p>
<a href="https://github.com/libcna/cna-template" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">cna-template on GitHub ↗</a>
</div>
<div class="card">
<h3>xna4-spec</h3>
<p>A machine-readable XML catalogue of the XNA 4.0 API surface, scraped from Microsoft's original documentation and validated against a hand-written schema. It is useful as a checklist of namespaces, types and members, but its one-line summaries do not define runtime semantics or conformance. CNA does not consume it at build time.</p>
<a href="https://github.com/libcna/xna4-spec" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">xna4-spec on GitHub ↗</a>
</div>
<div class="card">
<h3>CNA ecosystem map</h3>
<p>The public umbrella repository explains how CNA, sharp-runtime, rendering layers, tools and preservation projects fit together. Use it to discover adjacent work; its moving project summaries are not the source of truth for this documentation snapshot.</p>
<a href="https://github.com/libcna" target="_blank" rel="noopener" class="btn btn-secondary btn-sm mt-2">libcna on GitHub ↗</a>
</div>
</div>
</div>
</section>
</main>
<footer>
<div class="footer-inner">
<div class="footer-top">
<div class="footer-brand">
<div class="footer-brand-name">CNA</div>
<p>Documentation snapshot for CNA commit c1c316b9 (9 October 2026), a post-alpha.1 development snapshot. CNA exposes 14 renderer identities across 12 implementation families; APIs may change before 1.0.</p>
</div>
<div class="footer-col">
<h4>Project</h4>
<ul>
<li><a href="about.html">About</a></li>
<li><a href="features.html">Features</a></li>
<li><a href="architecture.html">Architecture</a></li>
<li><a href="roadmap.html">Roadmap</a></li>
<li><a href="network.html">CNA Network</a></li>
</ul>
</div>
<div class="footer-col">
<h4>Docs</h4>
<ul>
<li><a href="docs/getting-started.html">Getting Started</a></li>
<li><a href="docs/building.html">Building</a></li>
<li><a href="docs/platforms.html">Platforms</a></li>
<li><a href="docs/rendering-backends.html">Renderers</a></li>
<li><a href="docs/faq.html">FAQ</a></li>
<li><a href="deep-dives/index.html">Deep Dives</a></li>
<li><a href="known-issues/index.html">Known Issues</a></li>
<li><a href="historical/index.html">CNA Bible (historical PDF)</a></li>
</ul>
</div>
<div class="footer-col">
<h4>Community</h4>
<ul>
<li><a href="https://github.com/libcna/cna" target="_blank" rel="noopener">GitHub</a></li>
<li><a href="https://discord.gg/vrnc4n6DaE" target="_blank" rel="noopener">Discord</a></li>
<li><a href="demos.html">Demos</a></li>
<li><a href="videos.html">Videos</a></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>CNA is not affiliated with or endorsed by Microsoft Corporation. XNA is a trademark of Microsoft. Licensed under the Microsoft Public License (Ms-PL).</p>
<div class="footer-links">
<a href="https://github.com/libcna/cna/blob/c1c316b9c7a846ce8002809c151fcd1af14942c9/LICENSE" target="_blank" rel="noopener">License</a>
<a href="contact.html">Contact</a>
</div>
</div>
</div>
</footer>
<script src="js/main.js"></script>
<script src="js/prism/prism.min.js" defer></script>
<script src="js/prism/prism-cpp.min.js" defer></script>
<script src="js/prism/prism-glsl.min.js" defer></script>
<script src="js/prism/prism-json.min.js" defer></script>
<script src="js/prism/prism-bash.min.js" defer></script>
<script src="js/prism/prism-cmake.min.js" defer></script>
</body>
</html>