Release v0.41.0
Release notes
This is a large and significant version that includes many new features and fixes, and has been in the works for 6 months - yikes!
Special thanks to all contributors. This release includes some large guest contributions that have made a highly positive impact on the tool.
Notable Changes
- A "non-colliding" keybinding preset: This is a UX change to allow users to opt-in to a different keybinding setup and default_mode. This is intended to solve the "colliding keybindings" problem by starting with the interface locked and having to unlock it in order to perform actions.
- A new
Configuration
screen: Allowing users to switch between the default and non-colliding keybinding presets (temporarily per session or permanently by updating the configuration file), as well as change theCtrl
andAlt
leader keys. Accessible by default withCtrl o
+c
. - A first run Setup Wizard: When Zellij runs for the first time (==there is no configuration file AND a default one was written successfully to disk), a special version of the
Configuration
screen will run, titled "First Time Setup Wizard Step 1/1", inviting the user to choose the default keybindings or the new "non-colliding" keybindings. - Support for the Kitty Keyboard Protocol: Zellij now supports the first progressive enhancement of the Kitty Keyboard Protocol. Both for terminals/plugins running inside its panes and for input sent to it from the terminal it's running inside. This means multiple modifiers, as well as using the
Super
andShift
key as modifiers are now fully supported - assuming the terminal emulator also supports this protocol (most do). - Configuration live reloading: Changes to the configuration file now affect running Zellij sessions.
- A new WebAssembly/WASI runtime: We have switched to wasmtime for running our plugins.
- A new Plugin Manager: This new built-in plugin lists all the running plugins in the session as well as the configuration with which they were started. It allows loading new plugins, and also reloading and focusing existing plugins. Accessible by default with
Ctrl o
+p
. - --layout now supports URLs: It's possible to load layouts from a URL (eg.
zellij --layout https://example.com/my-layout.kdl
), commands in these layouts will not be run - instead starting suspended with aWaiting to run <command>
message, inviting the user to decide whether they would like to run this command. Plugins will prompt for permissions as usual. - New status-bar: The Zellij status bar has been updated to a new design. It now takes up only one line, and is aware of the "non-colliding" preset if it is chosen - guiding users through the keybinding chord as they enter it. It also includes more visibility on the secondary
Alt
modifiers, as well as adding a newFloating
toggle for floating panes (by defaultAlt f
). To get the old status bar, start Zellij with theclassic
layout (eg.zellij --layout classic
). - Loading background plugins on startup: There is a new
load_plugins
section in the configuration - by default empty - to which plugins can be added in the form of paths/URLs/aliases with an optional configuration (similar to how they are loaded in layouts). These plugins will be loaded in the background (suspended by default) on session start. If they request permissions, the permission screen will still be visible. - Many new themes: these include:
ao
,atelier-sulphurpool
,ayu_mirage
,ayu_dark
,ayu_light
,vesper
,night-owl
,iceberg-dark
,iceberg-light
,onedark
,ansi
,lucario
.
Breaking Changes
- The --layout flag is not idempotent(-ish): This flag, used to start a new Zellij session with the specified layout, now behaves differently if run inside a Zellij session. In this case, it will load the layout as one or more additional tabs into the session. This should make this flag an easy default choice for loading layouts: it will probably do what you want wherever you run it, rather than creating a nested Zellij session. For the old behavior, use the new
--new-session-with-layout <layout>
flag. - The
ENTER
key event changed in plugins: TheENTER
key is now explicitly sent to plugins, rather than being sent asChar('\n')
. While the protobuf files have not been changed in order not to break the serialization, the Zellij behavior has changed. I ask for plugin authors' understanding, and would be happy to support updating efforts if needed. zellij-tile
API change for plugins:zellij-tile
now has new types representing keybindings, reflecting the fact the users can now use multiple modifiers to communicate with plugins. Note that users require a supporting terminal for this (see above). Old plugins compiled with an older version ofzellij-tile
should still work due to the backwards-compatible serialization Zellij uses in the form of protobuffers.- Key forwarding is now based on default_mode: Previously keys-presses were forwarded verbatim to the terminal from STDIN in
locked
andnormal
modes. In all other modes they only took effect if the key was bound. Now this is instead true tolocked
mode and the defineddefault_mode
in the configuration (defaulting tonormal
). This is in order to give a better user experience with the non-colliding keybinding preset.
New Plugin APIs
A brief description of the new plugin APIs (for a full list, see the zellij-tile
API documentation, or the protobuf files if you are an SDK author):
- Rebind keys at runtime (temporarily per session or permanently in the configuration file)
- Change configuration (reconfigure) at runtime
- Allow starting a new session with a stringified layout
- Control
command
panes (knowing when they were opened, closed, exited, re-run) and get information about their exit code - Hide and show panes based on their pane id
- Open
command
panes in the background (eg. and then only show them if they had a non-0 exit code) - Rerun existing
command
panes that have exited - Control other panes (everything from writing input to arbitrary panes, changing them to fullscreen, toggle their floating status, break several of them to a new tab, etc.)
- Load/reload other plugins
- List-clients (including their focused pane_id, and running command or plugin url)
Do you like Zellij ❤️ ?
Me too! So much so that I spend 100% of my time developing and maintaining it and have no other income.
Zellij will always be free and open-source. Zellij will never contain ads or collect your data.
So if the tool gives you value and you are able, please consider a recurring monthly donation of 5-10$ to help me pay my bills. There are Zellij stickers in it for you! https://github.com/sponsors/imsnif