Systems programming,
without the GC
Ingle is a statically-typed, brace-delimited language in the lineage of C, C#, and Rust. Memory-safe without a garbage collector. Fast to compile. Unusually predictable for both humans and language models.
Rust proved the destination is right. Ingle shortens the road — with structured concurrency, no function coloring, and verification built into the language.
fn main() -> int {
println("Hello, Ingle!")
return 0
}
// The contract is the spec; the body must satisfy it.
fn gcd(a: int, b: int) -> int
requires a > 0
requires b > 0
ensures result > 0
ensures a % result == 0
ensures b % result == 0
{
var x = a, y = b
loop {
if y == 0 { return x }
let t = x % y; x = y; y = t
}
}
// Structured concurrency — no async/sync split.
nursery {
spawn dispatch(jobs)
spawn worker(jobs, results)
spawn worker(jobs, results)
}
// Block exits only when every spawned task finishes.
LLM-first debugging
When a contract breaks, the tape shows exactly where
Executable requires/ensures
contracts emit structured events on the execution tape — machine-readable feedback
for an editor or language model, not just an abort message.
fn half(x: int) -> int
ensures result + result == x
{
return x / 2 // odd x loses remainder
}
fn main() -> int {
return half(7)
}
error[postcondition_failed]:
postcondition failed in 'half'
route: half (line 5) ← main (line 11)
{"event":"contract_violation",
"fn":"half",
"line":5,
"detail":"postcondition failed…",
"stack":[7,3]}
Why Ingle
Memory-safe without a GC
Ownership, move/borrow checking, and deterministic reference counting. No pauses, no reference cycles. Shared data via rc struct and std/slotmap.
A real type system
Generics with bounds, exhaustive pattern matching, Option/Result with ?, interfaces with static and dynamic dispatch.
Structured concurrency
nursery/spawn with typed channels and an M:N scheduler. No function coloring — real stack traces, safe cancellation.
Verification built in
Executable contracts, execution tapes, and a static prover — a closed loop designed for humans and LLMs to debug against.
Two backends, one semantics
Bytecode VM as canonical reference; AST→C for native binaries. Differential tests keep them bit-for-bit identical.
Batteries included
UTF-8 strings, slices, C FFI, explicit-width numerics, stdlib in Ingle (std/http, std/map, …), plus opt-in graphics via Flare.
First-class editor support
inglec --lsp with hover, completion, rename, semantic tokens, inlay hints, signature help, and prover verdicts.
Install
Runs on macOS and Linux (x86_64 and arm64). Requires a C17 compiler and GNU Make; the installer builds from source — no prebuilt releases yet.
Quick install (macOS & Linux)
curl -fsSL https://ingle-lang.org/install.sh | sh
Build from source
git clone https://github.com/ingle-lang/ingle
cd ingle-lang && make && make install
make test
Installs to ~/.ingle.
Run programs with inglec --emit=run file.ig
or compile native binaries with inglec -o out file.ig.
See the README for details.
Editor support
Extensions drive the same in-tree language server — no reimplemented frontend.
Documentation
- What is Ingle? Plain-language overview — and how it differs from Ember.js
- MANIFESTO.md Design philosophy and founding decisions
- Language reference What runs today — grammar, types, semantics
- The Ingle Book Long-form guided tour
- Ingle from the Inside How the compiler works — the pipeline, the AST, the machinery
- Architecture Compiler and toolchain engineering decisions
- Flare Declarative UI over the graphics backend
-
Examples
Sample
.igprograms