Signls
August 7, 2026 · View on GitHub
: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.

Installation
Supported platforms
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).
Quick-install
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.
Homebrew (macOS & Linux)
brew tap emprcl/tap
brew trust emprcl/tap
brew install signls
Scoop (Windows)
scoop bucket add emprcl https://github.com/emprcl/scoop-bucket
scoop install signls
Manual installation
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
Build it yourself
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
Usage
# Run signls
./signls
# Display current version
./signls --version
Hit ? to see all keybindings. esc to quit.
Files location
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
Keyboard mapping
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
Default keyboard mapping
For qwerty keyboards, here's the default mapping:
spaceplay or stoptabshow bank1...9add 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 parameterbackspaceremove selected nodes (or grid in bank)enteredit selected nodesmtoggle selected nodes muteMmute/unmute all selected nodes/trigger selected node-=modify tempo';modify root note":modify scalectrl+cxvcopy, cut, paste selectionctrl+zyundo, redoescapeexit parameter edit or bank selectionf2edit midi configurationf10fit grid to window?show helpctrl+qquit
macOS keyboard mapping
macOS and some terminals reserve a few keys the default layout uses — ctrl+arrows (Mission Control / Spaces), alt+←/→ (word navigation), and the f2/f10 function-key row. Here's the qwerty-mac mapping (the azerty-mac layout applies the same remaps over the azerty symbols):
spaceplay or stoptabshow bank1...9add nodes↑↓←→move cursoralt+shift+↑↓←→multiple selection (or modify alt parameter mode in edit mode)shift+↑↓←→modify selected node direction (modify parameter or alt parameter value).text edit mode for selected parameterbackspaceremove selected nodes (or grid in bank)enteredit selected nodesmtoggle selected nodes muteMmute/unmute all selected nodes/trigger selected node-=modify tempo';modify root note":modify scalectrl+cxvcopy, cut, paste selectionctrl+zyundo, redoescapeexit parameter edit or bank selectioncedit midi configurationffit grid to window?show helpctrl+qquit
Themes
Signls ships with a few color themes. Pick one with the --theme flag (your choice is saved to config.json):
./signls --theme default
./signls --theme mono # black & white
./signls --theme pink # white & pink
You can also customize the colors: add a palette block under theme in your config.json and override only the keys you care about — anything you leave out falls back to the selected preset.
{
"theme": {
"name": "default",
"palette": {
"cursor": "205",
"gridBackground": { "light": "255", "dark": "232" },
"nodes": { "bang": "9", "dice": "12" }
}
}
}
Color values are ANSI codes ("0"–"255") or hex strings ("#ff0088"). Use a { "light": ..., "dark": ... } object for a color that should adapt to the terminal background. See the user manual for the full list of palette keys.
Bank management
Each 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.
Acknowledgments
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