blog.rust.gay

Zellij 0.46 becomes a desktop terminal without giving up tmux habits

Zellij has been a terminal multiplexer (Rust alternative to tmux, with layouts, floating panes, and a WebAssembly plugin system) for years. But now, with version 0.46 (released 11 November 2026), something new: zellij terminal and Zellij becomes a terminal. With a tray icon. Session previews. Settings screen. And Zellij is careful to note that nothing changes for those who still run Zellij in another terminal. Which is interesting. Because that's what they're trying to be. While not changing what they already are.

Easy mistake to make here. This isn't a GUI rewrite with tabs and splits done in some toolkit. Zellij's built-in terminal uses Zellij as its UI. Which is the same text interface you're already used to. It's explicit that Aram Drevekenin, the author, is against GUI tabs and splits. "textual interfaces are the natural choice for those who love the terminal." Desktop terminal is not about replacing the terminal metaphor. It's about getting rid of the outer terminal emulator.

What the built-in terminal actually is

Before 0.46, it was terminal emulator (Alacritty, Kitty, WezTerm, GNOME Terminal) -> Zellij -> shells, panes. In 0.46, the bottom two layers are collapsed. Zellij talks directly to the OS windowing layer now. And renders the terminal grid. It's native on Linux, macOS, Windows.

This is important for packaging. They recommend a specific document, PACKAGING_DESKTOP.md. And they note that there's no terminal in musl builds. You have to use GNU builds for the desktop mode. It's not the norm for a Rust project to have that. (Usually, musl is assumed to be the portable default.) But it makes sense if you're integrating with the desktop (tray icons, native windowing). You have to use platform libraries. And you can't do that in a static musl binary.

This isn't multiplexer + desktop terminal as separate things. Same sessions. Can share sessions. You can attach to zellij terminal session created in iTerm. And vice versa. This is a stronger compatibility statement. Because this isn't a fork of the session protocol. It's a new front-end to it for the desktop mode.

Performance: typing latency and scrolling

Drevekenin notes that he optimized two things. Input latency. Textual scrolling. These aren't the metrics people talk about for most terminal emulators. For GPU-accelerated terminals, it's frame rates. And throughput for large outputs. Zellij is about making typing feel better. And smooth scrolling for large files.

They've done a benchmark comparison with other terminals. Plus a separate methodology repo. But if you're interested in terminal performance, you should read this. Because "fast" is easy to claim. Hard to measure. The input latency part is mostly about the round-trip from key press to glyph. That includes compositor. And terminal's event loop. And shell. For the scrolling part, it's mostly about how efficiently the emulator moves and redraws cells. And the engineering problem is different for optimizing both. Than just maximizing bytes per second.

And the honest caveat is that benchmarks are only as good as the harness. So Zellij's methodology is public. Which is the right attitude. But it's their own measurement. So treat the comparison as that. Useful takeaway is that the desktop terminal was designed with a performance budget. Not just a list of features.

The attention inbox and the coding-agent era

The feature that explains what this release is about the most is the attention inbox. Terminals are used for more and more background work. Where sometimes you need something human. A test suite completes. Build fails. An agent needs approval. With multiple sessions and dozens of panes, it's hard to figure out which one you need to pay attention to.

Now Zellij has a session manager that includes an inbox. So you can see which pane in which tab in which session needs attention. The mechanism is the recently developed OCS7501 protocol. It lets a program in the terminal emit an attention signal. And most relevant programs already support it. So in principle you just need to upgrade those programs. And in terminal mode, there's a color-coded pill count in the tray icon.

This is a small feature. But a big implication. Terminal is becoming a control surface for long running, semi-autonomous work. This is different than what tmux was designed to do. Where it was mostly about keeping a shell alive after dropping the SSH connection. An inbox for aggregating attention requests is a UI for supervising agents. And it's interesting that a terminal project has this before most IDEs have something equivalent for the shell.

Another thing about the inbox is that it's a bet on a protocol. Not just a proprietary integration. If OCS7501 support becomes more widespread, then Zellij gets attention tracking for free with any tool that adopts it. If not, then the feature is only as good as the few programs that support it. And terminal escape sequences have a long history of informal standardization. So the bet isn't unreasonable. But it's a bet.

Session previews, settings, and desktop integration

Session manager and inbox now support previews. So you can peek into another session. Or another pane in the current session. And even quickly type a command in that. Without switching. For anyone running multiple long-lived sessions, this is what makes the desktop mode feel like a workspace, not a window.

For desktop terminal, there's also a tray icon on all three platforms. And it's text. And it's the session manager + inbox. So the experience is consistent across OS. Which is intentional. They could have built native menus for each platform. But instead they opted to render their own text UI inside a native shell.

Version 0.46 also has a settings screen. Theme editor. Configuration files aren't for everyone. They argue that terminal programs should be configurable at runtime. Like GUI apps. The settings screen reads/writes same config files. So it's a front end, not parallel config system. The theme editor has contrast checks. Which is nice for accessibility. And a sign that the feature was designed. Not just exposed.

Right-click menu is configurable. And ctrl-drag creates floating panes at a specific location. You can toggle horizontal vs. vertical orientation of stacked panes for horizontal stacks. There's a keybinding (Ctrl p then Shift z). Or a right-click option to temporarily hide the UI. These aren't headline features. But they fill the gap between just being a keyboard only multiplexer. And a desktop application that's easy to navigate for someone new to it.

Zellij as a library

Distributions are probably the most significant addition for Rust developers. The ability to run Zellij as a library in another app. So developers can embed terminal emulation. And layouts. And plugin-driven UI. And cross-platform support. Into their own product. And they call this "white labelling".

This makes Zellij go from an app to a platform component. So if you have a company that's building an internal developer portal. Or a remote shell product. Or an agent dashboard. You can use Zellij's terminal/pane machinery. Instead of building your own. And the plugin system. (WebAssembly modules). This is how embedders can customize behavior without forking the core.

There's a strategic reason for this. Multiplexers are a mature, crowded category. So it's hard to get the marginal user. But a library can spread into other products. If Zellij's terminal emulation is used in tools that don't mention Zellij. Then it's a way to get more contributors. More funding. Without having to win a direct comparison with tmux.

What this means for tmux users

So the obvious question is, does any of this matter if you're already using tmux? And you like it. The honest answer is that 0.46 doesn't try to win that argument. The multiplexer is the same. Keybindings are the same. The built-in terminal is optional. So if you're workflow is: terminal emulator + tmux + a few panes. Then there's nothing in this release that requires you to change it.

The thing that 0.46 does is make Zellij a more likely default for those not already committed. The settings screen reduces the barrier to entry. For that first hour. Configuration files are the main barrier. Session previews make the session manager useful. Not just ornamental. The attention inbox is new. It's solving a problem. Tmux users solve it with custom status lines. And scripts. And habits. There's no reason to migrate. But these things make it so that a new user might not bounce off Zellij as easily as they might have in 0.40.So there's a cost to all that extra surface area. Everything that goes into the desktop shell is code that needs to be maintained. And the release notes are refreshingly honest about the fact that this project is community-funded and stretched. tmux is small, stable, and done. Zellij is a moving target. It's more exciting, and more brittle. If you really care about stability, you should probably stick with tmux. If you care about seeing the terminal evolve, you should probably contribute to the project that's doing that.

And when you compare it to WezTerm, WezTerm is a GPU-accelerated terminal emulator with its own multiplexer, and it's written in Rust. Zellij began as a multiplexer and now it's adding a terminal. They're converging from both ends. And the difference is in which layer they're considering the primary. WezTerm considers their product to be the terminal emulator and their feature to be the multiplexer. Zellij considers their product to be the multiplexer and their new front end to be the terminal emulator. So it'll be interesting to see which one ages better. Depending on whether terminal emulation or session management is more difficult to maintain excellent.

The funding reality

The release notes are unusually upfront. Drevekenin is talking about how venture-capital-backed companies have been coming into the terminal space and using their funding and influence to dominate it. And Zellij is community-funded. It can't do that on its own. They're asking for ongoing donations through github sponsors.

You should treat that as real. Not marketing. This is a big codebase. It's complex. It's mostly maintained by one person. And the feature list for 0.46 is the result of a lot of unpaid or underpaid work. And the "terminal-first desktop environment" roadmap of running GUI apps as panes in a TUI is ambitious. It's going to require some ongoing investment. If you're a Zellij user, there's a real reason for you to fund it. Otherwise it's going to burn out the maintainer. Or the project is going to get acquired and it's going to change directions.

Conclusion

Zellij 0.46 isn't trying to replace tmux for people who are happy with tmux. It's trying to turn the terminal into a first-class desktop environment for people whose work has shifted into having many concurrent sessions and background agents and long-running tasks. The fact that they have a built-in terminal. And an attention inbox. And session previews. And the settings screen. All that points in that direction. And the library mode gives the project a second way to be relevant.

The problem is scope. Every feature they add to the desktop shell is another surface area to maintain. And the funding request makes it sound like they're already stretched. The payoff is that they have a vision. They're going to keep the multiplexer exactly the way it is. And they're going to add the desktop experience on top of that. And that's a trickier thing than it sounds. 0.46 is the first release where both halves seem to belong together. It'll be interesting to see whether the next release keeps that balance. Or if the desktop shell is going to pull them away from the multiplexer origins. Right now it's a confident response to a question most terminal projects haven't asked. What should a multiplexer evolve into? When the work going on inside of it changes.

Sources

  • Zellij v0.46.0 release: https://github.com/zellij-org/zellij/releases/tag/v0.46.0
  • "Zellij 0.46: built-in terminal, attention inbox, session previews": https://zellij.dev/news/terminal-inbox-session-previews/
  • Desktop packaging notes: https://github.com/zellij-org/zellij/blob/main/docs/PACKAGING_DESKTOP.md
  • Terminal benchmark methodology: https://github.com/imsnif/benchmark-methodology

← back to posts