Skip to content
Manage complex tmux sessions easily
Ruby HTML Shell
Branch: master
Clone or download

Latest commit

ethagnawl Bump tmuxinator to 1.1.4 (#743)
* 1.1.4 - set 1.1.4 release in CHANGELOG; add missing CHANGELOG entry for completion fixes (#737)

* Bump tmuxinator to 1.1.4
Latest commit 52eb56f Dec 29, 2019


Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE Introduce issue templates (#655) Oct 31, 2018
bin changes bootstrap to accept array of args (vs varargs) Jun 7, 2018
completion Fix completion related issues (#737) Dec 26, 2019
lib Bump tmuxinator to 1.1.4 (#743) Dec 29, 2019
spec Correct edge tmux version detection (#729) Oct 13, 2019
.codeclimate.yml disabling bundler audit, since this project does not check in Gemfile… May 20, 2017
.gitignore moves executable bootstrap logic to Tmuxinator::Cli.bootstrap May 27, 2018
.rspec Update to RSpec 3.0. Jun 3, 2014
.rubocop.yml Quiet RuboCop Warnings (#622) May 10, 2018
.travis.yml ruby-2.7.0 - add ruby 2.7.0 to travis test matrix (#741) Dec 26, 2019 Bump tmuxinator to 1.1.4 (#743) Dec 29, 2019 Suggest contributors use 'rake test' Apr 1, 2016
Gemfile Update TravisCI matrix and Gem deps Feb 7, 2017
LICENSE Update copyright notice to 2019 [ci skip] (#675) Jan 13, 2019 Fix completion related issues (#737) Dec 26, 2019
Rakefile fixes cops Nov 28, 2017 update-COC - replace j3rn's email with ethagnawl's in COC (#627) May 26, 2018
tmuxinator.gemspec Upgrade Thor runtime dependency (#742) Dec 28, 2019


Gem Version Build Status Coverage Status Code Climate Dependency Status Gitter

Create and manage tmux sessions easily.



Ruby gems

gem install tmuxinator


brew install tmuxinator

Editor and Shell

tmuxinator uses your shell's default editor for opening files. If you're not sure what that is type:

echo $EDITOR

For me that produces "vim". If you want to change your default editor simply put a line in ~/.bashrc that changes it. Mine looks like this:

export EDITOR='vim'


The recommended version of tmux to use is 1.8 or later, with the exception of 2.5, which is not supported (see issue 536 for details). Your mileage may vary for earlier versions. Refer to the FAQ for any odd behaviour.


Your distribution's package manager may install the completion files in the appropriate location for the completion to load automatically on startup. But, if you installed tmuxinator via Ruby's gem, you'll need to run the following commands to put the completion files where they'll be loaded by your shell.


# wget -O /etc/bash_completion.d/tmuxinator.bash


# wget -O /usr/local/share/zsh/site-functions/_tmuxinator

Note: ZSH's completion files can be put in other locations in your $fpath. Please refer to the manual for more details.


$ wget ~/.config/fish/completions/


A working knowledge of tmux is assumed. You should understand what windows and panes are in tmux. If not please consult the man pages for tmux.

Create a project

Create or edit your projects with:

tmuxinator new [project]

Create or edit a local project where the config file will be stored in the current working directory (in .tmuxinator.yml) instead of the default project configuration file location (e.g. ~/.config/tmuxinator):

tmuxinator new --local [project]

For editing you can also use tmuxinator open [project]. new is aliased to n,open to o, and edit to e. Please note that dots can't be used in project names as tmux uses them internally to delimit between windows and panes. Your default editor ($EDITOR) is used to open the file. If this is a new project you will see this default config:

# ~/.tmuxinator/sample.yml

name: sample
root: ~/

# Optional. tmux socket
# socket_name: foo

# Note that the pre and post options have been deprecated and will be replaced by
# project hooks.

# Project hooks

# Runs on project start, always
# on_project_start: command

# Run on project start, the first time
# on_project_first_start: command

# Run on project start, after the first time
# on_project_restart: command

# Run on project exit ( detaching from tmux session )
# on_project_exit: command

# Run on project stop
# on_project_stop: command

# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions.
# pre_window: rbenv shell 2.0.0-p247

# Pass command line options to tmux. Useful for specifying a different tmux.conf.
# tmux_options: -f ~/.tmux.mac.conf

# Change the command to call tmux.  This can be used by derivatives/wrappers like byobu.
# tmux_command: byobu

# Specifies (by name or index) which window will be selected on project startup. If not set, the first window is used.
# startup_window: logs

  - editor:
      layout: main-vertical
        - vim
        - guard
  - server: bundle exec rails s
  - logs: tail -f log/development.log


The windows option allows the specification of any number of tmux windows. Each window is denoted by a YAML array entry, followed by a name and command to be run.

  - editor: vim

Window specific root

An optional root option can be specified per window:

name: test
root: ~/projects/company

  - small_project:
      root: ~/projects/company/small_project
        - start this
        - start that

This takes precedence over the main root option.


Note that if you wish to use panes, make sure that you do not have . in your project name. tmux uses . to delimit between window and pane indices, and tmuxinator uses the project name in combination with these indices to target the correct pane or window.

Panes are optional and are children of window entries, but unlike windows, they do not need a name. In the following example, the editor window has 2 panes, one running vim, the other guard.

  - editor:
      layout: main-vertical
        - vim
        - guard

The layout setting gets handed down to tmux directly, so you can choose from one of the five standard layouts or specify your own.

Please note the indentation here is deliberate. YAML's indentation rules can be confusing, so if your config isn't working as expected, please check the indentation. For a more detailed explanation of why YAML behaves this way, see this Stack Overflow question.

Note: If you're noticing inconsistencies when using a custom layout it may be due #651. See this comment for a workaround.

Interpreter Managers & Environment Variables

To use tmuxinator with rbenv, RVM, NVM etc, use the pre_window option.

pre_window: rbenv shell 2.0.0-p247

These command(s) will run before any subsequent commands in all panes and windows.

Custom session attachment

You can set tmuxinator to skip auto-attaching to the session by using the attach option.

attach: false

If you want to attach to tmux in a non-standard way (e.g. for a program that makes use of tmux control mode like iTerm2), you can run arbitrary commands by using a project hook:

on_project_exit: tmux -CC attach

Passing directly to send-keys

tmuxinator passes commands directly to send keys. This differs from simply chaining commands together using && or ;, in that tmux will directly send the commands to a shell as if you typed them in. This allows commands to be executed on a remote server over SSH for example.

To support this both the window and pane options can take an array as an argument:

name: sample
root: ~/

  - stats:
    - ssh
    - tail -f /var/log/stats.log
  - logs:
      layout: main-vertical
        - logs:
          - ssh
          - cd /var/logs
          - tail -f development.log


Project files support ERB for reusability across environments. Eg:

root: <%= ENV["MY_CUSTOM_DIR"] %>

You can also pass arguments to your projects, and access them with ERB. Simple arguments are available in an array named @args.


$ tmuxinator start project foo
# ~/.tmuxinator/project.yml

name: project
root: ~/<%= @args[0] %>


You can also pass key-value pairs using the format key=value. These will be available in a hash named @settings.


$ tmuxinator start project workspace=~/workspace/todo
# ~/.tmuxinator/project.yml

name: project
root: ~/<%= @settings["workspace"] %>


Starting a session

This will fire up tmux with all the tabs and panes you configured, start is aliased to s.

tmuxinator start [project] -n [name] -p [project-config]

If you use the optional [name] argument, it will start a new tmux session with the custom name provided. This is to enable reuse of a project without tmux session name collision.

If there is a ./.tmuxinator.yml file in the current working directory but not a named project file in ~/.tmuxinator, tmuxinator will use the local file. This is primarily intended to be used for sharing tmux configurations in complex development environments.

You can provide tmuxinator with a project config file using the optional [project-config] argument (e.g. --project-config=path/to/my-project.yaml or -p path/to/my-project.yaml). This option will override a [project] name (if provided) and a local tmuxinator file (if present).


The shell completion files also include a shorthand alias for tmuxinator that can be used in place of the full name.

mux [command]

Other Commands

Copy an existing project. Aliased to c and cp

tmuxinator copy [existing] [new]

List all the projects you have configured. Aliased to l and ls

tmuxinator list

Remove a project. Aliased to rm

tmuxinator delete [project]

Remove all tmuxinator configs, aliases and scripts. Aliased to i

tmuxinator implode

Examines your environment and identifies problems with your configuration

tmuxinator doctor

Shows tmuxinator's help. Aliased to h

tmuxinator help

Shows the shell commands that get executed for a project

tmuxinator debug [project]

Shows tmuxinator's version.

tmuxinator version

Project Configuration Location

Using environment variables, it's possible to define which directory tmuxinator will use when creating or searching for project config files. (See PR #511.)

Tmuxinator will attempt to use the following locations (in this order) when creating or searching for existing project configuration files:

  • $XDG_CONFIG_HOME/tmuxinator
  • ~/.tmuxinator


Window names are not displaying properly?

Add export DISABLE_AUTO_TITLE=true to your .zshrc or .bashrc


To contribute, please read the contributing guide.


Copyright (c) 2010-2019 Allen Bargi, Christopher Chow. See LICENSE for further details.

You can’t perform that action at this time.