I am a terminal developer. I write my code inside vim, I use Zellij to manage my terminal workspace and automate everyday tasks. My desktop environment is a wrapper around the two most ubiquitous application development platforms of our time: the terminal and the browser.

Those of us using Zellij often get asked: “Why Zellij?”

I usually avoid this question, because I feel the choices of software and stack are deeply personal. I don’t like convincing people or evangelizing - I prefer creating great tools and allowing them to speak for themselves. In this post however, I’m going to fill this gap by trying something different: I’m going to tell the story of Zellij.

My Story

I’ve been a linux user since I was 15. Using bash and later perl to automate my personal tasks. I used nano as my text editor and later when I wanted syntax highlighting I moved to vim. Whenever I opened a full-fledged graphical IDE, I was confused and overwhelmed by the mixture of text editing and code analysis. The various menus and tooltips that kept popping up whenever I typed anything made me anxious. So I stuck with vim.

As a terminal developer, I believe that my code editor is just that: a code editor. It’s there to display and manipulate text fast and efficiently. It’s not there to run my code, analyze it, provide tools to manipulate it or collaborate on it with others. For developers like me, this sort of magic happens inside the terminal itself.

The cool thing about this approach is that you absolutely have to build your own tools. Whether through code or heavy configuration. There is no one-shot application that does all of this for you. You develop a personal relationship with your terminal workspace, making it behave exactly as you want it to without compromise. You share tricks with others through dotfile repositories and generally focus on improving workflows - because everything is pluggable.

The frustrating thing about this approach is that you absolutely have to build your own tools. There is no one-shot application that does all of this for you. Your relationship with your terminal workspace is often lonely. Most others see your ways as impractical and user-hostile. Moving to a different computer is often an adventure and your workspace is something you need to maintain on your own.

I created Zellij because I believe there is a better way. I believe we can have our cake and eat it.

The Story of Zellij

The terminal is an amazing application platform. It’s probably the most ubiquitous user-facing one we have. It has been mostly stable for decades, and has emerging properties that I feel place its rendering methods light-years ahead of traditional graphical environments.

And yet it is extremely underutilized. Many developers use it grudgingly, preferring their graphical tools. They consider it a necessary evil, a relic of a bygone era that should pass away from the world. And who can blame them? The terminal at its core is a user-hostile environment. Little thought is given to making it more approachable to users beyond minor necessities such as managing tabs, splits and sessions. Terminal developers are often considered removed from others - either looked up to as elite or looked down upon as disconnected. Either way, we are seen as a distant anomaly.

It doesn’t have to be this way.

I created Zellij not just for me and other terminal developers. I created Zellij for anyone who loves the terminal, or would like to love it. Zellij is a user-friendly terminal workspace that does not sacrifice simplicity for power. Placing the full power of the terminal at everyone’s fingertips without forcing them to climb a mountain of lore and domain knowledge.

Zellij is powerful, simple, beautiful and yet deeply configurable.

Zellij is not a replacement for any other software. It is a re-imagining of the terminal that doesn’t leave anyone behind.

Zellij is Discoverable

One of the reasons terminal software is often considered hostile is that creating discoverable textual interfaces is hard. Creating discoverable interfaces in general is a challenge, and doing so without the benefit of a mouse or a touch screen is even harder. Terminal application developers understandably often skip this stage, deferring instead to cheat-sheets and manual pages that are outside the application itself. Zellij places an emphasis on having these in-app and on-screen.

It is my belief that an interface being discoverable and looking good is one of the most important aspects of using software. It not only makes new and returning users feel at home, it helps discovering features and allowing users to get the most out of their tools. I believe this aspect should not be an add-on, but rather a core principle of the software.

Zellij is an Application Platform and Runtime

Zellij is designed primarily as an application platform. It can run terminals just as easily as it can run custom built applications that we call plugins. While the plugin ecosystem is young, this is the direction the project is going.

These plugins are designed to be:

  1. Easy to develop - since the plugin system uses webassembly/wasi as a runtime, one should in the future (once some more SDKs are developed) be able to use any language to develop them (right now it’s either Rust or Go). One can also use a common UI language in the form of UI components to forgo developing one’s own, as well as be in sync with the rest of the user’s UI and theme.
  2. More powerful than terminal applications - they can do anything a terminal application does, plus be aware of the whole workspace and communicate/spawn each other in a preditable way.
  3. More secure than terminal applications - the system interface as well as application state are gated behind a permission system.
  4. More portable than terminal applications - compiled binaries can run on any system that has a Zellij instance and do not require any installation.

Zellij does not Rely on Graphical Assets to Render Itself

I believe terminal emulation is the most ubiquitous user-facing platform we have. While not perfect, it’s been around for a long while and is mostly stable. Any other platform (eg. desktop applications, browser applications or even terminal emulators themselves) represents a lock-in of one sort or another. Either to the platform itself or to some sort of infrastructure or other translation-layer. I believe the only way to ensure that an application and indeed an application development platform lasts is to base its rendering on text.

This has many other emerging properties, such as UIs (or parts of them) being replayable as well as being parsable by external tools (indeed, this is how we run our e2e tests).

I don’t believe this is a limitation, I believe it’s a strength. I would not want my development UI to be built from GUI assets.

A Zellij Workspace is Truly Portable

Zellij is designed to assist users in creating their own workspaces. As a pluggable combination of layouts and plugins that can be easily shared with others or when moving to new machines. Not as a brittle soup of bash scripts but as a single, concise and Human-readable configuration file.

Zellij is Free

Zellij is a gift to the developer community at large and indeed to all those who use a terminal. It’s free, it’s open-source and it is respecful of its users and their privacy. Zellij will never display ads or collect user-data. Indeed, its infrastructure is designed in such a way as to make these practices very hard for applications built on top of it.

Zellij is a labor of love and passion. Asking users who love it to pay as they wish to support the Zellij development, or not pay at all if they are unable or unwilling.

The Story of Zellij is Just Beginning

The task of re-imagining the terminal is a large one. Hundreds of developer hours have been poured into Zellij and yet it is still pre-1.0. This is to be expected. I believe in consistent incremental improvement and I believe in developing in the open.

This means that when using Zellij, there might be a few papercuts here and there. Personally as a linux user, I’m used to things being this way. But this doesn’t mean I don’t strive to fix everything as fast as possible and provide users with a smooth experience.

Right now, I’m concentrating on building the infrastructure that facilitates this re-imagining. Some pieces are already in place, but many aren’t. Using Zellij today means being an early adopter. It means having a say about how the application will take shape over the years. It’s an exciting journey and experience, but I will be the first to say it’s not for everyone.

Where do we go from here?

If you are interested in the project, the best way to support it is to become a user. There’s a bustling user community spread across multiple Internet spaces. Enjoy the software, extend it with plugins and configuration - support others on their journey. Understand that Zellij is not here to replace any other tool.

Zellij is here to place the terminal on the central stage where it belongs.

Support Me and Zellij Development ❤️

I spend 100% of my time developing Zellij. I’m mostly living on my savings because I deeply believe in this project, its userbase and its future. If you’d like to support me and are able, a recurring donation of 5-10$ a month is the most sustainable way of doing so. It will really help me pay my bills.

So please consider sponsoring my work.