June 2025 ยท 8 min read

Introducing Lateralus

We built a programming language where data flows left to right, errors are handled without exceptions, and the compiler ships with zero dependencies. Here's why, and how you can try it right now.

Try Lateralus in your browser

No install needed. Write code, hit Run, see results instantly.

โ–ถ Open Playground GitHub

Why another language?

Every modern language has functions that compose. But in practice, composing them reads inside-out:

// What you write in most languages
sort(filter(map(data, transform), predicate), comparator)

You read sort first, but it runs last. Your eyes jump right-to-left, inside-to-outside, hunting for the data source. This gets worse with every nesting level.

Lateralus inverts this. The pipeline operator |> makes data flow visible and linear:

// What you write in Lateralus
data
    |> map(transform)
    |> filter(predicate)
    |> sort(comparator)

Read top-to-bottom, left-to-right. The data source is obvious. Every transformation step is on its own line. You can comment out a single step without rewriting the expression. This isn't just syntax sugar โ€” it changes how you think about data processing.

What does Lateralus look like?

Data pipelines

let report = transactions
    |> filter(|t| t.amount > 20.0)
    |> group_by(|t| t.category)
    |> map_entries(|cat, txns| {
        let total = txns |> map(|t| t.amount) |> sum()
        (cat, total)
    })
    |> sort_by(|e| e.1, descending)

Pattern matching with guards

fn describe(shape: Shape) -> String {
    match shape {
        Circle(r) if r > 100.0 => "Large circle",
        Circle(r)                => "Circle (r={r})",
        Rect(w, h) if w == h      => "Square ({w}x{h})",
        Rect(w, h)                => "Rectangle ({w}x{h})",
    }
}

Async concurrency

async fn fetch_all(urls: [String]) -> [Response] {
    urls
        |> map(|url| spawn { http::get(url) |> await })
        |> await_all()
}

Error handling (no exceptions)

try {
    let config = parse_config("app.conf")?
    println("Loaded: {config.host}:{config.port}")
} recover err {
    println("Failed: {err}")
} ensure {
    cleanup()
}

What's in the box

|>

Pipeline Operator

First-class |> chains. Data flows left to right, always.

๐Ÿ”€

Pattern Matching

Exhaustive match on enums, structs, tuples, and literals โ€” with guards.

โšก

Async / Await

Lightweight tasks with spawn, await, and await_all.

๐Ÿ›ก๏ธ

try / recover / ensure

Result-based errors โ€” no exceptions, no stack unwinding.

๐Ÿ“ฆ

Zero Dependencies

pip install lateralus-lang and you're running. Nothing else needed.

๐Ÿงฉ

VS Code Extension

Syntax highlighting, snippets, bracket matching โ€” on the marketplace now.

How to get started

Option 1: Try in your browser (fastest)

Open the Lateralus Playground. Pick an example, hit Run, edit the code. No signup, no install.

Option 2: Install locally

# Install via pip
pip install lateralus-lang

# Create a file
echo 'import std::io

fn main() {
    "hello" |> println()
}' > hello.ltl

# Run it
lateralus run hello.ltl

Option 3: VS Code Extension

Search "Lateralus" in the VS Code marketplace, or install directly:

code --install-extension lateralus.lateralus-lang

The ecosystem

Lateralus isn't just a language โ€” it's a full ecosystem:

We need testers

Lateralus is young and we want feedback from real developers. Here's how you can help:

Ready to try it?

Playground. Zero install. 30 seconds to your first pipeline.

โ–ถ Open Playground Star on GitHub

Getting started

Installing Lateralus takes 30 seconds on any platform:

# Linux / macOS
curl -sSf https://lateralus.dev/install.sh | sh

# Windows
iwr -useb https://lateralus.dev/install.ps1 | iex

# Verify
lateralus --version
# lateralus 0.5.0 (c99 backend, release)

The installer puts a single binary in ~/.lateralus/bin and adds it to your PATH. No runtime dependencies, no virtual environments, no Docker containers. Uninstall by deleting the directory.

Your first pipeline

// hello.ltl โ€” your first Lateralus program
let message = "Hello from Lateralus!"
    |> to_upper()
    |> replace("LATERALUS", "the pipeline language")
    |> println()

// Compile and run:
// $ lateralus run hello.ltl
// HELLO FROM THE PIPELINE LANGUAGE!

If you can read the code, you already understand Lateralus. Data enters from the left, flows right through transformations, and exits. That's the entire programming model.

Lateralus is built by bad-antics. Follow development on GitHub or try the playground.