Status and Roadmap

Zena is not ready for production use. The compiler works and compiles itself, but the language is still changing and will keep changing while nothing depends on it.

The authoritative version of this page is PLAN.md in the repository; this is a summary.

Where things stand

Area Status
Wasm GC code generation Working
Bootstrap compiler (TypeScript) Complete
Self-hosted compiler Passes all tests
ZIR optimizing backend In progress
Async functions, WASI P3 Planned
Component model and WIT In progress
Package manager Planned
Playground Planned

Working today: arrow functions and closures, records and tuples with unboxed multi-value returns, fixed and growable arrays, monomorphized generics with no auto-boxing, single inheritance with abstract classes, mixins and interfaces, exhaustive pattern matching with guards and pattern conditions, Wasm GC exception handling, dead-code elimination over functions and types, and a standard library covering strings, collections, JSON, regex, and file I/O.

What is next

Retire the bootstrap compiler. The self-hosted compiler already passes the syntax, language, and execution suites. Finishing means completing the new IR-based backend — which is also what unlocks devirtualization, specialization, and further size reductions — and resolving known performance problems, notably quadratic function lookups in the code generator and sharing specialized methods across reference-type instantiations so monomorphization costs less binary size.

ZIR: an optimizing IR · Self-hosted compiler

Further out

Async and cooperative multithreading, targeting the upcoming Wasm P3 features. → Concurrency

Component model and WIT. A WIT parser and bindings generator so Zena programs import and export WIT interfaces directly and compile to compliant components, with no external bindgen step. → WASI support · WIT parser

Tooling. A package manager, the in-browser playground, and deeper VS Code integration.

Headline language features, the ones that go beyond catching up with TypeScript:

  • Numeric unit types — statically verified units of measure, so adding meters to feet is a compile error. → Scientific computing
  • Contractsrequires and ensures, checked at runtime now and candidates for static verification with SMT solvers later. → Formal verification
  • SIMD — native Wasm vector instructions.
  • Decorators and macros — compile-time code generation. → Macros · Decorators

What is not planned

Worth stating, because their absence is a design decision rather than a gap:

  • Automatic boxing of primitives, or an any type that would require it. → why
  • Unions mixing primitives with references.why
  • A garbage collector of our own. The host's collector is the point.
  • Linear-memory-only builds. Zena targets Wasm GC and assumes it.
  • Implicit numeric coercion, or truthiness.

Following along

Development happens in the open at github.com/elematic/zena. GitHub issues track known defects, including ones the compiler currently has against itself.