Releases: zellij-org/zellij
Release v0.41.1
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
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
Release v0.40.1
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:
Ctrl j
is now bindable thanks to a community contribution (thanks @hiasr !) - you can read more about the technical details of the implementation.- 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
Release v0.40.0
Release notes
This release includes exciting new features as well as some long awaited and requested improvements.
Some highlights
- A new welcome screen
- A new filepicker
- Pipes
- Open floating panes at specific coordinates
- Rearrange tabs
- Disconnect other clients
- Plugin aliases
- New possible keys to bind
- Start session in the background
- Performance improvements
Check out the official announcement
Also check out the two new screencasts/tutorials about session management and the new filepicker.
Are you upgrading from an older version using a custom config file?
In order to take advantage of some of the new features (eg. the welcome-screen and filepicker), you'll need to swap the plugins
section in your configuration file with the one from the default file.
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.39.2
This is a patch release mostly to fix an issue where the sessions in the session-manager would take ~1 minute to be updated.
What's Changed
- Fix typo in help page by @wendrul in #2906
- fix(sessions): untie serialization interval from session read interval by @imsnif in #2951
- fixup: zellij-server: fix compiler warnings by @rmsyn in #2873
New Contributors
Full Changelog: v0.39.1...v0.39.2
Release v0.39.1
This is a patch release to fix some issues that came out with the recent 0.39.0
release.
The main user-facing issue here is reducing the serialization interval to 1 minute by default and allowing it to be configured using the serialization_interval
configuration parameter.
Thanks to the many community contributions which helped quickly fix a lot of the bugs found in the release! It's good to see so many people relying heavily on the tool and helping maintain it so quickly.
What's Changed
- Fix styled underlines in editors by @mike-lloyd03 in #2918
- fix(ux): LaunchPlugin and some cwd fixes by @imsnif in #2916
- optimize: update refresh prorcess for sysinfo to reduce cpu usage by @xuanyuan300 in #2920
- Dropping to shell in command panes reuses CWD by @d-alonso in #2915
- feat(config): add serialization interval configuration by @imsnif in #2923
- fix(plugins): reloading plugin after crash by @imsnif in #2929
New Contributors
- @mike-lloyd03 made their first contribution in #2918
- @xuanyuan300 made their first contribution in #2920
- @d-alonso made their first contribution in #2915
Full Changelog: v0.39.0...v0.39.1
Release v0.39.0
This is a significant release with lots of major and long requested features. Here's a run down:
Session Resurrection
This version adds a built-in capability to resurrect sessions. Attaching to "exited" sessions will re-create them, placing any running commands behind a Press <ENTER> to run
banner so as to prevent awkward situations with things like rm -rf
. Sessions can also be resurrected through the session-manager
.
Special thanks to @AlixBernard for implementing the serialization algorithm, as well as to @alekspickle for helping integrate the algorithm with our code base. Without them this feature would not have come to be.
UI Components for Plugins
This version introduces UI Components for plugins. Allowing plugins to render beautiful and consistent UI elements (eg. table
, ribbon
, nexted-list
) no matter which programming language they were developped in. These components are serialized on the plugin-side and interpreted by our ANSI interpreter using a private DCS
.
Load Plugins from the Web
This release introduces the http(s)
prefix for plugin URLs. Meaning we would be able to load them from the web just like we load them from the HD.
A new top-level CLI command was also added to make loading plugins easier:
zellij plugin -- https://example.com/plugin.wasm # Will also work with file: and zellij: urls
Thanks @jaeheonji for designing and implementing this feature.
Renaming Sessions
It's now possible to rename the current session. This can either be done through the CLI with the new rename-session
action, or through the session-manager
with Ctrl r
.
Start panes in-place
Sometimes, when opening new panes it can be convenient to have them open "in-place", meaning that they would replace the currently active pane and then drop back to it once they exit. This release adds this ability to zellij run
and similar commands using the --in-place
flag.
Wasmer 3.x upgrade
While not user facing, this is an important upgrade of our WebAssembly runtime that makes packaging easier as well as facilitating compatibility to some platforms.
Thanks @tlinford for his tremendous efforts in getting this done
New Plugin APIs
RunCommand - execute command in the background and get a response
This API allows plugins to run a command on the host machine. The command will run in the background and the plugin will be notified with an Event
when the command has completed, receiving its exit code, STDIN and STDOUT.
WebRequest - execute an http(s) request in the background and get a response
This API allows plugins to make a web request and receive its output. The request will run in the background and the plugin will receive an Event
with the response once the request is complete.
Add <ESC> - Drop to shell
to command panes
For a while now, Zellij has had the concept of "command panes" - panes that run a specific command as part of the UI. Now, in addition to being able to re-run the command with ENTER
and close the pane with Ctrl c
, it's also possible to drop to a shell with <ESC>
. This can be especially useful when combined with the session resurrection feature (eg. if one does not want to run the resurrected command but does not want to close the pane either).
Support Styled Underlines
Zellij now supports the "styled underlines" ANSI extension.
Thanks @eatgrass and @mike-lloyd03 for the implementation
Open new Plugins to current CWD
Starting this release, plugins are opened to the working folder of the currently focused terminal pane (if available), rather than the folder in which the Zellij session was started.
All changes
- fix(utils): validate session name by @deepsghimire in #2607
- feat(panes): in place run by @imsnif in #2795
- Fix: fg color for gruvbox light theme by @papey in #2791
- fix: display parsing error for kdl files located under the 'themes' directory by @shinhs0506 in #2762
- feat(plugins): upgrade wasmer to 3.1.1 by @tlinford in #2706
- remove leftover Cargo.lock file from session-manager plugin by @silwol in #2819
- chore: migrate to directories from directories-next by @silwol in #2820
- chore: update uuid dependency to 1.4.1 by @silwol in #2821
- fix(plugins): address potential security issue by @tlinford in #2830
- fix(plugins): add zellij version to cached artifact path by @tlinford in #2836
- Session resurrection by @imsnif in #2801
- feat(client): terminal synchronized output by @gmorer in #2798
- fix(resurrection): log failure instead of crashing in some edge cases by @imsnif in #2851
- fix(plugins): make auxiliary functions (get_focused_tab and get_focused_pane) public by @Nacho114 in #2765
- feat(plugins): plugin run_command api by @imsnif in #2862
- style: cyberpunk inspired theme options added by @Sr-vZ in #2868
- feat(panes): Add an option to press and drop to shell in command panes by @imsnif in #2872
- feat(plugins): web requests api by @imsnif in #2879
- fix(cli): session names only for attach in fish completion by @dj95 in #2857
- feat(plugins): UI components by @imsnif in #2898
- feat: support load plugins from the web by @jaeheonji in #2863
- feat(sessions): resurrect sessions through the session-manager (and plugin API) by @imsnif in #2902
- Styled underlines by @eatgrass in #2730
- feat(ux): allow renaming sessions by @imsnif in #2903
- fix(plugins): start plugin pane in cwd of focused pane if possible by @imsnif in #2905
- fix(resurrection): properly serialize certain edge cases by @imsnif in #2907
- docs(api): docs for shim.rs by @imsnif in #2909
New Contributors
- @deepsghimire made their first contribution in #2607
- @papey made their first contribution in #2791
- @shinhs0506 made their first contribution in #2762
- @silwol made their first contribution in #2819
- @gmorer made their first contribution in #2798
- @Sr-vZ made their first contribution in #2868
- @dj95 made their first contribution in #2857
- @eatgrass made their first contribution in #2730
Full Changelog: v0.38.2...v0.39.0
Release v0.38.2
This is a patch release to fix a regression in line wrapping handling while in alternate screen mode. The main reported issues have been with the latest version of neovim.
Apologies for the inconvenience and for the delay in fixing. The new neovim version relying on this behavior was released while I was on vacation, so just a bit of bad luck!
More details: #2789
Full Changelog: v0.38.1...v0.38.2
Release v0.38.1
This is a patch release, fixing some minor issues encountered after the latest major release
What's Changed
- refactor(server): remove unnecessary mut by @orhun in #2735
- fix(status-bar): add break tab hints by @imsnif in #2748
- fix(reconnect): do not clear terminal state when entering alternate screen by @imsnif in #2750
- fix(grid): memory leak with unfocused tabs by @tlinford in #2745
- fix(input): block input thread for newtiledpane and newfloatingpane as well by @imsnif in #2757
Full Changelog: v0.38.0...v0.38.1
Release v0.38.0
This release includes lots of improvements for the Zellij UI/UX as well as some exciting new plugin features and infrastructure.
It also provides some performance and resourcee utilization improvements.
This release is a breaking change for plugins. Please see the upgrade guide for plugins
UI/UX
> Session Manager
Read more...
Zellij now includes a built-in session-manager. It is implemented as a plugin and so all of its API is available to plugin authors as well.
The session-manager can switch between sessions, focus a specific tab or pane in the current or in another session, create new sessions and fuzzy-find sessions/tabs/panes by their names.
By default, the session-manager can be started from the SESSION
mode, the default key-binding sequence being Ctrl o
+ w
.
If you have a custom keybindings configuration, please see the "Updating a custom keybindings configuration" section below.
> Move panes between tabs
Panes can now be moved between tabs. One can Break
a pane to a new tab, meaning that a new tab would be created "around" this pane.
Read more...
These new keybindings can be found in `Tab` mode. By default, they are: * `Ctrl t` + `b` - Break pane into new tab * `Ctrl t` + `[` or `]` - Move pane between tabsIf you have a custom keybindings configuration, please see the "Updating a custom keybindings configuration" section below.
> Support shortcuts for opening commands in floating panes
Read more...
The `Run` keybinding now supports `floating true` and `name `. This would allow you to bind a key shortcut (eg. `Ctrl f`), to open a specific command (eg. `cargo test`) in a floating pane.> All session names should now be non-offensive
Thanks @tlinford for your work on this!
> Updating a custom keybindings configuration
Read more...
Do you have a custom keybindings configuration in your `config.kdl` file? Does the `keybinds` section have a `clear-defaults=true` attribute? If so, you have to take a small extra step to get the new keybindings for the `session-manager` and the `Break pane` keybindings:You'll need to either:
- Remove the
clear-defaults=true
part in order to get these keybindings "merged" with your custom keybindings. - Manually add the following sections to your configuration: session-manager, break-tab
Plugins
> Plugins are now configurable
Read more...
One can now start plugins with a custom key/value configuration, either from layouts:
pane {
plugin location="file:/path/to/my/plugin.wasm" {
some_key "some_value"
another_key 1
}
}
Or from the cli:
zellij action launch-or-focus-plugin --configuration "some_key=some_value,another_key=1"
> Plugin permission system (thanks and great work @jaeheonji!)
Read more...
Zellij now includes a permission system for plugins. Plugins can request permissions with the `request_permission` API call. This will display a help screen asking the user to approve permissions to this plugin. Permissions are cached in a `permissions.kdl` file in the user's cache folder and can be cleared by deleting or editing the file.> move_to_focused_tab
attribute added to the LaunchOrFocusPlugin
keybinding
Read more...
The LaunchOrFocusPlugin
keybind (and launch-or-focus-plugin
cli command) now include a move_to_focused_tab
attribute. If true, when focusing the plugin it will always start in the user's focused tab. This is useful for UI pop-up windows (such as the session-manager
) to not move the user's focus from the tab they're in.
> Plugins are now forwards compatible thanks to protocol buffers
Read more...
Zellij plugins have always communicated with the host system (Zellij itself) by serializing/deserializing complex structures over STDIN/STDOUT. This caused problems both for other SDK writers who had to reverse engineer the serialization and for plugin upgrading. Starting this version, Zellij uses Ptorocol Buffers in order to communicate across the wasm boundary.
This means that plugins now should not break in future versions unless there's an API behavior change, which we as maintainers make an effort to do only very rarely.
Bug Fixes
- Plugged a memory leak (more info: #2675)
- Fixed occasional pane resizing glitches
- Pane frame is now colored when in a mirrored multiplayer session
Special thanks to @har7an for his tremendous efforts bringing the CI into shape before the release!
New Contributors
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. 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
Full Changelog: v0.37.2...v0.38.0