Migrating from TPM¶
tpack accepts TPM configuration syntax, so you can switch without rewriting your plugin declarations. Its on-disk plugin layout is intentionally different.
One-way compatibility boundary
Switching back to TPM is not seamless after tpack migrates plugin
directories. Do not run tpack and TPM against the same plugin root; using
both managers there is unsupported. Scripts, shell configuration, or
plugins with hard-coded paths such as ~/.tmux/plugins/tmux-sensible may
need to use the new canonical path or an explicit alias.
What stays the same¶
Everything you already have continues to work:
set -g @plugin '...'syntaxset -g @tpm_plugins '...'legacy syntax@tpm-install,@tpm-update,@tpm-cleanoptionsTMUX_PLUGIN_MANAGER_PATHenvironment variable- tpack launcher path
~/.tmux/plugins/tpm - Key bindings:
- ++prefix+shift+i++ — install plugins
- ++prefix+shift+u++ — update plugins
- ++prefix+alt+u++ — clean (remove unused) plugins
What's new¶
tpack adds features that TPM does not have:
| Feature | Details |
|---|---|
| Interactive TUI | ++prefix+shift+t++ opens a terminal UI for browsing, installing, updating, and removing plugins. |
| Plugin Registry | Browse a curated plugin registry from the TUI. Search, filter by category, and install with a single key press. |
| CLI | The tpack binary provides command-line management outside of tmux. |
| Automatic update checking | tpack can check for plugin updates in the background and prompt or auto-update. |
| Color-customizable TUI | Configure colors for the TUI via tmux options. |
| Self-update | tpack can update itself without manual intervention. |
One-time plugin directory migration¶
tpack identifies repositories by their normalized Git host and path, not only
their basename. Its generated directories resemble tmux-87a1216f1f68, are
ASCII, and are bounded to 64 bytes. This allows repositories such as
first-owner/tmux and second-owner/tmux to coexist in one plugin root.
Before an operational command changes plugins, tpack checks each old basename
directory's Git origin. It renames the directory to the canonical name only
when that origin exactly matches the configured repository identity. This is a
one-time, idempotent migration: later runs see the canonical directory and do
nothing. Explicit declarations such as owner/repo alias=my-plugin preserve
my-plugin as the directory and are not migrated.
Automatic migration does not guess, move, or delete a checkout when its origin
mismatches or cannot be read. A migration error stops the requested operation.
An unmatched legacy directory remains subject to normal orphan semantics, so a
later explicit tpack clean can remove it. Migration locking and destination
rechecks ensure concurrent tpack runs do not overwrite canonical directories.
How to switch¶
If you installed TPM with git clone, you can switch in place — no config
changes needed:
The run '~/.tmux/plugins/tpm/tpm' line in your tmux.conf stays the same.
Reload tmux to pick up the new binary:
If you prefer installing through a package manager (Homebrew, AUR, DEB/RPM)
or go install:
- Install tpack using any method from the Installation page.
-
Replace the
runline at the bottom of yourtmux.conf: -
Optionally remove the old TPM directory:
-
Reload tmux:
Note
Existing exact-origin checkouts are reused, but their directories are renamed once as described above. Review hard-coded plugin paths before the first operational command.