keepane.
Open source

Panes that keep running, and talk to each other.

keepane is a terminal multiplexer. The programs in its panes keep running after the terminal connection closes, and panes can pass messages to each other through inboxes. The usual tmux keys, commands and config file keep working, h j k l included, and PowerShell, cmd and WSL run inside panes with every keystroke intact.

MIT · Windows, Linux, macOS · one small binary · formerly wmux

A keepane session: splitting panes, typing into all of them with set sync, zooming, the pane menu, the window picker, detaching and attaching again
One session, recorded end to end: split, type into every pane at once, move, zoom, the pane menu, switch windows, detach, attach again.
1file to install
0Cygwin / WSL needed
350automated tests
MITlicensed
01

Send work between panes

Give a pane a name and a work mode, and send it messages: a shell runs them at its prompt, an agent gets them when it is free. C-b v shows every pane and its inbox.

A command sent to the pane named builder runs there with its envelope as a comment; its record says done and keeps the output; the dashboard shows the panes, an agent's inbox and the tasks in panels, puts a message first and reads it in full
A command sent to the pane named builder runs there, its source in a comment; its record says done and keeps what it printed. Then the dashboard, in panels: the panes, an agent's inbox, the tasks, and a message put first and read in full.
Left, the command running with its envelope as a comment; right, trace-message showing it delivered, done and its output
The dashboard: panes, an agent's inbox and the tasks on the left, a message read in full, field by field, on the right
02

Close the terminal, the programs keep running

C-b d detaches and the programs keep running in the background. keepane attach picks the session up again, from any terminal window.

Back at a plain shell after detaching
The same layout after attaching again
03

What ran, when, and how long

C-b C-t writes each command's start time, duration and result at the end of its line. What panes print is kept a day at a time, and C-b / opens any day.

Command times appear at the end of each command's line, the history picker lists pane positions and days, a day opens in a pager, and a pane closed by mistake comes back with C-b u
Three commands with their times, one of them failing; the history picker and a day in the pager; a pane closed by mistake, back with C-b u.
Three commands, each with its start time, duration and a tick or a cross at the right end of its line
A day of history in the pager popup, each command after a grey line with its time
04

The job that finished while you were elsewhere

monitor-activity marks a window you are not looking at with # when it prints, ! on a bell, and ~ when it has been silent too long. C-b M-n jumps to the next marked window.

A background job finishes in another window, the status line marks it, C-b M-n jumps there, a failing command leaves its pane in place, and a popup shows the window list
A deploy finishes in window 1 while window 0 carries on; the flag appears in the status line and in list-windows; a command that fails leaves its pane and its exit code behind.
05

Panes, the way you already know

C-b % splits left and right, C-b " top and bottom. Move with the vim keys or the arrows, and keep pressing: movement and resizing repeat without the prefix.

Three panes: a shell on the left, keepane list-panes top right, a build loop bottom right
The same three panes after one echo typed with synchronize-panes on: the line ran in every pane, S on the status line
06

Full screen, a list, or a menu

C-b z blows the current pane up to the whole window and back. C-b w opens the tree of sessions and windows: j k to move, g G for top and bottom, digits to jump, Enter to go. C-b > puts the pane commands in a menu, so nothing has to be remembered.

A zoomed pane filling the window, Z on the status line
The choose-tree picker listing a session and its windows
The pane menu: split, swap, break out, zoom, respawn, kill, each with a letter
A popup box over the window running a command, with the pane behind it still visible
07

Your panes, on your phone

Start keepane web before you walk away from a long build. It prints a QR code; scan it on the same Wi-Fi and the phone's browser lists every pane, shows any of them as it appears on screen, and lets you type into it. Nothing to install on the phone.

keepane web on a phone: the list of panes with the program each runs, and one pane showing a coloured git log with each command's time in a column on the left, with a row of keys and a box to type in
08

Your .tmux.conf, imported once

The same command names on the command line, in the : prompt and in the config file. keepane import-config brings what it can use from your tmux config into its own, once, the rest commented out with why.

set -g prefix C-a
set -g default-shell wsl          # pwsh (default), powershell, wsl, cmd, or a path
set -g mouse on
set -g repeat-time 500            # how long a `bind -r` key keeps working

set -g monitor-activity on        # mark a background window that prints
set -g remain-on-exit on          # keep a pane whose program died

bind -r h select-pane -L          # -r: press h h h after one prefix
bind | split-window -h
bind -n M-Right next-window       # -n: no prefix at all
set -g status-right "#{pane_current_path} %H:%M"
09

Git branch, CPU and memory on the status line

The default status line shows your git branch, the pane's directory, CPU and memory use, and the battery if there is one. keepane reads these itself once a second without starting any helper process. You can replace the line with your own or turn it off.

[work] 0:editor* 1:build 2:logs     master | ~\Documents\dfine\keepane | CPU 9% MEM 65% | 11:45
10

Install

Linux and macOS

A .tar.gz for each (static on Linux; Apple silicon and Intel). Unpack it and put keepane on your PATH.

Get it

Homebrew

macOS and Linux, from the release's own builds; brew upgrade keepane takes a new version.

brew install newdee/tap/keepane

Windows installer

The .msi puts keepane in Program Files, on the system PATH, and in "Apps & features".

Get it

Windows portable

The .zip is the same single exe. Unzip it anywhere and run it.

Get it

Scoop

The manifest in the repository installs the zip and follows releases.

scoop install https://raw.githubusercontent.com/newdee/keepane/master/packaging/scoop/keepane.json

From source

cargo install --git \
  https://github.com/newdee/keepane --locked

Try it on your next long build.