v0.1 One control layer over tmux

Sessions, plugins, and a beautiful UI
for the tmux you already love.

A typed CLI, SQLite-backed persistence, project workspaces, vendored TPM, and a glassy Bootstrap 5 web UI — all wired into one dmux command. No daemon. No magic. No replacement for tmux.

$pip install -e git+https://github.com/davidix/dmux.git#egg=dmux
Pure Python · 0 background processes MIT licensed Vendors TPM · zero setup Tested on macOS & Linux
~/work — dmux
Why dmux

Tmux is great. Living in it should be easier.

dmux is the missing control plane: it doesn't replace tmux, it makes the daily friction disappear.

Sessions vanish on reboot or accidental kill.
Snapshot to SQLite. dmux save captures every session/window/pane (cwd, command, layout). dmux restore rebuilds them — even after a crash.
Per-project layouts re-built from muscle memory.
Project workspaces. .dmux/layout.json per repo root. Walk in, restore, get the same layout you left.
TPM is great, but ~/.tmux.conf is a wall of set -g @plugin.
Plugin manager UI + CLI. Add, install, update, clean, source — without editing config by hand. TPM is vendored: zero setup.
Freed-Wu status-bar templates are dense.
A real wizard. Segment-table editor builds the JIT #{status-left:…} for you and writes it back to plugins.tmux.
Need to drive tmux from CI, hooks, or scripts?
Typed JSON API. /api/v1/sessions, /api/v1/plugins/source, snapshots, layouts — all curl-able.
Features

Everything you wish tmux shipped with.

Built on libtmux, Typer, and Flask. Type-checked, tested, and small enough to read in an afternoon.

Session manager

List, create, attach, rename, kill from one CLI. Smart attach uses switch-client inside tmux, attach outside.

SQLite persistence

dmux save snapshots every session/window/pane to SQLite under ~/.local/share/dmux/. Survives reboots.

Project workspaces

.dmux/layout.json per repo root. Walk into a project, restore, get the same windows and panes you left behind.

Fuzzy navigation

dmux pick jumps to any session, window, or pane via stdlib difflib. No fzf, no extra binaries.

Beautiful web UI

Bootstrap 5, dark/light theme with no-flash init, glassmorphic topbar, live pane mosaic, fuzzy filter. Ships under 1 MB.

TPM, batteries-included

TPM is vendored. dmux plugins bootstrap writes ~/.config/dmux/plugins.tmux and hooks ~/.tmux.conf for you.

Status-bar wizard

Segment-table editor for Freed-Wu/tmux-status-bar. Builds JIT #{status-left:…} templates and writes them back live.

JSON API

Every UI action is a documented endpoint under /api/v1/. Build dashboards, hooks, or shell scripts on top.

Type-checked & tested

Mypy-clean public surface (py.typed) and a 32-test smoke suite covering CLI, API, plugin manager, and snapshots.

Web UI

A control room for your terminal.

dmux ui --open launches a Bootstrap 5 dashboard on 127.0.0.1. Sticky glassmorphic topbar with an animated live pulse. Sidebar with fuzzy filter and per-session counts. Pane mosaic with hover lift and corner status dots. Dedicated theme toggle, persisted across reloads.

  • Plugins (TPM) view with autocomplete from the awesome list
  • Inline plugins.tmux editor (CodeMirror)
  • Status-bar wizard for Freed-Wu segment templates
  • Bound to localhost — close the terminal, the UI stops
http://127.0.0.1:8756
work · main live
$ pytest -x
32 passed in 0.11s
$ vim README.md
writing release notes…
$ dmux ui
serving 127.0.0.1:8756
$ git status
on main · clean
CLI

One command. Every workflow.

The CLI is the source of truth — the web UI just calls the same primitives.

# Snapshot & restore
dmux save
dmux restore
→ rebuilds every window & pane after a reboot
# Sessions
dmux new work
dmux attach work
dmux layout grid
# Plugins (TPM)
dmux plugins bootstrap
dmux plugins add tmux-plugins/tmux-sensible
dmux plugins install
dmux plugins source
# Web UI
dmux ui --open
→ http://127.0.0.1:8756 in your browser
dmux ui --port 8757
dmux ui -S /tmp/my.sock
JSON API

Every action is curl-able.

The web UI doesn't have any private hooks — it talks to the same documented endpoints you can. Build dashboards, hooks, or shell scripts on top.

GET/api/v1/sessions List every session, window, and pane (with cwd / command).
POST/api/v1/sessions Create a new session: {"name": "work"}.
DELETE/api/v1/sessions/<name> Kill a session.
POST/api/v1/sessions/<name>/layout Apply a layout preset (even-h, even-v, main-h, main-v, tiled).
POST/api/v1/snapshots/save Snapshot every session into SQLite.
GET/api/v1/plugins TPM status + configured plugins.
POST/api/v1/plugins/source Reload plugins.tmux & tmux.conf, then refresh-client (TPM-style live reload).
POST/api/v1/plugins/plugin-lines Replace one plugin's option block (used by the wizard).
Install

Up & running in 30 seconds.

Python 3.10+ and tmux 3.2+. macOS or Linux. PyPI release lands soon — for now install from source.

# clone & install
git clone https://github.com/davidix/dmux.git
cd dmux
pip install -e .

# try it
dmux --help
dmux ui --open

If dmux saved you 10 minutes today,
star the repo.

It's the cheapest way to fund more work. Got an idea, a bug, or a plugin request? Open an issue — discussions stay short and friendly.