Early Access · v0.1

ML types.
Actor concurrency.
No GC Pauses.

March is a statically-typed functional language: actors and message passing from the BEAM, algebraic data types from ML, compiled to native binaries through LLVM. Perceus reference counting with in-place reuse means no garbage collector and no pauses, at Rust-like performance.

The right ideas, done right.

Performance

Zero-allocation recursive transforms

FBIP rewrites uniquely-owned data in place, so transforms like this allocate nothing on the reuse path. The functional-style rewrite is automatic; no unsafe code required.

See benchmarks →

Benchmark

tree-transform(depth=20, 100 passes)

After pass 1, March allocates nothing — every node rewritten in-place. 7.5× faster than OCaml. 19× faster than Rust. Apple M-series, --opt 2.

LanguageMedianAllocs/pass
Elixir (BEAM)2580 ms2M
OCaml (ocamlopt)3825 ms2M
Rust (rustc -O)9977 ms2M
March (FBIP)513 ms0 ✓

← Back

Concurrency

Actor model, typed and isolated

Share-nothing message-passing actors with supervision trees. Accidental shared mutable state is a compile error, not a runtime bug.

Type System

Hindley-Milner inference, ADTs, exhaustive patterns

Types flow without annotation boilerplate. The compiler enforces exhaustive pattern matching — a missing case is a compile error. Generics are monomorphized, no boxing overhead.

Memory

Deterministic memory, no collector.

Perceus reference counting reclaims memory the instant it's no longer used, at a point the compiler picks. Predictable latency, no collector, no pauses. Linear types guarantee file handles, sockets, and connections can't leak or double-free.

See how March feels to write.

Full playground — no install needed ↗
march — interactive
March REPL — type an expression and press Enter.
march>

Get started in minutes

One command installs on macOS and Linux.

1 — Install
2 — Open the interpreter