Skip to content
Zolo language v0.1.8-alpha MIT

From many ideas, a language of its own.

Static types, fluent composition, and integrated tooling. The same .zolo file runs across the Lua ecosystem, as a native binary, or in WebAssembly.

.zolo effects.zolo
source / output
effect Clock { fn now() -> str }

fn announce(message: str) with Clock -> str {
    let time = perform Clock::now()
    "{time} · {message}"
}

let line = handle announce("build ready") with {
    Clock::now() => "09:42",
}
print(line)
stdout 09:42 · build ready

01 / language

The language in three ideas

Composition reads top to bottom. Safety stays explicit. The toolchain ships together.

01 composition

Pipe Operator |>

Chain transformations like a functional pipeline. No nested callbacks, no temp variables.

"hello"
    |> String.upper()
    |> String.trim()
    |> print()
02 safety

Pattern Matching

Optional types T?, optional chaining ?. and null coalesce ?? eliminate NPEs by design.

let city = user?.address?.city ?? "Unknown"

match result {
    .Ok(value) => value,
    .Err(error) => report(error),
}
03 toolchain

Tooling first

LSP with autocomplete and hover, DAP debugger, formatter, VS Code extension and REPL — all out-of-the-box with no configuration.

zolo run app.zolo
zolo check app.zolo
zolo test
zolo build --release

02 / examples

See it in action

Small, complete programs you can open, change, and run in the browser.

hello.zolo ▶ Playground
let name = "Zolo"
print("Hello, {name}!")
print("Version: {1 + 1}.0")
stdout
Hello, Zolo!
Version: 2.0

03 / architecture

Source .zolo

UTF-8 text · the program you wrote

Architecture
01 source .zolo
02 front-end parse + typeck
03 middle-end ZoloIR
04 backends
VMnativeLLVMwasm-aot

05 / start

Write your first .zolo file.

Start in the browser, then take the same source to the CLI when you are ready.

Global index

Find your way through Zolo

Try an idea

Start here

9 results

9 results

enespt-br