Skip to content

Release v0.41.0

Compare
Choose a tag to compare
@github-actions github-actions released this 04 Nov 08:35

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 the Ctrl and Alt leader keys. Accessible by default with Ctrl 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 and Shift 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 a Waiting 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 new Floating toggle for floating panes (by default Alt f). To get the old status bar, start Zellij with the classic 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: The ENTER key is now explicitly sent to plugins, rather than being sent as Char('\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 of zellij-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 and normal modes. In all other modes they only took effect if the key was bound. Now this is instead true to locked mode and the defined default_mode in the configuration (defaulting to normal). 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