Skip to content

subinium/ezpn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ezpn demo

ezpn

Terminal panes, instantly.
Zero-config terminal multiplexer with session persistence and tmux-compatible keys.

crates.io MIT License CI Platform

English | 한국어 | 日本語 | 中文 | Español | Français


Why ezpn?

$ ezpn                # split your terminal, instantly
$ ezpn 2 3            # 2x3 grid of shells
$ ezpn -l dev         # preset layout

No config files, no setup, no learning curve. Sessions persist in the background — Ctrl+B d to detach, ezpn a to come back.

In a project, drop .ezpn.toml in your repo and run ezpn — everyone gets the same workspace:

[workspace]
layout = "7:3/1:1"

[[pane]]
name = "editor"
command = "nvim ."

[[pane]]
name = "server"
command = "npm run dev"
restart = "on_failure"

[[pane]]
name = "tests"
command = "npm test -- --watch"

[[pane]]
name = "logs"
command = "tail -f logs/app.log"
$ ezpn   # reads .ezpn.toml, starts everything

No tmuxinator. No YAML. Just a TOML file in your repo.

Install

cargo install ezpn
Build from source
git clone https://github.com/subinium/ezpn
cd ezpn && cargo install --path .

Quick Start

ezpn                  # 2 panes (or load .ezpn.toml if present)
ezpn 2 3              # 2x3 grid
ezpn -l dev           # Layout preset (dev, monitor, quad, stack, trio...)
ezpn -e 'cmd1' -e 'cmd2'   # Per-pane commands

Sessions

Ctrl+B d               # Detach (session keeps running)
ezpn a                 # Reattach to most recent session
ezpn a myproject       # Reattach by name
ezpn ls                # List active sessions
ezpn kill myproject    # Kill a session

Tabs

Ctrl+B c               # New tab
Ctrl+B n / p           # Next / previous tab
Ctrl+B 0-9             # Jump to tab

All tmux keys work — Ctrl+B % to split, Ctrl+B x to close, Ctrl+B [ for copy mode.

Features

Zero config Works out of the box. No rc files needed.
Layout presets dev, ide, monitor, quad, stack, main, trio
Session persistence Detach/attach like tmux. Background daemon keeps processes alive.
Tabs tmux-style windows with tab bar and mouse click switching.
Mouse-first Click to focus, drag to resize, scroll for history, drag to select & copy.
Copy mode Vi keys, visual selection, incremental search, OSC 52 clipboard.
Command palette Ctrl+B : with tmux-compatible commands.
Broadcast mode Type in all panes simultaneously.
Project config .ezpn.toml per project — layout, commands, env vars, auto-restart.
Borderless mode ezpn -b none for maximum screen space.
Kitty keyboard Shift+Enter, Ctrl+Arrow, and modified keys work correctly.
CJK/Unicode Proper width calculation for Korean, Chinese, Japanese, and emoji.

Layout Presets

ezpn -l dev       # 7:3 — main + side
ezpn -l ide       # 7:3/1:1 — editor + sidebar + 2 bottom
ezpn -l monitor   # 1:1:1 — 3 equal columns
ezpn -l quad      # 2x2 grid
ezpn -l stack     # 1/1/1 — 3 stacked rows
ezpn -l main      # 6:4/1 — wide top pair + full bottom
ezpn -l trio      # 1/1:1 — full top + 2 bottom

Custom ratios: ezpn -l '7:3/5:5'

Project Config

Drop .ezpn.toml in your project root and run ezpn. That's it.

Per-pane options: command, cwd, name, env, restart (never/on_failure/always), shell

ezpn init              # Generate .ezpn.toml template
ezpn from Procfile     # Import from Procfile
Global config

~/.config/ezpn/config.toml:

border = rounded        # single | rounded | heavy | double | none
shell = /bin/zsh
scrollback = 10000
status_bar = true
tab_bar = true
prefix = b              # prefix key (Ctrl+<key>)

Keybindings

Direct shortcuts:

Key Action
Ctrl+D Split horizontal
Ctrl+E Split vertical
Ctrl+N Next pane
F2 Equalize sizes

Prefix mode (Ctrl+B, then):

Key Action
% / " Split H / V
o / Arrow Navigate panes
x Close pane
z Zoom toggle
R Resize mode
[ Copy mode
B Broadcast
: Command palette
d Detach session
? Help
Full keybinding reference

Tabs:

Key Action
Ctrl+B c New tab
Ctrl+B n / p Next / previous tab
Ctrl+B 0-9 Jump to tab
Ctrl+B , Rename tab
Ctrl+B & Close tab

Panes:

Key Action
Ctrl+B { / } Swap pane prev / next
Ctrl+B E / Space Equalize
Ctrl+B s Toggle status bar
Ctrl+B q Pane numbers + quick jump

Copy mode (Ctrl+B [):

Key Action
h j k l Move cursor
w / b Next / previous word
0 / $ / ^ Line start / end / first non-blank
g / G Top / bottom of scrollback
Ctrl+U / Ctrl+D Half page up / down
v Character selection
V Line selection
y / Enter Copy and exit
/ / ? Search forward / backward
n / N Next / previous match
q / Esc Exit

Mouse:

Action Effect
Click pane Focus
Double-click Zoom toggle
Click tab Switch tab
Click [x] Close pane
Drag border Resize
Drag text Select + copy
Scroll wheel Scrollback history

macOS note: Alt+Arrow for directional navigation requires Option as Meta (iTerm2: Preferences > Profiles > Keys > Esc+).

Command palette commands

Ctrl+B : opens the command prompt. All tmux aliases are supported.

split / split-window         Split horizontally
split -v                     Split vertically
new-tab / new-window         Create new tab
next-tab / prev-tab          Switch tabs
close-pane / kill-pane       Close active pane
close-tab / kill-window      Close current tab
rename-tab <name>            Rename tab
layout <spec>                Change layout
equalize / even              Equalize pane sizes
zoom                         Toggle zoom
broadcast                    Toggle broadcast mode

ezpn vs. tmux vs. Zellij

tmux Zellij ezpn
Setup .tmux.conf required KDL config Zero config
First use Empty screen Tutorial mode ezpn
Sessions tmux a zellij a ezpn a
Project config tmuxinator (gem) .ezpn.toml built-in
Broadcast :setw synchronize-panes Ctrl+B B
Auto-restart restart = "always"
Kitty keyboard No Yes Yes
Plugin system WASM
Ecosystem Massive (30 years) Growing New

Choose ezpn if you want terminal splits that just work. Choose tmux if you need deep scripting and plugin ecosystem. Choose Zellij if you want a modern UI with WASM plugins.

CLI Reference

ezpn [ROWS COLS]         Start with grid layout
ezpn -l <PRESET>         Start with layout preset
ezpn -e <CMD> [-e ...]   Per-pane commands
ezpn -S <NAME>           Named session
ezpn -b <STYLE>          Border style (single/rounded/heavy/double/none)
ezpn a [NAME]            Attach to session
ezpn ls                  List sessions
ezpn kill [NAME]         Kill session
ezpn rename OLD NEW      Rename session
ezpn init                Generate .ezpn.toml template
ezpn from <FILE>         Import from Procfile

License

MIT

About

simple terminal pane splitting

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages