Open-source project
omerxx/tmux-sessionx avatar
omerxx/tmux-sessionx

Tmux SessionX: fuzzy session switching in tmux

A Tmux session manager, with preview, fuzzy finding, and MORE

1,402 stars119 forksShellGPL-3.0

At a glance

What is it?
Tmux SessionX adds an fzf-based interface for creating, finding, previewing, renaming, and deleting tmux sessions. It suits terminal-heavy tmux users who want configurable session controls without leaving the terminal.
Who is it for?
Adopt Tmux SessionX if your work already depends on tmux, fzf, and terminal navigation, and you want session creation and management in one configurable interface. Do not choose it if those prerequisites are unwanted or if you need documented migration or rollback procedures.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 2 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why Tmux SessionX fits a tmux-based workflow

Tmux SessionX addresses a specific problem: session names and navigation targets become difficult to manage when a user keeps multiple long-lived tmux sessions. The plugin places a fuzzy session picker inside an fzf-tmux popup. Existing sessions can be searched, while entering a name that does not correspond to an existing session creates one, according to the truncated usage section of the README. The same interface is documented as supporting preview, deletion, renaming, and other session actions.

It is aimed at users who already use tmux as a terminal workspace and who also want fzf-style selection. SessionX does not replace tmux. It acts as a plugin layer over tmux and expects the surrounding command-line tools to exist. The default binding is `<prefix>+O`, although both the binding and whether the prefix is required can be changed.

The practical advantage is a single interactive surface for session discovery and directory-based creation. This is more focused than a general-purpose launch dashboard: the project is organized around tmux sessions, tmux windows, preview presentation, and paths from which new sessions can be created. That specificity also defines its boundary. Users who do not already depend on tmux or fzf gain little from this plugin.

SessionX selection, preview, and creation flow

The documented launch flow opens an fzf-tmux popup containing fuzzy search results for existing sessions, with the current session excluded from the initial view by default. The README says the current session appears after actions such as renaming. This default favors rapid switching, but users who need it present from the outset can change `@sessionx-filter-current` to `'false'`.

SessionX does not limit the interface to a flat session list. Window mode can list windows under the default layout, while tree mode can present a hierarchy of sessions and windows instead of the normal preview. Preview content can be positioned on the right, resized as a percentage of screen space, or disabled. The preview and pointer behavior can be toggled interactively with `?`, according to the configuration notes.

Creation can begin with a name entered into the fuzzy interface. SessionX also supports `C-x` directory selection. Its default index is `$HOME/.config`, but `@sessionx-x-path` changes that location. Custom absolute paths can be included through `@sessionx-custom-paths`, and subdirectories can be exposed with `@sessionx-custom-paths-subdirectories`. If `zoxide` is installed, `@sessionx-zoxide-mode` can send unmatched input to zoxide for path matching.

The repository is primarily Shell and includes `sessionx.tmux` plus a `scripts/` directory. That layout matches a tmux plugin composed of shell commands rather than a separately hosted service or library.

Installing SessionX through TPM and testing the default binding

The normal installation path uses tpm. Add the plugin declaration to `.tmux.conf`, then run `Ctrl-I` so TPM can install the plugin. The README lists tpm, fzf, fzf-tmux, and bat as prerequisites, with zoxide optional.

Add this line to `.tmux.conf`:

bash
set -g @plugin 'omerxx/tmux-sessionx'

After reloading tmux, run `Ctrl-I` to invoke the TPM installation shortcut. The repository also documents Nix installation paths, including the Nixpkgs package `tmuxPlugins.tmux-sessionx` and a custom flake source for newer updates.

For a temporary Nix shell evaluation, the documented command is:

bash
nix-shell -p tmuxPlugins.tmux-sessionx

The temporary shell modifies `$PATH` for that environment. It does not by itself replace the need to connect the plugin to the tmux configuration.

The first real check is the default key binding. With no binding override, press the tmux prefix followed by uppercase `O`. According to the README, this should open the fzf-tmux session selection popup. This verifies the tmux plugin path as well as whether the required fzf integration can start. If it does not appear, the README does not provide a troubleshooting sequence, so the first useful checks are whether TPM installed the plugin and whether `fzf`, `fzf-tmux`, `bat`, and tmux are available to the same environment.

Choosing SessionX fzf behavior and keyboard scope

SessionX supports two documented fzf integration choices. The default path uses the `fzf-tmux` script. Enabling `@sessionx-fzf-builtin-tmux` switches to `fzf --tmux`, which requires fzf 0.53 or later. Older installations are not treated as equivalent: `@sessionx-legacy-fzf-support` exists for users running fzf below 0.35.0, although the README advises upgrading where possible.

