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
- Contracts —
requiresandensures, 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
anytype 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.