The fun way to solve
hard problems
Systems-level power with none of the ceremony. Memory safety, green threads, and a type system that stays out of your way — so you can focus on what matters.
pub type Point struct {
x f64
y f64
}
fun (p @Point) length() f64 {
return math.sqrt(p.x * p.x + p.y * p.y)
}
fun (p &Point) translate(dx f64, dy f64) {
p.x = p.x + dx
p.y = p.y + dy
}
pub fun main() !void {
p := Point{ x: 3.0, y: 4.0 }
p.translate(1.0, -1.0)
content := try read_file("config.txt") :: "loading config"
fmt.println(content)
} Why Run?
Powerful tools, none of the complexity.
Memory Safety
Generational references catch use-after-free at runtime. No GC pauses, no borrow checker complexity.
Green Threads
Lightweight concurrency with `run`. Spawn thousands of tasks scheduled across OS threads.
Error Unions
Errors are values. Propagate with `try`, attach context with `::`, match with `switch`.
Sum Types
First-class algebraic types with exhaustive pattern matching via `switch`.
No Generics
Built-in collections have language-level support. Simple type system, clear error messages.
Deterministic Destruction
Owning references auto-free on scope exit. Predictable, zero-overhead resource cleanup.
See it in action
Clean syntax, powerful features, zero ceremony.
package mainuse "fmt"use "time"fun say(msg: string) { for i in 0..3 { time.sleep(100) fmt.println(msg) }}pub fun main() { run say("hello") say("world")}How Run compares
The sweet spot between simplicity and control.
Memory Safety
Generational refs
Garbage collector
Borrow checker
Manual
Concurrency
Green threads
Goroutines
async / Tokio
async
Generics
None (built-in collections)
Yes
Yes
Comptime
Error Handling
Error unions + context
Multiple returns
Result<T, E>
Error unions
Learning Curve
Low
Low
High
Medium
| Run | Go | Rust | Zig | |
|---|---|---|---|---|
| Memory Safety | Generational refs | Garbage collector | Borrow checker | Manual |
| Concurrency | Green threads | Goroutines | async / Tokio | async |
| Generics | None (built-in collections) | Yes | Yes | Comptime |
| Error Handling | Error unions + context | Multiple returns | Result<T, E> | Error unions |
| Learning Curve | Low | Low | High | Medium |
Get started
Install Run in seconds on macOS, Linux, or build from source.
# Homebrew
$ brew install marsolab/tap/run
# Or via install script
$ curl -fsSL https://runlang.dev/install.sh | sh # Install script
$ curl -fsSL https://runlang.dev/install.sh | sh
# Or via apt (Debian/Ubuntu)
$ sudo dpkg -i run_<version>_amd64.deb $ git clone https://github.com/marsolab/runlang.git
$ cd runlang
$ zig build
$ zig build run -- run hello.run
Hello, World! Requires Zig 0.15 or later.
Compiler status
Run is in active development. Here's where we stand.
This is a great time to get involved.