A smart (and opinionated) tmux session manager that sets up project-specific sessions automatically.
Think tmuxp but without predefined YAML configuration. Powered by tmuxp.
┌───────────────────────────┬───────────────────────────┐
│1| function main() { │ $ npm run dev │
│2| console.log("Hello"); │ > [email protected] dev │
│3| } │ > vite │
│4| │ │
│5| │ VITE v4.3.9 ready │
│6| │ ➜ localhost:3000/ │
│7| ┌──────────────┐ ├───────────────────────────┤
│8| │ tmux-bro │ │ $ │
│9| └──────────────┘ │ │
│1| │ │
│2| │ │
│ NORMAL • main.js │ │
└───────────────────────────┴───────────────────────────┘
- Fuzzy find your projects with fzf and zoxide
- Automatic workspace detection for npm, pnpm, yarn and Cargo
- Smart session layout based on project type
- Automatically runs
devscript in a pane when available - Handles Python virtual environments
pipx install git+https://github.com/raine/tmux-bro.gitSet up a mapping in tmux configuration that runs tmux-bro in a popup:
bind C-t display-popup -E "tmux-bro"tmux-bro uses two approaches to discover your projects:
-
zoxide (recommended): If you have zoxide installed, tmux-bro will use it to find your accessed directories and feed them to fzf. This leverages your existing navigation habits without requiring additional configuration.
-
Global config (fallback): If zoxide is not available, tmux-bro will look for projects in the directory specified by the
projects_dirsetting in your global config file. Create a config file at~/.config/tmux-bro.yamlwith the following content:projects_dir: "/path/to/your/projects"
Both approaches integrate with fzf to provide a fast fuzzy-search interface for selecting projects.
Hit the tmux popup mapping or run tmux-bro.
This will:
- Open a fuzzy finder to select a project directory
- Detect the workspace type (npm, pnpm, Cargo, or plain)
- Create a tmux session with appropriate layout for the project
Note
tmux-bro is designed to work with zero configuration. The tool aims to intelligently detect your project type and set up appropriate layouts automatically.
EDITORenvironment variable: Specifies your preferred editor (e.g.,vim,nvim, orcode).- Global config file at
~/.config/tmux-bro.yamlwith the following options:projects_dir: Defines the fallback directory for project discovery if zoxide isn't installed. Set this to where you store your projects (e.g.,$HOME/projects).layout: Sets the default tmux layout for all sessions. Valid options includemain-vertical,main-horizontal,tiled,even-horizontal,even-vertical. If not specified,main-verticalis used as the default.main_pane_width: Sets the width of the main pane for vertical layouts (default: "50%").main_pane_height: Sets the height of the main pane for horizontal layouts (default: "50%").
You can override tmux-bro settings on a per-project basis by creating a .tmux-bro.yaml file in your project root:
# override the default 'dev' command for all packages
dev_command: "npm run start:dev"
# override layout and pane dimensions
layout: "main-horizontal"
main_pane_height: "60%"
main_pane_width: "60%"
# package-specific overrides (for workspaces)
packages:
package-name:
dev_command: "npm run custom-dev"If my own needs evolve — or compelling feedback is given — more customization options might be added later. For now, it’s lean and opinionated by design.
When used with a npm monorepo, tmux bro will:
- Create a tmux session named after your repository
- Create separate windows for each package
- In each window, set up:
- Your editor in the main pane
- A dev script running (if the package has one)
- A clean shell
MIT
- workmux — Git worktrees + tmux windows for parallel AI agent workflows
- tmux-file-picker — Pop up fzf in tmux to quickly insert file paths, perfect for AI coding assistants
- tmux-inspect — Inspect objects in tmux popups using jless
