Skip to content

Releases: zellij-org/zellij

Release v0.44.0

23 Mar 08:03

Choose a tag to compare

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:

  1. Open their favorite layouts in a new tab or tabs
  2. Apply their layouts to the current tab (optionally keeping panes that do not match the layout or closing them outright)
  3. 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 detach and zellij action switch-session
  • zellij 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-screen now has a --pane-id flag so that we can query the pane viewport/scrollback actively (also from other session by prefixing the action with --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:

  1. Read pane scrollback - Plugins can now read the scrollback buffer of other panes, optionally including the ANSI colors and styling
  2. Configuration propagation - Changes to plugin configuration are now propagated to running plugins
  3. Query environment variables - Plugins can query env vars set upon session creation
  4. 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
  5. Change pane colors - Set foreground/background colors of panes
  6. 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:

  1. WASM runtime migration: The plugin runtime has been migrated from wasmtime to wasmi, 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
  1. Async runtime migration: for historical reasons, up until now we've had two async runtimes: async_std and tokio. This release migrates us to use tokio exclusively.

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_mouse and mouse_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

Release v0.43.1

08 Aug 12:55

Choose a tag to compare

This is a patch release to fix minor bugs and usability issues discovered in the recently released 0.43.0.

What's Changed

  • fix: pane rename backspace regression by @imsnif (#4346)
  • fix: Zellij Web login issue with safari by @imsnif (#4345)
  • fix: terminal title regression by @imsnif (#4352)
  • fix: resurrection listing regression by @imsnif (#4354)
  • fix: tooltip keybinding backgrounds by @imsnif (#4356)
  • fix: default to session name for window/tab title in Zellij Web by @imsnif (#4357)
  • fix: handle omitted flags in the push sequence of the KKP by @2asoft (#4334)

Full Changelog: v0.43.0...v0.43.1

Please Sponsor the Zellij Developer! ❤️

Zellij is developed and maintained as a labor of love, but love does not pay the bills.

Zellij will always be free and open-source. Zellij will never contain ads or collect your data.

If you are able, consider sponsoring the Zellij creator and lead developer with a recurring monthly donation. There are Zellij stickers in it for you!

Release v0.43.0

05 Aug 06:57

Choose a tag to compare

join the discussion: https://github.com/zellij-org/zellij/discussions/4340

Web Client

This release includes the long promised web-client, allowing Zellij users to start up a built-in web server in order to share their existing terminal sessions in the browser, start new ones or resurrect exited ones.

The web-client includes built-in security measures such as enforced authentication and HTTPS. More info in the documentation or the screencast.

This feature is opt-in. The server will not be started except by an explicit user action or configuration. Even so, the Zellij maintainers are aware some users might prefer a version of Zellij that does not include this capability, and so we will now start providing a zellij-no-web release binary. This new binary does not contain this feature or any of its dependencies.

Multiple Pane Select + hover effects

This release offers the ability to perform bulk operations on panes. For example: stack multiple panes, break multiple panes to a new tab, float multiple panes, etc. Panes are selected either with the mouse (Alt + <left-mouse-click> on any pane) or with Alt p.

As part of its UI feedback, this feature also includes mouse hover effects. Users who do not like these can disable the feature by adding advanced_mouse_actions false to the config. It's unfortunately not yet possible to only disable the hover effects.

Optional Key Tooltips for the compact-bar

A long requested feature has been the ability to temporarily see the keybinding hints when using the compact-bar, rather than having them being displayed all the time as they are with the status-bar. This version adds an optional tooltip to the compact bar that will appear when toggled or when entering a non-base mode (eg. Pane, Tab, etc.)

More info: https://zellij.dev/documentation/faq.html#the-ui-takes-up-too-much-space-what-can-i-do-about-it

Performance Improvements

This version places all renders behind an asynchronous rendering engine, reducing the number of render events sent to the client. While the raw performance numbers themselves will not be directly affected, the perceived performance is much smoother.

Stack Keybinding

While stacked panes have been available in Zellij for a while, this version adds the ability to directly open a new stacked pane on top of the current one. This can be done with Ctrl p + s (or Ctrl g + p + s). For those with a pre-existing config, you can add this line to the keybinds block in the config in the pane section:

// default
bind "s" { NewPane "stacked"; SwitchToMode "normal"; }

// for the unlock-first preset
bind "s" { NewPane "stacked"; SwitchToMode "locked"; }

Fix multiline hyperlinks

A long standing issue with Zellij has been that hyperlinks in the terminal that are broken down by line wraps do not behave properly: clicking on these links would only lead to the first wrap of the URL rather than the full URL itself. This version fixes this issue by utilizing OSC 8 more intelligently (essentially: sending the full link data with each URL wrap and giving them all the same ID so that the terminal emulator knows to underline all of them on hover).

post_command_discovery_hook

The Zellij session-resurrection is a much loved and essential feature in Zellij: allowing users to pick up where they left off with their previous session even after a machine reboot. The way Zellij detects running commands in panes though is not perfect, often not working well with command wrappers such as nix, actively running shell pipeline, etc. This version offers a way to mitigate this in the form of a post_command_discovery_hook, allowing users to apply edits to these commands before they are serialized.

More info: https://zellij.dev/documentation/session-resurrection.html#post_command_discovery_hook

Please Sponsor the Zellij Developer! ❤️

Zellij is developed and maintained as a labor of love, but love does not pay the bills.

Zellij will always be free and open-source. Zellij will never contain ads or collect your data.

If you are able, consider sponsoring the Zellij creator and lead developer with a recurring monthly donation. There are Zellij stickers in it for you!

Release v0.42.2

15 Apr 07:14

Choose a tag to compare

This patch release is mainly intended to address a breaking change in the Rust compiler that caused compilation to fail with --locked starting from Rust version 1.86. (Thanks @tranzystorekk for bringing this to our attention and for the quick fix!)

This patch also includes some terminal rendering performance improvements - namely consolidating some renders and thus reducing the occasional text flicker.

What's Changed

  • refactor(terminal): log scroll region as tuple rather than Option by @imsnif in #4082
  • chore: Introduce workspace dependencies by @har7an in #4085
  • build: Don't use default features by @har7an in #4086
  • build: Don't re-export foreign crates in utils by @har7an in #4087
  • performance(render): improve rendering performance by consolidating renders and introducing repaint_delay by @imsnif in #4100
  • fix(deps): fix --locked build on rust 1.86 by @tranzystorekk in #4118

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!

Release v0.42.1

21 Mar 08:47

Choose a tag to compare

This is a patch release to fix an issue with Windows Terminal (and associated terminals on windows presumably going through the win conpty) mishandling of mouse any-event motions that caused flickering and other odd behavior in Zellij. While this is not a bug on our side, we mitigated it with the help of our STDIN parsing library termwiz. More details here.

Special thanks to @zeevro who did the troubleshooting and issued a fix to termwiz!

Release v0.42.0

17 Mar 08:06

Choose a tag to compare

This version brings multiplexing to the next level with new user-facing features. It also includes a brand new theme definition spec and some more goodies.
Read all about it in the official release post.

Stacked Resize

This version of Zellij introduces an innovative new way of managing multiple panes. When resizing panes, Zellij will attempt to stack them with their neighbors - giving us more space on screen while still keeping the title of the other panes around so that we can easily navigate to them with the keyboard or mouse.
This behavior can be disabled through configuration

Pinned Floating Panes

One of the most loved features of Zellij is its native integration of floating panes. This version adds the ability to “pin” any such pane so that it is always on top, even when not focused. Floating panes can be pinned with a mouse click or with a keyboard shortcut: Ctrl p + i.

New Theme Definition Spec

This version introduces a new theme definition specification, allowing much greater flexibility when defining the Zellij UI appearance - extending to user plugins as well. This specification concentrates on the generic UI components used to make-up the Zellij UI rather than mapping colors. We look forward to seeing new themes created by the community with these capabilities.

For more information, see the new theme documentation

New (Rust) Plugin APIs

This version adds lots of new capabilities to plugins and exposes them in the built-in Rust SDK. Some highlights:
* Change the /host folder at runtime
* Change floating pane coordinates
* Stack arbitrary panes
* Read mouse motions

Double/Triple Mouse Click Text Selection in Terminals

Since Zellij implements its own mouse selection and copying, many users have noted the lack of ability to double or triple click text in order to mark the word boundaries or canonical line respectively. This version implements this capability for terminal panes. Upcoming in the next version is the ability for plugins to opt-in to text marking with the keyboard/mouse on all or parts of their scrollback.

Release Notes and Tips on Startup

Starting this version, on first run Zellij will display the release notes for the current version. On subsequent runs, Zellij will display a random useful usage tip on startup. It’s possible to disable both of these behaviors through the config (and in the case of tips, also at runtime through the tips window as specified). More info here and here.

Both of these can be browsed through the new about plugin with Ctrl o + a.

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!

Release v0.41.2

19 Nov 12:34

Choose a tag to compare

0.41.2

This is a patch release which fixes some regressions from 0.41 and general bugs that happened to be fixed along the way. Some dependencies were also vendored (or had a vendored toggle added) to facilitate packaging.

A notable addition is that plugins now have access to a /cache folder which maps to an entry unique to their loaded URL in the Zellij cache folder.

What's Changed

  • fix(input): keypresses not being identified properly with kitty keyboard protocol in some terminals (#3725)
  • fix(input): reapply ctrl-j fix for the new architecture
  • fix(plugins): various cwd and usability fixes for the plugin manager (#3749)
  • fix(output-buffer): handle race that sometimes caused text spillover (#3750)
  • fix(tabs): some event ordering issues exposed by the recent runtime change (#3758)
  • fix(plugins): do not duplicate built-in plugins, eg. session-manager (#3759)
  • fix(terminal): reset kitty keyboard support when resetting terminal state (#3760)
  • fix(startup): crash when unable to watch config dir (#3761)
  • fix(startup): slow start in some cases due to a race in the server retry queue (#3767)
  • fix(screen): various crashes due to invalid state exposed by the recent wasm runtime change (#3776)
  • chore(package): add the option to use the system curl instead of the vendored version when compiling (#3766)
  • fix(ux): change plugin manager "open from filesystem" shortcut for consistency with the session-manager (#3779)
  • fix(plugins): send PaneClosed event to plugins also when an entire tab was closed (#3781)
  • feat(plugins): add a /cache folder to plugins to persist data between runs (#3787)
  • feat(package): vendor the common_path dependency (#3780)
  • fix(plugins): derive Hash and Ord for PaneIds (#3790)

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

Release v0.41.1

04 Nov 11:15

Choose a tag to compare

This is a patch release to fix issues with our CI not creating the generic release binaries properly. It contains no new features.

To read more about 0.41

Please see: https://github.com/zellij-org/zellij/releases/tag/v0.41.0

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

Release v0.41.0

04 Nov 08:35

Choose a tag to compare

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

Release v0.40.1

02 May 07:16

Choose a tag to compare

This is a patch release mainly aimed at fixing some issues mostly introduced or exposed in the latest 0.40.0 release.

However, this version also introduces two exciting new features:

  1. Ctrl j is now bindable thanks to a community contribution (thanks @hiasr !) - you can read more about the technical details of the implementation.
  2. A new zellij action list-clients command was added for tools wishing to integrate with Zellij through the command line (this should facilitate interaction with other nested multiplexers such as neovim).

All changes

  • fix(sessions): issue where sessions would occasionally become unresponsive (#3281)
  • fix(cli): respect all options (eg. default-layout) when creating a session in the background from the CLI (#3288)
  • fix(cli): rename tab and pane from cli (#3295)
  • fix(plugins): respect $SHELL when opening a terminal from plugins (eg. from the filepicker strider) (#3296)
  • fix(tabs): closing a tab no longer breaks tab movement (#3299)
  • feat(plugins): add API to open new tabs with a LayoutInfo (#3305)
  • feat(cli): add zellij action list-clients to allow listing the connected clients as well as their pane_id and running command (#3314)
  • feat(cli): allow binding Ctrl J (#3307)

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