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.
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.
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"?
| Step | son | tmuxp |
|---|---|---|
| Install the tool | brew install (single binary) | pip install tmuxp (Python required) |
| Add a new project | Automatic (just clone it) | Write a YAML config file |
| Open a workspace | son → fuzzy search → Enter | tmuxp load project-name |
| Change workspace layout | Edit .son.toml (optional) | Edit YAML file |
| Find an old project | Fuzzy search (frecency-sorted) | Remember the YAML file name |
| Remove a project | Nothing (just delete the repo) | Delete the YAML config file |
| Runtime dependencies | None (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
| Feature | son | tmuxp |
|---|---|---|
| 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.
Install son
A single binary, installed via Homebrew or Go. No Python, no pip, no virtual environments.
$ brew install abdussamet032/tap/sonRun 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.
$ sonOptionally 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 hooksKeep 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 sideWhat 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