:notebook: User Manual • :tv: See it in action
Signls (pronounced signals) is a non-linear, generative midi sequencer designed for music composition and live performance. It's cross-platform (Linux, macOS et Windows) and it runs in the terminal (TUI).
It takes inspiration from Orca and Nodal.
Feel free to open an issue.

Prebuilt binaries are available for the following platforms:
| OS | Architectures |
|---|---|
| Linux | x86-64 (amd64), arm64 |
| macOS | Intel (amd64), Apple Silicon (arm64) |
| Windows | x86-64 (amd64) |
The Linux arm64 build covers the 64-bit Raspberry Pi OS (Raspberry Pi 3 and later).
On Linux or macOS, you can install the latest release with this script:
curl -sSL empr.cl/get/signls | bash
The script downloads the right binary for your system, installs it to ~/.local/bin and adds it to your PATH.
brew tap emprcl/tap
brew trust emprcl/tap
brew install signls
Download the last release for your platform.
Then:
# Extract files
mkdir -p signls && tar -zxvf signls_VERSION_PLATFORM.tar.gz -C signls
cd signls
# Run signls
./signls
You'll need go 1.26.4 minimum. Although you should be able to build it for either linux, macOS or Windows, it has only been tested on linux.
# Linux
sudo apt-get install libasound2-dev
make GOLANG_OS=linux build
# macOS
make GOLANG_OS=darwin build
# Windows
make GOLANG_OS=windows build
# Raspberry Pi OS
sudo apt install libasound2-dev
make GOLANG_OS=linux GOLANG_ARCH=arm64 build
# Run signls
./signls
# Display current version
./signls --version
Hit ? to see all keybindings. esc to quit.
Signls stores its config.json and bank files in your user config directory:
| OS | Location |
|---|---|
| Linux / macOS | ~/.config/emprcl/signls/ (or $XDG_CONFIG_HOME/emprcl/signls/) |
| Windows | %AppData%\emprcl\signls\ |
You can override either with an explicit path using the --config and --bank flags.
Some companion apps that receive MIDI for testing Signls: - Webmidi synths - Enfer (github) works only on linux - QSynth
Keys mapping is fully customizable. After running signls for the first time, a config.json is created in your config directory.
You can edit all the keys inside it.
You can select one of the default keyboard layouts available:
# QWERTY
./signls --keyboard qwerty
# AZERTY
./signls --keyboard azerty
# QWERTY MAC
./signls --keyboard qwerty-mac
# AZERTY MAC
./signls --keyboard azerty-mac
For qwerty keyboards, here's the default mapping:
space play or stoptab show bank1 ... 9 add nodes↑ ↓ ← → move cursorshift+↑ ↓ ← → multiple selection (or modify alt parameter mode in edit mode)ctrl+↑ ↓ ← → modify selected node direction (modify parameter or alt parameter value). text edit mode for selected parameterbackspace remove selected nodes (or grid in bank)enter edit selected nodesm toggle selected nodes muteM mute/unmute all selected nodes/ trigger selected node- = modify tempo' ; modify root note" : modify scalectrl+c x v copy, cut, paste selectionescape exit parameter edit or bank selectionf2 edit midi configurationf10 fit grid to window? show helpctrl+q quitEach time you start Signls, a json file (default: default.json, in your config directory) containing 32 grid slots is loaded.
For selecting a different file, use the --bank flag (relative or absolute path):
./signls --bank my-grids.json
Each time you change grid or quit the program, the current grid is saved to the file.
Signls uses a few awesome packages: - gomidi/midi for all midi communication - charmbracelet/bubbletea as the main TUI framework - charmbracelet/lipgloss for making things beautiful
$ claude mcp add signls \
-- python -m otcore.mcp_server <graph>