The selection can also be bound more narrowly. By default, pressing the configured key includes the tmux prefix. Setting `@sessionx-prefix` to `off` permits the desired key without the prefix. Another option, `@sessionx-bind`, replaces the default binding. The documentation recommends choosing a short binding such as `o` when it does not conflict with another command, but that is a recommendation rather than a documented requirement.

This configurability has a trade-off. SessionX exposes enough options to fit an existing tmux setup, but several settings affect command lookup, fzf version requirements, and key behavior at once. A first-use check should therefore retain the default fzf path, confirm that the popup opens, and only then change the integration mode or binding. This isolates a failed prerequisite from a configuration mistake.

Additional fzf options can be supplied with `@sessionx-additional-options`. The README states that SessionX passes these options before its own arguments so that pointer, height, and width options continue to work.

Preview layout and project-specific display choices

The presentation defaults can be changed without altering tmux's underlying session model. `@sessionx-preview-location` accepts values such as `'right'`, while `@sessionx-preview-ratio` controls the share assigned to the preview. `@sessionx-window-height`, `@sessionx-window-width`, and `@sessionx-layout` affect the overall popup or layout. A minimal display override can disable the preview:

bash
set -g @sessionx-preview-enabled 'false'
set -g @sessionx-preview-location 'right'
set -g @sessionx-preview-ratio '55%'
set -g @sessionx-window-height '90%'
set -g @sessionx-window-width '75%'

The directory preview can use another listing command through `@sessionx-ls-command`. The README specifically mentions `exa`, `lsd`, or another command. Its example uses `lsd --tree --color=always --icon=always`, so selecting that option creates a dependency beyond the default `ls` behavior.

Session labels can also include Git branch information. With `@sessionx-git-branch` set to `'on'`, branches are loaded asynchronously and displayed beside session names. Git is required for this option. The asynchronous loading is intended to keep the session list from waiting on branch retrieval, but the README does not document loading errors or a way to diagnose stale branch data.

Window mode, tree mode, and preview mode answer different needs. Window mode emphasizes windows, tree mode exposes hierarchy, and preview mode retains a detail pane. Enabling all of them is possible in the documented configuration, although it would make the interface denser than any single mode requires.

SessionX limitations, alternative interfaces, and maintenance

SessionX depends on a specific shell toolchain. A missing or unsuitable version of fzf, absence of `fzf-tmux` when the default mode is selected, missing bat, or unavailable Git can affect different features. Enabling custom features can add dependencies, such as zoxide, tmuxinator, or a non-default directory listing command. This is not a self-contained session manager, and the README does not describe fallback behavior for every missing executable.

There is also no documented rollback procedure in the README. Removing a TPM plugin line may stop loading it, but the README does not state whether preferences, created sessions, or other system state require cleanup. Users should not infer a supported migration process from that omission.

A real alternative is to remain with tmux's built-in session commands and a separate script for name completion or directory selection. That approach keeps session handling in native `tmux` commands and avoids preview and directory-indexing features, but it does not provide SessionX's documented combined popup for existing sessions, new names, paths, previews, renaming, and deletion. Another alternative is a general fzf file picker for directories, paired with tmux commands. It offers flexible path selection but is not session-aware and therefore loses tmux session and window metadata.

The repository is not archived, and its last push was on 2026-10-08. No GitHub releases are listed, so there is no documented release-based upgrade channel to rely on. TPM or Nixpkgs updates are installation paths, not evidence of a stable release schedule.

The project uses GPL-3.0. That matters when distributing the plugin or incorporating it into another distributed work, because GPL-3.0 contains copyleft terms. The repository text does not replace legal advice, and organizations should review their actual distribution model against the license.

Editorial conclusion

Adopt Tmux SessionX if your work already depends on tmux, fzf, and terminal navigation, and you want session creation and management in one configurable interface. Do not choose it if those prerequisites are unwanted or if you need documented migration or rollback procedures. Before adopting it, verify that your preferred fzf mode works in your environment and review the GPL-3.0 obligations for how you distribute the plugin.

Frequently asked questions

How do I install Tmux SessionX with TPM?

Add `set -g @plugin 'omerxx/tmux-sessionx'` to `.tmux.conf` and run `Ctrl-I` for TPM to install the plugin. The README lists tpm, fzf, fzf-tmux, and bat as prerequisites.

Which key opens Tmux SessionX by default?

The default binding is `<prefix>+O`. Change it with `@sessionx-bind`, and set `@sessionx-prefix` to `off` if the key should work without the tmux prefix.

Can Tmux SessionX create sessions from directories?

Yes. The `C-x` action indexes a configurable directory, custom absolute paths can be supplied, and zoxide mode can provide path matching when zoxide is installed and the option is enabled.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. omerxx/tmux-sessionx on GitHub
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/omerxx-tmux-sessionx.svg)](https://hysenlabs.com/projects/omerxx-tmux-sessionx)

Was this useful?