Skip to content
Chloë Strainge edited this page Oct 15, 2026 · 3 revisions

Welcome to Shelly

Shelly is a Unix shell with a typed scripting language. Run familiar programs, then use functions, collections, and application types to work with their data. A pipeline can carry a String, an Integer, or a whole record between Shelly stages; external programs still communicate through ordinary byte streams.

Start with a pipeline

Suppose a game awards three points for each completed challenge:

let $completed = [2, 5, 8]
let $points: [Integer]
$completed | ($ * 3) | $points
echo $points...
6 15 24

The source supplies one item at a time. $ is that item's value, ($ * 3) is a stage expression, and the final variable collects the answers. The source and answers are typed values throughout. Pipelines explains how this extends to processes, conversions, and streams.

Pipeline splits let the same upstream stream feed several paths. Aligned connectors show which stage supplies each branch, so you can transform or collect each path independently without running the source again.

Choose a route

I want to… Start here
Try Shelly in a few minutes Quick start
Run scripts or use it as my shell Running Shelly
Understand the language as a whole Language map
Process structured data Arrays, Hash maps, Pipelines
Send one stream down several paths Pipeline splits
Build reusable application code Functions, Structs, Modules
Work with files and services Bytes and I/O, JSON, HTTP
Customize my terminal REPL, Prompts and widgets
Find a complete small example Recipes
Look up punctuation or a declaration Syntax reference

A few conventions

Variables begin with $. Commands take space-separated arguments. Braces contain statements, and # starts a comment. Use echo to show a value: entering an expression alone does not automatically print it.

Type names are case-sensitive: Integer, Float, String, and any. Numeric annotations widen Integers to Float when required. Distinct named types give application concepts their own identities.

let $answer = calculate calls calculate. Quote text to keep it as text. A backtick creates a checked callable reference without calling it.

Project and documentation

Shelly runs on Linux, WSL, and macOS. Its core language is implemented; the project is in stabilization while the prototype's internals are reviewed for future cleanup. These pages describe the current language and public library interfaces.

Source and releases · Installation and execution modes · VS Code support


Related: Language map · Quick start

Clone this wiki locally