Astralang
A gilded and silver celestial globe from 1579, driven by clockwork and carried on a winged horse.

Built for where code is going.

No language sat where the work is going. Astra began in October 2025 from Majid Nisar's experience with today's languages. The established ones were designed around humans. The newer easy ones, like Python, are not efficient. Rust is fast and safe, but the learning curve is steep. None of them is structured around agentic coding.

Astra aims for the intersection: as easy to read and write as Python, as safe, secure and fast as Rust, with features built in for the agents that will write much of the code from now on.

Why build a language in 2026?

Because the economics of code changed. When agents generate most of the code, the bottleneck moves from writing to verifying. Dynamic languages push verification to runtime, the most expensive possible place. Astra's bet is that the language itself should be the verification layer:

  • Diagnostics that are a stable machine interface (JSON, error codes, suggestions), not prose on stderr.
  • A type system strict enough to reject whole classes of generated mistakes before execution.
  • Native compilation, so a verified program is also a fast program.
  • Eventually, agent concepts in the grammar itself: tool, agent, prompt, memory: so multi-agent systems typecheck like ordinary code.

Majid Nisar

Astra and Mifa are created and maintained by Majid Nisar, the compiler, the runtime, the package manager, the test suite, and this site. The project's detailed write-up, design notes, and development history live on his site:

How the project is run

A few rules keep every claim on this site honest.

Ground truth over hype

A feature is "working" only when a test compiles it, runs the binary, and asserts the output. The public progress page and the in-repo tracker are the same document in two forms.

Decisions are written down

Five architecture bets (memory model, typing, backend, AI primitives, Python interop) were debated, ratified, and locked with rationale and accepted costs. Amendments require a documented process, not a mood.

Claims are measured

Performance and verification numbers come from a scripted, output-verified validation harness in the repository. It publishes with the source at v1.0-beta; until then the compiled-binary side is reproducible from the v0.13.11-alpha release binaries (early access).

Milestones so far

From the first lexer in October 2025 to v0.13 in November 2026.

WhenWhat
Oct 2025v0.1, the idea becomes code: lexer, parser, first AST
Nov 2025v0.5, native compilation, Docker CI, first pre-built binaries
Jun 2026v0.6, honest alpha reset: JSON diagnostics, verify mode, AI-first thesis adopted
Jul 2026v0.7 (released 2026-07-06), source spans, structs/Result/closures native, REPL, dyn, ARC scaffolding, rich diagnostics, Mifa lockfile + registry protocol + publish/auth + --json
Jul 2026v0.8.0-alpha (tagged 2026-07-07), true LLVM-IR default backend (--emit-ir, --target cross-compile, --legacy-c fallback), async/await (sync lowering), ignored-test burn-down complete (10 → 0), end-to-end regression suite; 285 tests green
Jul 2026v0.9.0-alpha (tagged 2026-07-09), soundness milestones: nominal structs, enums with payload variants, ? operator, try/catch (function-local), tuples + destructuring, impl blocks, bitwise ops, Python-parity Tier 1–2 features
Jul 2026v0.9.1-alpha (released 2026-07-15), first cross-platform binary release (Linux x64, macOS Intel + Apple Silicon, Windows x64); closures callable (pipeline-order fix), ARC scope-based memory reclamation, compiler never panics on malformed input, CI gates (fmt / clippy / audit / llc corpus); 449 tests green
Oct 2026v0.10.0-alpha (2026-10-30), interpreter with native parity (astra run, differential fuzzing), checked runtime traps on both engines, modules (import, pub, util::f()), and mifa build/run with importable path dependencies; def alias and type inference for omitted parameter/return types; Python-style indentation is the canonical syntax (braces still accepted) and astra fmt converts to it; functions may be called before they are defined; a match that misses an enum variant is a compile error (E0021); s.split(); Cargo-style astra.toml and mifa test; value semantics (A8), structs/lists are values, mut parameters + E0022, a[i] = v; headered string literals (E0); nominal traits (trait Shape: + impl Shape for Circle:, E0020)
Nov 2026v0.11.0 – v0.11.2-alpha (2026-11-02), value semantics, nominal traits + trait bounds with static dispatch, headered string literals; v0.11.1 embeds the C runtime so the released binaries compile natively; v0.11.2 checks trait bounds and impl signatures and stops loop memory leaks; 712 tests
Nov 2026v0.12.0-alpha (2026-11-04), every type error carries a line, machine-applicable fixes and astra fix, memory freed on every exit (231 MB → 1.3 MB), bools print true/false, a 55-check release suite on every platform; 754 tests; v0.12.1 (2026-11-05) adds native builds on Windows; v0.12.2 fixes three native wrong answers found by writing real programs
Nov 2026v0.13.0-alpha (2026-11-05), astra mcp, a Model Context Protocol server any AI agent can use; runtime error codes; Astra as WebAssembly with a Node runner, and the browser playground; 777 tests; v0.13.1 (2026-11-06) adds the everyday string methods (char_at, for c in s, replace, starts_with, < on strings) and Cargo-style Mifa version requirements; 796 tests; v0.13.2 (2026-11-06) adds Map<K, V>, list sorting, and Mifa git dependencies and workspaces; v0.13.3 (2026-11-06) adds calling C (extern "c" fn, @link) and a static, self-hosted Mifa registry; v0.13.5 (2026-11-10) fixes eight bugs found by probe programs; 856 tests; v0.13.6 (2026-11-11) adds elif, default arguments and sqrt, and v0.13.7 fixes them on Linux; 868 tests; v0.13.8 (2026-11-11) brings the Python habits a model writes first and trait default methods; 877 tests; v0.13.9 adds @derive(Eq, Show); 880 tests; v0.13.10 adds multi-field enum variants, struct/tuple/range patterns and generic structs; 893 tests; v0.13.11 adds functions as values (map, filter, fold, fn(..) parameters) and sized integers (u8..i32, as); 907 tests

The same history as a visual timeline, with test counts, is on the progress page.