Live-code music in your terminal.

rustel is a native engine for the Strudel pattern language. Write in Studio, or keep your own editor. MIDI, OSC, serial, webcam, and gamepad are built in. One binary. No browser. No server.

Already on strudel.cc? Bring your patterns here. Almost everything from Strudel works. The compatibility docs list the few missing or inactive features.

Install

curl -L https://rustel.cc/install | bash && rustelup

Apple Silicon. Open a new terminal, then run rustel studio.

curl -L https://rustel.cc/install | bash && rustelup

x86_64. Open a new terminal, then run rustel studio.

irm https://rustel.cc/install.ps1 | iex

x86_64, in PowerShell. Open a new terminal, then run rustelup. Then run rustel studio.

rustelup installs into ~/.rustel/bin. On Windows that folder is %USERPROFILE%\.rustel\bin. Run rustelup again to refresh, or rustelup --version v0.3.0 to pin a build. To build from source, follow the readme.

What you get

The studio

Press Ctrl+Enter to update. Same chord as strudel.cc. The piano roll and the scope follow the pattern.
Ctrl+Enter
Update and play. Strudel's update chord. A bad update leaves the last good score playing. Ctrl+. stops.
keyboard
Everything is reachable from the keyboard. The mouse works too. Keyboard-only is the easier grip in a live set.
beat
The sounding step lights in your source. The header dot pulses on the downbeat.
Ctrl+D
Open the reference. Every function in the language, inside the editor.
visuals
Piano roll, punchcard, scope, and spectrum as rows in the editor, plus a mixer and a minimap.
editor
Modeless. Selection, undo, redo, bracketed paste. Saves stay off the audio thread.

The command line

Run the engine from a shell. Watch a file. Bounce a render. Query a cycle. Open Studio.

# play and reload on each stable save
$ rustel song.strudel --watch

# bounce a render
$ rustel render song.strudel -o take.wav --format scalar-wav --duration 60

# check a score without sound
$ rustel check song.strudel

# replay a jam from its session tape
$ rustel replay tonight.rustel-session

# list audio and MIDI devices
$ rustel devices

# print one cycle as JSON
$ rustel query -e 'note("c e g").s("piano")' --json

# install shell completion
$ rustel completions --install

# open Studio on your last set (creates one on first use)
$ rustel studio

# open a score file (starter score if the path is new)
$ rustel studio song.strudel

# open a set folder
$ rustel studio set/

Neovim

The rustel-neovim plugin plays the buffer you have open. Syntax colors the score. Active notes light up as they sound. Scope, piano roll, spectrum, and spiral draw in the buffer.

Neovim 0.9 or newer, and rustel on your PATH. Ctrl+Enter updates. Ctrl+. stops

Under the hood

Rust schedules patterns and runs DSP. Sandboxed QuickJS evaluates Strudel JavaScript. Ratatui draws Studio. DSP kernels pick SIMD paths from your CPU for low CPU and memory use. rustel doctor and Studio's About panel show the active kernels.

Terminal setup and known limits

The Studio guide covers terminal profiles, keyboard fallbacks, and graphics modes.