Umbrella tracking issue for the first tagged, announced, public release of K2.
K2 is Windows-only today; the language, comptime/metaprogramming engine, standard library, and core tooling are substantial and covered by a 200+ test suite (currently green, vm corpus 74/74).
What v0.1.0 is
The first public milestone: a tagged GitHub release with prebuilt Windows binaries, accurate docs, an honest "what works / what doesn't" story, and an announcement. Not feature-complete, not multi-platform — a usable, documented, experimental snapshot.
✅ Landed (the foundation)
- Language — structs/packed structs, enums + payloads, exhaustive
match (ranges/string/guard patterns; value-producing match and if expressions), ints i8–i128/u1–u128 + floats, pointers/arrays/slices/optionals with debug checks, casts, distinct/opaque types, monomorphized generics, UFCS extension methods (incl. on temporaries), in-struct methods, lambdas + iterators.
- Errors & memory —
T ! E, fail, ?, catch, !!, ??, success/error defer modes, tail-forwarding, qualified error types; Arena zones with compiler-enforced non-escape.
- Comptime & metaprogramming — a bytecode VM that executes the compiler's own IR;
#run/#if; #quote/#insert with re-checking + hygiene; template macros with $-splice; #for; #parse; the ast.* value surface you can match on; #compiler hooks + compiler_decls(); #derive.
- Reflection —
type_info, typeid, Any → std.serde (reflection-driven JSON, no per-type code).
- Generics —
$T: constraints, where { … } predicates, named constraints, output type params.
- Modules — file-as-module,
:: namespacing, per-module name mangling.
- C interop —
#extern, Win64 by-value aggregate ABI, thin C fn pointers, k2 bindgen (libclang → K2).
- Backend / build — LLVM backend, in-process LLD + a from-scratch K2 linker (
k2lnk), k2 build running build.k2 in the comptime VM → real exes/DLLs.
- Standard library (25 modules) —
io, fmt, mem, strings, slice, vec, map, list, heap, math, rand, color, bits, ptr, path, time, crypto, serde, net (TCP/UDP), atomics, thread, fs, process, c, build.
- Tooling —
k2 lsp (diagnostics/completion/hover/def/symbols), a tree-sitter grammar + Zed extension, and the #test comptime test lane (a failed assertion fails the build like a type error).
🎯 Before v0.1.0
Release mechanics
Docs & consistency — done in this pass, verify
Correctness gaps — fix or document for 0.1.0
Announcement
⚠️ Known limitations (ship-with, document)
- Windows x86-64 only — the frontend is platform-independent; the Linux/ELF backend is designed (
docs/14) but not implemented.
- No external packages — single-tree until the package manager (
docs/16).
- Interface-through-interface dispatch; struct
== (above).
🗺️ Explicitly post-0.1.0 (not blocking)
- Testing — runtime lane (
k2 test, per-test zones + leak checks, TTY/TAP/JSON), reflection-driven structural diffs (also unlocks struct ==), property tests, snapshots (docs/17 §5).
- Tooling —
k2 fmt, k2 doc, k2 repl, LSP v2/v3.
- Linux/ELF backend (
docs/14); package manager (docs/16).
- Wider metaprogramming — more
ast.* node kinds, building ast.* without #quote, bare-call macros, typed macro params, an auto-generated std.ast.
- Interface composition / owned dynamic objects / downcasting, SIMD, contracts (
#require/#ensure); #when/#bench/#on_start/#on_exit.
Related issues
Umbrella tracking issue for the first tagged, announced, public release of K2.
K2 is Windows-only today; the language, comptime/metaprogramming engine, standard library, and core tooling are substantial and covered by a 200+ test suite (currently green, vm corpus 74/74).
What v0.1.0 is
The first public milestone: a tagged GitHub release with prebuilt Windows binaries, accurate docs, an honest "what works / what doesn't" story, and an announcement. Not feature-complete, not multi-platform — a usable, documented, experimental snapshot.
✅ Landed (the foundation)
match(ranges/string/guard patterns; value-producingmatchandifexpressions), intsi8–i128/u1–u128+ floats, pointers/arrays/slices/optionals with debug checks, casts, distinct/opaque types, monomorphized generics, UFCS extension methods (incl. on temporaries), in-struct methods, lambdas + iterators.T ! E,fail,?,catch,!!,??, success/errordefermodes, tail-forwarding, qualified error types;Arenazones with compiler-enforced non-escape.#run/#if;#quote/#insertwith re-checking + hygiene; templatemacros with$-splice;#for;#parse; theast.*value surface you canmatchon;#compilerhooks +compiler_decls();#derive.type_info,typeid,Any→std.serde(reflection-driven JSON, no per-type code).$T:constraints,where { … }predicates, named constraints, output type params.::namespacing, per-module name mangling.#extern, Win64 by-value aggregate ABI, thin C fn pointers,k2 bindgen(libclang → K2).k2lnk),k2 buildrunningbuild.k2in the comptime VM → real exes/DLLs.io,fmt,mem,strings,slice,vec,map,list,heap,math,rand,color,bits,ptr,path,time,crypto,serde,net(TCP/UDP),atomics,thread,fs,process,c,build.k2 lsp(diagnostics/completion/hover/def/symbols), a tree-sitter grammar + Zed extension, and the#testcomptime test lane (a failed assertion fails the build like a type error).🎯 Before v0.1.0
Release mechanics
v0.1.0–v0.1.4already exist (unpushed, no releases — dev checkpoints from 2026-06-24). Recommend: delete the unpushed dev tags and tag the real releasev0.1.0(or start atv0.2.0).-devat tag time: CLIversionandbuild.zig.zon0.1.0-dev→0.1.0.CHANGELOG.md/ release notes — none exists yet.k2.exe+k2lld.dll/ runtime DLLs) and an LLVM/SDK note.Docs & consistency — done in this pass, verify
ROADMAP.mdrewritten (landed vs v0.1.0 vs after; real known bugs).docs/15test-runner status;docs/00doc index completed.build.zig.zonversion aligned to the CLI (0.1.0-dev).examples/builds & runs on a clean checkout.Correctness gaps — fix or document for 0.1.0
std.fmt.Display). Fix, or document as a known limitation.==→ backend can't emit an aggregate compare (fails at runtime, not just comptime). Document as a known limitation; the real fix is the reflection-driven structural compare (post-0.1.0).Announcement
docs/14) but not implemented.docs/16).==(above).🗺️ Explicitly post-0.1.0 (not blocking)
k2 test, per-test zones + leak checks, TTY/TAP/JSON), reflection-driven structural diffs (also unlocks struct==), property tests, snapshots (docs/17§5).k2 fmt,k2 doc,k2 repl, LSP v2/v3.docs/14); package manager (docs/16).ast.*node kinds, buildingast.*without#quote, bare-call macros, typed macro params, an auto-generatedstd.ast.#require/#ensure);#when/#bench/#on_start/#on_exit.Related issues
#testis now done (comptime lane);#when,#bench,#on_start/#on_exitremain.std.compiler/ast.*tracking.