Today, I want to write about Zellij and especially its latest news update¹.

Zellij, the modern tmux?

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:

Session manager, and the beginning of problems

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:

popup -E "tmux ls -F '#S' | sk | xargs tmux switch-client -t"

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.

It gets worse

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:

But it can be for you

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:


↑ Zellij is doing too much
zellij
Thu Apr 25 10:43:00 2024 UTC