Self-hosting — the bootstrap fixed point is verified on every run

The language that compiles itself.

Kotlin's shape over a C-family syntax, compiled to native code, with deterministic destruction and no garbage collector — and no borrow checker to argue with. Three engines that have to agree on every byte they print.

point.keal
class Point(val x: Float, val y: Float) {
    func length(): Float { sqrt(this.x * this.x + this.y * this.y) }
    func toString(): String { "(${this.x}, ${this.y})" }
}

func firstLong(points: List<Point>, min: Float): Point? {
    for (p in points) {
        if (p.length() > min) { return p }
    }
    return null
}

val found = firstLong([Point(1.0, 1.0), Point(3.0, 4.0)], 2.0)
println(when {
    found == null -> "nothing long enough"
    else -> "${found} has length ${found.length()}"
})

The compiler is written in Keal

Lexer, parser, checker and C backend — each held byte-for-byte against its Rust oracle, and reproducing its own source.

Everything flows into Any, Any flows into nothing

Inference everywhere, narrowing that survives and, early returns, even implies.

Six languages, one file

C, C++, Rust, Go, Java and Kotlin all answer from a single Keal program.

Deterministic memory, no collector

An object dies when its last reference does, at a statement boundary you can point at, and deinit runs there. No pause, no generation, no lifetime annotation.

One editor server, every editor

keal lsp gives VS Code, Neovim, Helix and Zed the same thing: errors as you type, hover types, go to definition, rename. It reuses the compiler rather than modelling the language twice.

One file, six languages.

The four native ones meet Keal on the C ABI its binaries already speak — no runtime, no conversion layer. Java and Kotlin go through a gateway module, written in Keal.

CC++RustGoJavaKotlin

84× faster natively — with the same guarantees.

The tree-walking interpreter is the specification. The bytecode VM is the default. keal build compiles through C11 to a real executable. The suite runs every program on all three and demands byte-identical output.

native
bytecode VM
84×
tree-walker
220×

fib(35) — the same program, on all three engines.

Written in Keal

Three programs that use the language for what it is for, and report what they find. Each has found defects the suite could not: a map that looped after being emptied twice, a record that printed itself with a pointer test for a value that is not one, a type the native backend could not compile at all.

kealeb

A web framework — routing, sessions, SQLite, live pages.

keal-view

A GUI framework — rasteriser, TrueType, layout, widgets.

KealSql

A language for PostgreSQL schemas and queries, compiled to SQL.

Kealler

The IDE — written in Keal, drawn by keal-view.

Running in a minute.

shell
git clone https://github.com/geneacta/keal
cd keal
cargo build --release
./bootstrap.sh

Then take the tour — 30 minutes, every snippet runs →