This is a large release including many new features, some of which long requested, as well as countless fixes, infrastructure overhauls and much more. I would like to thank everyone for their patience with this long awaited version being released. I hope you will agree it was worth the wait.
Following is a non-exhaustive list of some major and significant changes:
Native Windows Support
Zellij now runs natively on Windows(!!). Achieved through a major community code contribution, at long last Zellij is truly multi-platform. Allowing windows users to enjoy the same session management, workspace automation, plugin ecosystem and multiplayer capabilities that have been available on Linux and macOS since the inception of the tool. We are truly excited.
Special thanks to @divens for the implementation and hard work.
Layout Manager
This release introduces a new layout-manager interface, implemented as a built-in plugin allowing users to:
- Open their favorite layouts in a new tab or tabs
- Apply their layouts to the current tab (optionally keeping panes that do not match the layout or closing them outright)
- Create new layouts on the fly by recording the current tab state
It should be noted that with the layout manager comes the new override-layout capability, appearing both a as a plugin command (used by the plugin) and as a CLI command. This capability allows us to change the layout of the current tab or all the tabs in the session to match a specific layout. An example use case for this is to toggle between the standard status-bar and the compact bar (in itself a much requested capability).
To open the layout manager: Ctrl o + l
Terminal-to-Terminal Attach over HTTPS (remote attach)
This feature allows us to attach to a remote Zellij session (with the web server running and the session shared) from the terminal, just like we would from the browser. Using the same authentication tokens and doing so over HTTPS:
zellij attach https://example.com/my-cool-session
Read-Only Session Sharing
We are now able to issue "read-only" authentication tokens, which will allow users to attach to sessions without being able to affect them in any way (keyboard/mouse input or terminal window resizing). This can be especially useful for teaching, demonstrations, screencasting or streaming.
These tokens can be issued with:
zellij web --create-read-only-token
Or through the share plugin with Ctrl o + s
CLI Automation
This release dramatically expands what can be accomplished from the command line. Some main areas:
Conditionally Blocking Command Panes
The zellij run command now includes a --blocking, --block-until-exit-success and --block-until-exit-failure flags. Using these we can conditionally block the CLI before moving to the next command, depending on the outcome of the command run in the new pane.
New CLI actions of note
zellij detachandzellij action switch-sessionzellij action list-panes- lists all panes in the current or specified session, including metadata such as running commands, titles, coordinates, etc. Also optionally in --json format.zellij action send-keys- allows us to send Human readable keys to a specific pane (eg.zellij action send-keys "Enter" "Ctrl c" "F1" "a" "b")zellij subscribe- allows us to continuously subscribe to pane updates (viewport and scrollback) from one or more panes, optionally in --json format, optionally with --ansi (so colors and styling won't be stripped)zellij action dump-screennow has a--pane-idflag so that we can query the pane viewport/scrollback actively (also from other session by prefixing theactionwith--session <name>)- CLI commands that create panes (eg.
zellij run) now return the pane_id for easy storing and manipulation in following commands and scripts. CLI commands that create tabs (eg.zellij action new-tab) similarly return the created tab index.
For more info, including examples, recipes and directions for external programmatic control, please see: https://zellij.dev/documentation/controlling-zellij-through-cli.html
Resize Panes with the Mouse
Panes can now be resized with the mouse. Either by dragging their borders (floating panes require ctrl + dragging, as normal dragging moves them) or by floating over the pane, holding ctrl and scrolling the mouse up or down.
Note: this feature includes hints for the above keys that appear on hover. For those who do not like this behavior, the hints (as well as other mouse hover actions) can be disabled by specifying mouse_hover_effects false in the configuration.
Click-to-Open File Paths
By default, Zellij now highlights file paths (relative and absolute) when hovering over them with the mouse. When we Alt + Click them, these files will be opened in a new floating pane in our default EDITOR.
This new capability is implemented as a built-in plugin. For those who don't like this behavior, it can be disabled by commenting out the link plugin in the configuration: https://github.com/zellij-org/zellij/blob/main/zellij-utils/assets/config/default.kdl#L249
New Session Manager UI
The session manager UI has been revamped and is now much simpler, including only one screen that allows user to create new sessions, attach to existing ones or resurrect exited ones - all depending on which session name is specified.
For those wishing to remain with the old experience, the session manager can be run with multi_screen true.
New Rust APIs
It is Zellij development policy to create new UI interfaces as built-in plugins. This means that the new APIs created for all the above interfaces are now also available for third-party plugins (gated behind relevant permissions).
These capabilities include:
- Read pane scrollback - Plugins can now read the scrollback buffer of other panes, optionally including the ANSI colors and styling
- Configuration propagation - Changes to plugin configuration are now propagated to running plugins
- Query environment variables - Plugins can query env vars set upon session creation
- Highlight viewport text - Plugins can change the style of arbitrary text in any pane's viewport, optionally on mouse hover, optionally receiving an event when the user
Alt+Clicks them - Change pane colors - Set foreground/background colors of panes
- Explicit session save - Trigger a session save for resurrection without waiting for the automatic interval
For more info: https://zellij.dev/documentation/plugin-api.html
Infrastructure Overhaul
Under the hood, this release includes significant infrastructure changes:
- WASM runtime migration: The plugin runtime has been migrated from
wasmtimetowasmi, meaning they now do not require an explicit compilation step and so do not need to be cached. This might incur a slight performance penalty for plugins, but this penalty can be almost completely mitigated by adding the following to the plugin's Cargo.toml:
[profile.release]
lto = true
strip = true
codegen-units = 1- Async runtime migration: for historical reasons, up until now we've had two async runtimes:
async_stdandtokio. This release migrates us to usetokioexclusively.
Forwards Compatibility
Due to the lack of a client-server contract, Zellij sessions have never been backwards compatible. Each version upgrade would orphan existing sessions, forcing users to manually kill them and recreate them. While this is unfortunately still the case with this version, this will be the last time.
A new client/server contract has been created and enforced with protocol buffers. Future versions will be able to connect to existing sessions. The only caveat being that new features won't work with old sessions and will silently fail.
Additional Improvements
Beyond the above features, this release includes a large number of bug fixes and quality-of-life improvements:
- Borderless panes - open specific panes as borderless or toggle border status at runtime
- Terminal BEL forwarding from unfocused tabs and panes with visual indication
- Configurable
focus_follows_mouseandmouse_click_through - Line-wrapping/resize performance improvements
- Better STDIN segmentation with latency (eg. over SSH)
- Mobile web client viewport sizing and touch scrolling improvements
- Numerous fixes for session resurrection, floating pane behavior, cursor handling, grid rendering and more
For the full list of changes, see the CHANGELOG.
Please Support the Zellij Developer ❤️
Zellij is a labor of love and is provided free and open-source to anyone who wishes to use it.
Zellij will never display ads or collect your data.
To help sustain the project, please consider a recurring donation so that the developer can pay their bills: https://github.com/sponsors/imsnif