A programming language designed for LLM code generation.
Playground ยท Specification ยท Grammar ยท Cheatsheet ยท Design Philosophy
Almide is a statically-typed language optimized for AI-generated code. It compiles to native binaries (via Rust) and WebAssembly.
The core metric is modification survival rate โ how often code still compiles and passes tests after a series of AI-driven modifications. The language achieves this through unambiguous syntax, actionable compiler diagnostics, and a standard library that covers common patterns out of the box.
The flywheel: LLMs write Almide reliably โ more code is produced โ training data grows โ LLMs write it better โ the ecosystem expands.
Try it in your browser โ โ No installation required.
curl -fsSL https://raw.githubusercontent.com/almide/almide/main/tools/install.sh | shirm https://raw.githubusercontent.com/almide/almide/main/tools/install.ps1 | iexRequires Rust (stable, 1.89+):
git clone https://github.com/almide/almide.git
cd almide
cargo build --release
cp target/release/almide ~/.local/bin/fn main() -> Unit = {
println("Hello, world!")
}
almide run hello.almd- Multi-target โ Same source compiles to native binary (via Rust) or WebAssembly (direct emit)
- Generics โ Functions (
fn id[T](x: T) -> T), records, variant types, recursive variants with auto Box wrapping - Pattern matching โ Exhaustive match with variant destructuring
- Effect functions โ
effect fnfor explicit error propagation (Resultauto-wrapping) - Bidirectional type inference โ Type annotations flow into expressions (
let xs: List[Int] = []) - Codec system โ
Type.decode(value)/Type.encode(value)convention with auto-derive - Map literals โ
["key": value]syntax withm[key]access andfor (k, v) in miteration - Fan concurrency โ
fan { a(); b() },fan.map,fan.race,fan.any,fan.settle - Top-level constants โ
let PI = 3.14at module scope, compile-time evaluated - Pipeline operator โ
data |> transform |> output - Module system โ Packages, sub-namespaces, visibility control, diamond dependency resolution
- Standard library โ 430 functions across 23 modules (string, list, map, json, http, fs, etc.)
- Built-in testing โ
test "name" { assert_eq(a, b) }withalmide test - Actionable diagnostics โ Every error includes file:line, context, and a concrete fix suggestion
- Predictable โ One canonical way to express each concept, reducing token branching for LLMs
- Local โ Understanding any piece of code requires only nearby context
- Repairable โ Compiler diagnostics guide toward a specific fix, not multiple possibilities
- Compact โ High semantic density, low syntactic noise
For the full design rationale, see Design Philosophy.
let PI = 3.14159265358979323846
let SOLAR_MASS = 4.0 * PI * PI
type Tree[T] =
| Leaf(T)
| Node(Tree[T], Tree[T])
fn tree_sum(t: Tree[Int]) -> Int =
match t {
Leaf(v) => v
Node(left, right) => tree_sum(left) + tree_sum(right)
}
effect fn greet(name: String) -> Result[Unit, String] = {
guard string.len(name) > 0 else err("empty name")
println("Hello, ${name}!")
ok(())
}
effect fn main() -> Result[Unit, String] = {
greet("world")
}
test "greet succeeds" {
assert_eq("hello".len(), 5)
}
Almide source (.almd) is compiled by a pure-Rust compiler through a three-layer codegen architecture:
.almd โ Lexer โ Parser โ AST โ Type Checker โ Lowering โ IR
โ
Nanopass Pipeline (semantic rewrites)
โ
Template Renderer (TOML-driven)
โ
.rs / .wasm
The Nanopass pipeline applies target-specific transformations: ResultPropagation (Rust ?), CloneInsertion (Rust borrow analysis), LICM (loop-invariant code motion). The Template Renderer is purely syntactic โ all semantic decisions are already encoded in the IR.
almide run app.almd # Compile + execute (Rust target)
almide run app.almd -- arg1 # With arguments
almide build app.almd -o app # Build standalone binary
almide build app.almd --target wasm # Build WebAssembly (WASI)
almide compile # Compile to .almdi (module interface + IR)
almide compile parser # Compile a specific module
almide compile --json # Output interface as JSON
almide test # Find and run all test blocks (recursive)
almide test spec/lang/ # Run tests in a directory
almide test --run "pattern" # Filter tests by name
almide check app.almd # Type check only
almide check app.almd --json # Type check with JSON output
almide fmt app.almd # Format source code
almide clean # Clear build + dependency cacheAlmide emits WASM bytecode directly (no Rust/C intermediary). Each binary is self-contained โ allocator, string handling, and runtime are all included. No external GC or host runtime dependency.
| Program | Binary Size |
|---|---|
| Hello World | 2,368 B |
| FizzBuzz | 2,662 B |
| Fibonacci | 2,699 B |
| Closure | 2,894 B |
| Variant | 3,391 B |
Almide compiles to Rust, which then compiles to native machine code. No runtime, no GC, no interpreter.
| Metric | Value |
|---|---|
| Binary size (minigit CLI) | 444 KB (stripped) |
| Runtime (100 ops) | 1.1s |
| Dependencies | 0 (single static binary) |
| WASM target | almide build app.almd --target wasm |
| Category | Status |
|---|---|
| Compiler | Pure Rust, single binary, 0 ICE |
| Targets | Rust (native), WASM (direct emit) |
| Codegen | v3 โ Nanopass + TOML templates, fully target-agnostic walker |
| Stdlib | 430 functions across 23 modules |
| Tests | 177 test files pass (Rust), 278 pass (WASM) |
| MSR | 23/25 exercises pass (Sonnet 4.6, WASM, max 3 attempts) |
| MiniGit Bench | 41/41 tests pass, 100% success rate (ai-coding-lang-bench) |
| Artifacts | .almdi module interface files via almide compile |
| Playground | Live โ compiler runs as WASM in browser |
Comparison with 15 established languages using mame/ai-coding-lang-bench (MiniGit implementation task).
Almide uses Sonnet 4.6 (unknown language); all others use Opus 4.6 (known language). Almide achieves 100% pass rate with fewer lines of code than most languages, despite needing more time due to the model having no prior training data for the language.
Grammar โ almide-grammar
Single source of truth for Almide syntax โ keywords, operators, precedence, and TextMate scopes. Written in Almide itself.
All tools that need to know Almide's syntax import this module rather than maintaining their own keyword lists:
# almide.toml
[dependencies]
almide-grammar = { git = "https://github.com/almide/almide-grammar", tag = "v0.1.0" }import almide_grammar
almide_grammar.keyword_groups() // 6 groups, 41 keywords
almide_grammar.precedence_table() // 8 levels, pipe โ unary
The compiler itself uses almide-grammar's TOML files (tokens.toml, precedence.toml) at build time to generate its lexer keyword table โ ensuring the compiler and all tooling stay in sync.
- VS Code โ vscode-almide โ Syntax highlighting, bracket matching, comment toggling, code folding
- Tree-sitter โ tree-sitter-almide โ Tree-sitter grammar for editors that support it (Neovim, Helix, Zed)
Playground โ playground
Browser-based compiler and runner. The Almide compiler runs as WASM โ no server, no installation. Try it at almide.github.io/playground.
- docs/ARCHITECTURE.md โ Compiler pipeline, module map, design decisions
- docs/SPEC.md โ Full language specification
- docs/GRAMMAR.md โ EBNF grammar + stdlib reference
- docs/CHEATSHEET.md โ Quick reference for AI code generation
- docs/DESIGN.md โ Design philosophy and trade-offs
- docs/STDLIB-SPEC.md โ Standard library specification (381 functions)
- docs/roadmap/ โ Language evolution plans
Contributions are welcome! Please open an issue or pull request on GitHub.
After cloning, install the git hooks:
brew install lefthook # macOS; see https://github.com/evilmartians/lefthook for other platforms
lefthook installAll commits must be in English (enforced by the commit-msg hook). See CLAUDE.md for project conventions.
Licensed under either of MIT or Apache 2.0 at your option.



