Mohamed Elashri

A Milestone, txm new release

The first time I worked with the Linux terminal I was young, I didn’t know much about computers. It was just a new thing to try. That was a cool thing to do anyway. But it felt strange compared to the GUI world I was part of for the last couple of weeks. Still, the terminal got a special place for me since then. Life went on, and now I do development full-time, and my hobbies surround programming too.

When you work in the terminal long enough, you develop habits. You also inherit habits from the systems you log into. On one server, tmux is installed and configured just right. On another, you’re stuck with GNU screen. And sometimes, you get the freedom to try something new like zellij. Each of these tools is powerful in its own way, but moving between them is where the pain begins. For me, actually remembering the syntax of tmux was the annoying part. Yes, I could have modified the tmux config and customized it to be easier for me to use, but carrying that customization everywhere felt like building a wrapper around it anyway. It’s not that tmux commands are hard, or that screen’s syntax is impossible to learn, it’s that when you’ve memorized one, the others slow you down. Splitting a pane, renaming a window, or checking your session list suddenly becomes a mental context switch. In high-focus workflows, even small interruptions add up.

That’s where txm comes in.

What txm is and why I built it

txm stands for Terminal Multiplexer Manager. The idea is simple: give me one consistent set of commands, and let the tool worry about whether I’m on tmux, screen, or zellij.

With txm, I:

The big jump to v0.3.0

Until this point, txm had the basics, support for tmux and screen, basic session management, some window commands. It was already useful for me day to day.

But v0.3.0 changes the scope completely, introducing:

This is the first release where txm feels like a “real” tool rather than a personal experiment.

Full zellij support

Adding zellij wasn’t a matter of just mapping tmux commands to zellij equivalents. The architecture is different, zellij has tabs instead of windows, and pane focus works differently.

In v0.3.0:

Example:

# Works the same in tmux, screen, and zellij
txm split-window mysession mywindow v
txm next-window mysession
txm rename-window mysession "logs"

In zellij, that last command will rename the active tab, not just an internal ID.

Backend configuration and fallback

Before v0.3.0, switching backends meant manually changing settings or commands. Now you can set it once and override it when needed.

txm config set backend zellij
TXM_DEFAULT_BACKEND=tmux txm create dev-session

Backend selection priority:

  1. TXM_DEFAULT_BACKEND environment variable (temporary)
  2. Config file at ~/.txm/config (persistent)
  3. Default to tmux if available, otherwise the first available backend

CLI and documentation updates

A couple of small but important changes:

Example:

$ txm --backend=banana create mysession
Error: invalid backend "banana"
Valid backends are: tmux, screen, zellij

Behavior fixes

A few of the changes that make daily use smoother:

Behind the scenes, why this matters for the future

The visible features are only half the story. This release also involved moving to a standard Go project structure, splitting each backend into its own file, migrating backend calls to the modular system, rewriting unit tests to focus on core logic, and moving integration tests into separate GitHub Actions workflows. This makes adding new features, or even a fourth backend, much easier and safer.

What’s next

Some ideas I am exploring include advanced session recovery so you can pick up where you left off, even across machines, remote backend management to manage multiplexers over SSH from a single txm command, and custom command sets that let you map your own shortcuts to backend actions.

Get txm

You can find the source code, issues, and releases on GitHub txm repository:

For a quick try, you can use the following one line install script. I don’t recommend this as this practice is huge security problem, but it can be useful for testing purposes. Please take your time to understand what the script does before running it.

Quick install (user-local)

curl -s https://raw.githubusercontent.com/MohamedElashri/txm/main/utils/install.sh | bash

System-wide install

curl -s https://raw.githubusercontent.com/MohamedElashri/txm/main/utils/install.sh | sudo bash -s -- --system

From source

git clone https://github.com/MohamedElashri/txm
cd txm/src
go build -o txm
sudo mv txm /usr/local/bin/

Once installed, run:

txm --help

To see all available commands.

Final word

txm v0.3.0 is the release where my vision starts to feel somehow real. One tool, one workflow, three backends. It makes working across different environments less about “remembering the right syntax” and more about “just doing the thing you came here to do.”

So if you live in tmux but sometimes get dropped into screen, or if you want to explore zellij without changing your workflow, this tool can be of help to you.