September 2023 · 6 min read

Why Another Language?

There are hundreds of programming languages. Did we really need another one? Yes. Here's why.

The gap

I wanted a language that was:

No existing language hits all four. Rust is compiled and typed but complex. Go is simple but has no generics (until recently) and no pipelines. Elixir has pipes but is dynamically typed and runs on BEAM. F# has pipes and types but is tied to .NET.

The bet

Lateralus bets that |> isn't just nice syntax — it's a fundamentally better way to express data transformation. When every function, every library, every tool is designed around forward data flow, you get an ecosystem where composition is the default.

What makes it different

Is it production-ready?

Not yet. We're at v0.5.0. But it's real enough to write an OS in, build security tools with, and run in your browser. If that interests you, try the playground.

The shell script problem

Every security tool outputs text. Every automation script parses text. This is the fundamental problem Lateralus solves. Consider a typical pentest workflow in Bash:

# Bash: fragile text parsing everywhere
nmap -sV 10.0.0.0/24 -oG - | grep "open" | awk '{print $2}' | sort -u > hosts.txt
for host in $(cat hosts.txt); do
    nikto -h $host -output nikto-$host.txt 2>/dev/null
    # Hope the output format hasn't changed between versions
done
cat nikto-*.txt | grep "+ " | sort | uniq -c | sort -rn > findings.txt

This works until it doesn't. Nmap changes its output format. Grep captures a false positive. Awk splits on the wrong field. And when it fails, the error is silent — you get wrong results, not an error message.

The same workflow in Lateralus

// Lateralus: structured data, no text parsing
let findings = "10.0.0.0/24"
    |> nmap_scan(flags: "-sV")
    |> filter(|h| h.ports |> any(|p| p.state == Open))
    |> flat_map(|h| nikto_scan(h.ip))
    |> sort_by(|f| f.severity, descending)
    |> deduplicate_by(|f| f.id)

findings |> to_report("pentest-findings.pdf")

Every intermediate value is typed. nmap_scan returns Vec<Host>, not a string. nikto_scan returns Vec<Finding>. If a tool's output format changes, the wrapper fails with a clear parse error, not a silent wrong result.

Why not Python?

Python is the most common automation language in security. We love Python. But for tool orchestration, it has real limitations:

Why not Rust?

Rust is excellent for building security tools. But it's not ideal for scripting quick automation:

Lateralus isn't replacing Rust. It's filling the gap between "bash script" and "compiled Rust binary" for the 80% of security automation that needs to be fast enough, safe enough, and written in 10 minutes.

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