zannagames.com

A game development
platform, built
from scratch.

Two languages, a typed intermediate language, an optimizer, native ARM64 and x86-64 code generation, and a runtime that draws, plays sound, and talks to the network — every line written for this project, with zero external dependencies.

Pre-alpha · in active development · GPL-3.0 · macOS / Windows / Linux

// the pipeline

Source in, native code out.
One stack, no borrowed parts.

Every panel below is real: the programs compile and run with today’s toolchain, and the IL is the compiler’s actual -O1 output.

1 source Zia or BASIC — same platform
module Hello;

bind Zanna.Terminal as Term;

func start() {
    var total = 0;
    for i in 1..6 {
        total = total + i;
    }
    Term.Say("Zanna says hello");
    Term.SayInt(total);
}
2 typed il SSA with block parameters, verified
il 0.3.0
extern @Zanna.Terminal.SayInt(i64) -> void
extern @Zanna.Terminal.Say(str) -> void
global const str @.L0 = "Zanna says hello"
func @main() -> void {
entry_0:
  br forin_cond_0(1, 0)
forin_cond_0(%t31:i64, %t33:i64):
  %t7 = scmp_lt %t31, 6
  cbr %t7, forin_body_1, forin_end_4(%t33)
forin_body_1:
  %t11 = iadd.ovf %t33, %t31
  %t16 = scmp_gt %t31, 9223372036854775806
  %t18 = zext1 %t16
  %t20 = trunc1 %t18
  cbr %t20, forin_end_4(%t11), forin_update_do_3
forin_update_do_3:
  %t23 = iadd.ovf %t31, 1
  br forin_cond_0(%t23, %t11)
forin_end_4(%t35:i64):
  %t24 = const_str @.L0
  call @Zanna.Terminal.Say(%t24)
  call @Zanna.Terminal.SayInt(%t35)
  ret
}

Excerpt of the compiler’s -O1 output; location metadata omitted. Stack slots are already promoted to SSA block parameters.

3 run VM today, native binary tomorrow — same output
$ zanna run hello.zia
Zanna says hello
15
  • VM — deterministic interpreter for fast iteration
  • ARM64 & x86-64 — hand-written backends, no LLVM
  • ELF / Mach-O / PE — Zanna’s own assemblers and linkers

The same program is required to produce identical output on the VM and as a native executable.

// in the tree today

What exists right now

No roadmap slides here — this is what is in the repository and working, in varying states of finish. Each of these has a page of its own.

859K lines of production code
320K lines of tests
84 IL opcodes
531 runtime classes
4 render backends
0 external dependencies

Counted from the tree on 2026-08-05: SLOC via scripts/count_sloc.sh (blank and comment lines excluded), opcodes via zanna --dump-opcodes, classes via zanna --dump-runtime-api. The last one is counted by reading the build files.

Zero dependencies

No LLVM, no SDL, no libcurl. If Zanna needs it, Zanna implements it.

Cross-platform parity

macOS, Windows, and Linux are all first-class. A feature isn’t done until it works on all three.

Determinism

VM and native execution must agree on every defined program. That rule is enforced by tests, not by hope.

Spec-first IL

The IL has a written specification, and the tools follow it. Changes go through design review before code.

// getting it

No installer yet.
The source builds anywhere.

Installers for macOS, Windows and Linux are built and tested, but none is published — there is no version worth asking you to install yet. Building from source is how everyone working on Zanna uses it, and there is no dependency-fetch step because there are no dependencies.

$ git clone https://github.com/zannagames/zanna
$ cd zanna

# macOS
$ ./scripts/build_zanna_mac.sh
# Linux
$ ./scripts/build_zanna_linux.sh
# Windows (PowerShell)
$ ./scripts/build_zanna_win.ps1

# then
$ zanna init my-game
$ zanna run my-game

CMake 3.20 or newer and a C++20 compiler — that is the whole list. The scripts configure, build, test and install.

// status, plainly

Pre-alpha means pre-alpha

There is no release you should depend on yet. Interfaces change without notice, some corners are rough, and the parts move at different speeds. If you want a finished product, check back later — this page will say so when that changes.

What you can do today is watch it being built. The work is pushing toward an alpha where you write a game in Zia, iterate on the VM in seconds, and ship the same program as a native binary on macOS, Windows, or Linux. Development happens in the open, daily.

Where things stand right now: the source tree is v0.2.99, the IL reference is 0.3.0, and the most recent tag is v0.2.7-dev.