Today, I want to write about Zellij and especially its latest news update¹.
I came into Zellij a wild ago, while I was looking for something more modern over tmux. It had the terminal multiplexer features (windows, splits, focus, etc.), but was lacking features (sessions, for instance, were added mid-2021²). As time passed, it started to get new features and promising. For instance, its layout system, allowing to have a more minimalistic view (the default one being really all-over-the-place).
And then I realized that some very basic features from tmux were absent:
prefix+z by default in
tmux; ToggleFocusFullscreen action in Zellij), in
Zellij, I don’t have any indication the pane is being focused,
while tmux has this nice and neat Z marker in the
statusbar. That doesn’t seem like important, but it is, especially
when you keep zooming in and out.What I like about a software, like, for instance, tmux or kakoune, is that they are minimal. They do one thing and they do it well. If you are not sure about whether something is minimal, ask yourself a simple question: “What do we expect from this tool to solve; to do?”. For a terminal multiplexer, we expect:
If you provide a few amounts of nice features, and
composability tools, then your users can build more by
composing your system with others. For instance, tmux has the
display-popup (popup) command that takes
a command to run and displays it in a floating window. That’s
great, because now I can do something like
tmux ls -F '#S' to list all running sessions, pipe it
to my favorite fuzzy picker (fzf, sk,
etc.), and redirect the result to
xargs tmux switch-client -t. Something like:
Make a keybinding for that, and here you go, you have a customized session picker!
On the other side, Zellij ships with its “session manager” — which, honestly looks terrible to me.

That thing is not something you have control on, and the Zellij CLI Actions³ won’t help you either.
Note: we are also in the right to ask ourselves why there is a list of commands (that you can bind to), and a list of CLI actions. The former is richer than the latter and it means that the commands you bind to your keys and the commands you run on the CLI do not share the same naming / they are not from the same set.
So you’re stuck with a “native” session picker, that could have been pushed to the users. Again, with tmux, it’s a one-liner, and it uses my favorite fuzzy picker.
Lately, I have decided to head over the Zellij news⁴ section to read about recent updates, and as mentioned at the very top of this article, I was not disappointed. The latest update features some new enhancements, which goes against the concept of minimalism and even against the initial scope of the project:
zpipe to pipe results into
plugins. That’s interesting, but that’s also a new burden to
maintain because of using plugins in the first place, instead of
going the composability route. I’m not convinced. With tmux, I can
simply send the result of a command to a specific session, window,
pane. All of that just looks like a justification for the extra
complexity added by plugins. But at least it makes sense once you
have decided to use plugins?However, I don’t want to bash on Zellij. I think this very article I’m writing should be my reflection about why Zellij exists, why it’s not for me (anymore?) and why it could be for you. See, tmux is an old, battle-tested piece of software that will do exactly what it’s supposed to. If you want more, well, then you have to build it yourself. Because tmux composes well, it’s an enjoyable process for me, but it might not be for you. Maybe you don’t want to have to learn a fuzzy picker and the default, native session manager of Zellij will be a breeze for you. Maybe the file picker they have made will be of great help for you.
I could summarize my thoughts as follows: