// the find
zellij-org/zellij
A terminal workspace with batteries included
Zellij is a terminal multiplexer written in Rust, positioned as a more approachable alternative to tmux/screen with better defaults and a discoverable UI. It targets developers who want tabs, panes, and session management without memorizing a config file first, but it also has a deep plugin system via WebAssembly for power users who want to extend it.
- WebAssembly plugin system is genuinely interesting: plugins can be written in any language that compiles to WASM, which means you're not locked into writing Rust to extend it, and the sandbox model is a real security win over tmux's scripting approach.
- Layouts defined in KDL give you reproducible workspace setups as code — you can commit a layout file and get the exact same pane arrangement and commands on any machine, which tmux sessions can't do cleanly.
- E2E test suite uses snapshot testing against actual terminal output, which is the right way to test a terminal emulator and means regressions in rendering are actually caught.
- Built-in multiplayer/web-client support is a real differentiator — sharing a terminal session or accessing it via browser without setting up SSH tunneling or extra tooling is useful for pairing and demos.
- Startup time with WASM plugin loading is noticeably slower than tmux, especially on first run — every default plugin (status bar, tab bar, session manager) is a WASM module that needs to be compiled and cached, which adds friction on constrained machines.
- The plugin API surface is large but documented unevenly; the Rust bindings are well-covered but if you're writing a plugin in Go or Zig you'll be reverse-engineering the ABI from examples rather than from stable docs.
- Session resurrection serializes pane layout but not arbitrary terminal state — scroll history and program state are lost on daemon restart unless you opt into viewport serialization, which has its own caveats. This is a weaker story than tools like `tmux-resurrect`.
- Configuration in KDL is non-standard enough that most existing editor integrations and dotfile templates don't help you; the format also changes between versions, and the migration tooling (`convert-config`) is a signal that breaking changes happen.