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

What if agents were built in?

Today's agent stacks bolt tools, prompts, and memory onto Python with decorators and dictionaries, nothing checks them. Astra's endgame is to make these first-class, typechecked constructs of the language itself.

The division of labor is changing

Every previous language generation optimized for a human at a keyboard. The next one has three participants with different strengths:

ParticipantContributesNeeds from the language
The agentTactical speed, code at machine paceA generable surface + machine-readable feedback
The compilerStrategic structure, enforced designTypes, contracts, deterministic builds baked in
The humanJudgment, intent and reviewCode where the compiler already ruled out the mundane bugs

Astra is designed around that triangle. Each release strengthens the strategic layer another notch:

ReleaseStrategic guarantee it adds
v0.6–0.7 shippedTypes, Result, machine-readable diagnostics, explicit dyn, reproducible locks
v0.8 shippedOne true LLVM-IR backend, the foundation every future target builds on
v0.9 shippedA sound core: nominal types, payload enums, ? error handling, ARC memory reclamation, a compiler that never panics, delivered as cross-platform binaries
NextTool schemas, agent state, prompts, and delegation, all typechecked; generated code sandboxed in WASM
v1.0One strategic layer across native, WASM, and GPU targets

Delivery against each guarantee is scored on the progress tracker, currently 5 of 11 shipped, each backed by a passing test.

Who Astra is for

Astra is built first for people who orchestrate or review code that AI writes.

Agent & framework builders

You orchestrate LLMs that write code. You want generated code rejected before it runs, and compiler feedback your loop can parse mechanically. Start at the machine interface.

Engineers supervising AI output

You review more code than you write. A strict type system and explicit dyn boundaries mean the compiler has already audited what you're reading, you review intent, not typos.

Python developers hitting the ceiling

You like Python's surface but pay for it in runtime failures and slow loops. Astra keeps the terseness, inference, string interpolation, no lifetimes, and compiles to native.

Language & compiler enthusiasts

A readable Rust codebase (907 tests at v0.13.11-alpha; source opens at v1.0-beta, early access on request) implementing a full pipeline: lexer → parser → type inference → LLVM IR → native. Every architecture decision is written down and ratified.

Astra is not aimed (yet) at kernel developers, hard real-time systems, or teams needing a mature ecosystem today, see the honest status below.

Astra vs. the alternatives for agent code

Every language in this table is excellent at what it was designed for. The comparison is scoped to one question: what should an agent generate?

PythonRustGoMojoAstra
Mistakes caught before run Few (runtime)MostManyMost Most, by design goal
Diagnostics as machine-readable contract NoPartial (--message-format=json, rich but complex)PartialNo Yes, stable codes + suggestions, primary interface
Easy for an LLM to generate correctly YesHard (lifetimes)YesModerate Yes, Python-like surface, no borrow checker
Native performance NoYesYesYes Yes (LLVM)
Agent primitives in the language Frameworks onlyFrameworks onlyFrameworks onlyNo Planned as keywords
Memory model burden on the generator None (GC)High (ownership)None (GC)Low None visible (ARC)
Maturity today ProductionProductionProductionEarly Alpha, tracked honestly

The bet in one sentence: Rust-grade verification with Python-grade generability, plus agent concepts the compiler itself understands. No incumbent occupies that intersection, and the maturity row is exactly why this roadmap exists.

Agent-native keywords

Four keywords are reserved and ratified (Bet 4). The design intent, syntax is illustrative and will evolve through an RFC process:

design sketch, not yet implemented
tool search_flights(from: str, to: str, date: str) -> Result<[Flight], ApiError> {
    // a tool is a typed, sandboxed capability;
    // its signature IS its schema, no JSON-schema drift
}

memory TripContext {
    budget: float,
    preferences: [str]        // typed, persistent agent state
}

agent TravelPlanner {
    tools: [search_flights],
    memory: TripContext,

    prompt plan = "Find flights within ${memory.budget}";
}

What the compiler can then guarantee, before anything runs:

  • Tool contracts hold. A tool's parameter and return types are checked at every call site. The "function-calling schema" cannot drift from the implementation because they are the same thing.
  • Memory is typed. Agent state isn't a dict of anything, reads and writes typecheck like struct access.
  • Prompts are checked templates. A prompt interpolation referencing a missing memory field is a compile error, not a silent hallucination input.
  • Subagent boundaries are contracts. An agent handing work to another agent is a typed call, the compiler verifies the whole delegation graph.

Alongside the keywords: an agent SDK (bindings for LLM providers) and a sandbox so tools execute with declared capabilities only.

What has to land first

These foundations come before the agent keywords.

WASM target

The same LLVM backend emits WebAssembly, verified agent code running in a capability-scoped sandbox, plus a browser playground for this site.

Python interop (embedded CPython)

Astra won't pretend NumPy and PyTorch don't exist. A typed boundary calls into the Python ecosystem where it's strong, keeps the orchestration layer verified.

LSP + fmt

Language server and formatter, for the humans reviewing what agents wrote.

Real async runtime + stdlib core

async/await already parses and compiles (synchronous lowering); a real task runtime and a standard library form under ARC memory management.

v1.0 completes the arc

  • GPU target (NVPTX): the third LLVM target: same language from orchestration script to kernel.
  • Mifa registry (mifa.dev): checksummed, signed packages; the lockfile contract goes global.
  • Production tooling: test/bench runners, docs generator, debugger support.

The five bets underneath

The vision isn't a mood board, it rests on five architecture decisions debated and ratified on 2026-07-02, each with recorded rationale, accepted costs, and first milestones (two of which have already shipped):

BetDecisionFirst milestone
1, MemoryARC + escape analysis + regionreclaiming since v0.9 (partial)
2, TypingStatic by default, gradual via dynshipped v0.7
3, BackendOne LLVM compiler → native / WASM / GPUnative shipped v0.8 · WASM planned
4, AI primitivestool/agent/prompt/memory keywordsplanned
5, InteropEmbedded CPython in stdlibplanned

The full decision records, rationale, accepted costs, amendment process, live in the repository and publish with the source at v1.0-beta.

Strategic language, tactical speed

In A Philosophy of Software Design, John Ousterhout draws the line between tactical programming: getting something working as fast as possible, and strategic programming: investing in design so the system stays changeable. LLMs are the ultimate tactical programmers: they produce working-looking code at machine speed, with no stake in the design surviving next week.

Astra's position: when generation is free, the strategic layer must move into the language. Types, contracts, Result-based errors, deterministic builds, and (soon) typed agent primitives are the design investment, enforced by the compiler, not by discipline. The agent supplies tactical speed; the language supplies strategic structure; the human supervises intent. That's the modern programming paradigm Astra is built for.

This isn't just positioning, each strategic guarantee is tracked and tested like a feature (5 of 11 shipped), and the release plan maps every version to the guarantee it adds.