tmuxp alternative

son vs tmuxp:
YAML Sessions vs Recent Repo Launcher

tmuxp is a Python-based tmux session manager that loads workspaces from YAML or JSON files. son takes a different approach: it discovers your projects automatically, ranks them by usage, and opens workspaces with zero config files.

YAML sessions vs zero-config

The core philosophy differs fundamentally. tmuxp asks you to describe your workspace upfront. son figures it out automatically.

tmuxp: define everything in YAML

With tmuxp, you create a YAML file for each project that specifies the session name, windows, panes, working directories, and commands. This is powerful but requires upfront effort for every new project.

# ~/.tmuxp/api.yaml
session_name: api
start_directory: ~/projects/api
windows:
- window_name: editor
panes:
- nvim .
- window_name: server
panes:
- npm run dev
- npm test -- --watch

Repeat for every project. Update when structure changes.

son: discover and launch

With son, you run one command. son scans your dev directories, finds all your projects, ranks them by frecency, and lets you pick one with fuzzy search. Your workspace opens immediately with a smart default layout.

~
$ son
# fuzzy search appears...
# pick a project...
# workspace opens in 0.3s
Workspace ready.

Works for every project. No files to create or maintain.

Setup cost comparison

How much work does it take to get from "I cloned a new repo" to "I have a full workspace open"?

Stepsontmuxp
Install the toolbrew install (single binary)pip install tmuxp (Python required)
Add a new projectAutomatic (just clone it)Write a YAML config file
Open a workspaceson → fuzzy search → Entertmuxp load project-name
Change workspace layoutEdit .son.toml (optional)Edit YAML file
Find an old projectFuzzy search (frecency-sorted)Remember the YAML file name
Remove a projectNothing (just delete the repo)Delete the YAML config file
Runtime dependenciesNone (Go binary)Python + libtmux + tmux

The math

If you work on 20 projects, tmuxp requires 20 YAML files — one for each project. When project structures change, you update those files. With son, you have zero config files. Every project is discovered automatically. Over a year of active development across multiple repos, son saves hours of config maintenance.

Feature comparison

Featuresontmuxp
Zero-config setup
Auto project discovery
Frecency sorting
Fuzzy search (fzf)
iTerm2 support
WezTerm support
tmux support
Custom split layouts
YAML/JSON session files
Editor integration
Startup hooks
Session freezing/export
Named windows
Pane dimension control
Single binary (no runtime)
Python API

Migrating from tmuxp to son

The migration is simple — mostly because son requires no config. Here's the step-by-step process.

01

Install son

A single binary, installed via Homebrew or Go. No Python, no pip, no virtual environments.

$ brew install abdussamet032/tap/son
02

Run son — your projects are already there

son automatically scans your development directories and finds every git repo. No need to recreate YAML files. Just run son and see your projects listed.

$ son
03

Optionally add .son.toml for startup hooks

If your tmuxp YAML had specific startup commands (dev server, test watcher), add them to a .son.toml file in your project root. This is the only config son ever needs, and it's entirely optional.

$ # only if you need startup hooks
04

Keep tmuxp for edge cases

son and tmuxp can coexist. If you have projects with complex multi-window tmux layouts that need exact pane sizing, keep those tmuxp YAML files. Use son for everything else.

$ # both tools work side by side

What about tmuxp's session freeze/export?

tmuxp can export your current tmux session to a YAML file with tmuxp freeze. son does not have this feature because it takes the opposite approach: rather than capturing and replaying sessions, son creates fresh workspaces on demand. If you rely heavily on session freezing, tmuxp is the better choice for that specific workflow.

Zero YAML. Zero setup. Full workspaces.

Stop writing config files. Start launching workspaces. Install son in one command.

$ brew install abdussamet032/tap/son