Skip to content
lash logo

Welcome

A dual-grammar shell that bridges shell execution and functional programming.

Run Any Command

All your POSIX commands work out of the box. ls, grep, git — everything you know, unchanged.

Functional Chains

Chain methods onto command output: `ls`.filter("*.d").sort(). No more pipes-to-awk gymnastics.

Turbo Mode

Pipeline optimizer rewrites sort | uniq | head into native operations — no fork/exec overhead.

Smart Errors

Human-friendly error messages with suggestions. Mistype a command? lash offers corrections ranked by your usage.

AI Assistant

Type > at the prompt to ask questions in natural language. Context-aware answers using your current directory and lash syntax.

Built-in Security

Security profiles with Landlock/Seatbelt sandboxing, tamper-evident audit logs (HMAC-SHA256 hash chains), and capability-based permissions.

Typed Templates

Bind a type to a text template. Field set is inferred from the template; constructing the value is type-checked before render. Replaces sed chains in your release scripts.

# Classic pipes work as expected
ls /etc | sort | head -5
# Functional chains make data manipulation readable
`cat users.csv`.drop(1).map(x => x.split(",")[0]).sort().unique()
# Variables with types
let name = "lash"
let count = 42
let items = [1, 2, 3, 4, 5]
# Control flow with modern syntax
for item in items.filter(x => x > 2) {
echo "$item is greater than 2"
}
# Native plugins — drop a .lash file in ~/.lash/plugins/ for instant shortcuts
fn gpsup(...args: [string]) {
git push --set-upstream origin HEAD ...args
}

New to terminals?

Start with Getting Started — no prior experience needed. We explain every concept from scratch.

Power user?

Jump to Tutorials to write your first .lash plugin, define custom completion types, or tune turbo mode.

Developer?

Dive into the Reference for architecture details, the plugin system, LSP, and DAP protocol specs.