Releases: zellij-org/zellij
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
Release v0.37.2
This is a patch release to fix some minor issues in the previous release.
What's Changed
- hotfix: include theme files into binary by @jaeheonji in #2566
- fix(plugins): make hide_self api idempotent by @imsnif in #2568
Full Changelog: v0.37.1...v0.37.2
Release v0.37.1
This is a patch release mainly to fix a regression in 0.37.0 where the user's theme_dir
was not picked up.
What's Changed
- Hotfix: theme issue in
v0.37.0
by @jaeheonji in #2562 - fix(plugins): swap layouts and invoked_with by @imsnif in #2564
Full Changelog: v0.37.0...v0.37.1
Release v0.37.0
In this release we've done a lot of work on our WebAssembly / WASI plugin system and are very excited to invite adventurous Rust developers to come pioneer our plugin system with us. To read more, please see the official Plugin Documentation.
Please also drop by our Discord or Matrix and show us the plugins you're working on!
Other Highlights
- Some basic themes are now included with the release, give it a try by starting Zellij with
zellij options --theme catppuccin-mocha
- Layouts now support environment variables and tilde expansions
- We can now provide a
--cwd
option when starting Zellij
All changes
- fix(plugin): respect hide session option on compact-bar by @pedromfedricci in #2368
- feat: Add layout configuration to exclude panes from tab sync by @on3iro in #2314
- Fix 2205 - Support cwd by @Kangaxx-0 in #2290
- feat(plugins): reload plugin at runtime by @imsnif in #2372
- Update architecture doc by @Kangaxx-0 in #2371
- feat(themes): add nightfox themes by @EdenEast in #2384
- feat: provide default themes by @jaeheonji in #2307
- feat(plugins): update and render plugins asynchronously by @imsnif in #2410
- feat(layout): Support environment variables in cwd (#2288) by @shahamran in #2291
- Add file path context to all IO errors in ConfigError by @Imberflur in #2412
- fix(e2e): fix flaky locked mode test by @imsnif in #2413
- Fix error loading non-existant themes directory and use default themes as the base when merging by @Imberflur in #2411
- improve build/ci times by @tlinford in #2396
- Do not unwrap() the sticky bit setting! by @valpackett in #2424
- Use rust 1.67 by @har7an in #2375
- Fix issue 2421 - Update config file output by @Kangaxx-0 in #2443
- feat(plugins): Plugin workers and strider by @imsnif in #2449
- fix: cwd of newtab action by @onichandame in #2455
- feat(wasm-plugin-system): major overhaul and some goodies by @imsnif in #2510
- feat(plugins): extensive plugin api by @imsnif in #2516
- fix: runtime panic because of local cache by @jaeheonji in #2522
- fix(output): do not hide cursor on a render that does not include visual assets by @imsnif in #2528
- fix(screen): focus tab as well as pane when launching existing plugin by @imsnif in #2530
- fix(strider): clear search term on ESC by @imsnif in #2531
- fix(plugins): only listen to hd if a plugin is subscribed to hd events by @imsnif in #2529
- fix(logs): suppress debug logs when not debugging by @imsnif in #2532
- fix(plugins): allow loading relative urls by @imsnif in #2539
- feat(plugins): plugin pane state events by @imsnif in #2545
- performance(plugins): use a debounced fs watcher by @imsnif in #2546
- feat(plugins): more plugin api methods by @imsnif in #2550
- refactor(plugins): improve api by @imsnif in #2552
- feat(plugins): strider improvements by @imsnif in #2551
- docs(plugins): document the zellij-tile events and commands api by @imsnif in #2554
- docs(plugins): better zellij-tile-docs by @imsnif in #2560
New Contributors
- @on3iro made their first contribution in #2314
- @Kangaxx-0 made their first contribution in #2290
- @EdenEast made their first contribution in #2384
- @shahamran made their first contribution in #2291
- @Imberflur made their first contribution in #2412
- @valpackett made their first contribution in #2424
- @onichandame made their first contribution in #2455
Full Changelog: v0.36.0...v0.37.0
Release v0.36.0
This release includes some nice quality-of-life features, as well as some bug fixes.
Highlights
- It's now possible to hide the session name in the UI (check out: https://zellij.dev/documentation/options.html#hide_session_name)
- A new bindable key action was added to clear the scrollbuffer of the focused pane (check out
ClearScreen
here: https://zellij.dev/documentation/keybindings-possible-actions.html) - Plugins are now loaded asynchronously
All changes
- add my tweaked theme by @alekspickle in #2257
- fix(screen): focus pane on screen edge when moving pane focus offtab by @imsnif in #2293
- Correct summary by @Silejonu in #2235
- Updated layout examples to .kdl from .yaml by @caleflat in #2250
- fix(panes): adding panes to lone stack by @imsnif in #2298
- fix(panes): closing a stacked pane should relayout by @imsnif in #2312
- Fixed issue #1948 by @gbrigandi in #2322
- feat(plugins): async plugin loading by @imsnif in #2327
- docs(readme): update roadmap image by @imsnif in #2333
- Add action to clear all buffers for a specific pane by @alekspickle in #2239
- Added launch in xonsh by @anki-code in #2323
- Add option to hide session name in tab-bar (deriving from #2172) by @marcel-baur in #2301
- fix(layouts): don't default to default swap layouts on new-tab action by @imsnif in #2336
- fix(layouts): nested attribute truncating by @imsnif in #2337
- fix(scrollback-editor): properly invoke editor when command includes spaces by @imsnif in #2339
- fix(layouts): focus tab race by @imsnif in #2340
- feat(panes): allow defining an expanded stacked pane by @imsnif in #2343
- fix(layout): pane focus in stack by @imsnif in #2344
- fix(plugins): prevent Strider from opening double-panes when editing files by @imsnif in #2346
- fix: set sticky bit on socket by @tlinford in #2141
- chore(assets): adjust logo by @imsnif in #2358
- fix: do not hold on to router thread handle until server exit by @tlinford in #2328
New Contributors
- @alekspickle made their first contribution in #2257
- @Silejonu made their first contribution in #2235
- @caleflat made their first contribution in #2250
- @gbrigandi made their first contribution in #2322
- @anki-code made their first contribution in #2323
- @marcel-baur made their first contribution in #2301
Full Changelog: v0.35.2...v0.36.0
Release v0.35.2
This is a patch release to fix some regressions and issues that came up in the last major release a few days ago. It only includes minor fixes.
What's Changed
- fix(sessions): attach --create regression by @imsnif in #2247
- fix(screen): hold and applylayout races by @imsnif in #2251
- fix(ansi): pad line end when erasing characters by @imsnif in #2259
Full Changelog: v0.35.1...v0.35.2
Release v0.35.1
This release includes some major features and bug fixes.
Major features
- Stacked panes - try them out by opening 3 or more panes and then toggling the swap layout with
Alt
+[]
- Swap layouts - You can now change the way the panes are arranged on screen, by default with
Alt
+[]
- Floating panes can now be included in layouts
Notable bug fixes
- The loading screen is gone after the first run! The information queried from your terminal emulator will be cached in the default cache folder (
~/.cache/zellij
). If you change the font size or colors, you can update Zellij by removing the contents of this folder and reloading Zellij. - The
new-tab
action now properly looks for your layouts in the default folder. - Much more! See all changes below for more details.
All changes
- fix(panes): show visual error when unable to split panes vertically/horizontally by @imsnif in #2025
- WIP: Use
xtask
as build system by @har7an in #2012 - fix(panes): show visual error when failing to resize panes by @imsnif in #2036
- chore(repo): remove nix support by @imsnif in #2038
- Floating panes in layouts by @imsnif in #2047
- add tmux close pane key by @casonadams in #2058
- fix: properly end selection with copy_on_select = false by @tlinford in #2086
- fix 3 bugs by @wlsnx in #2082
- Errors: less unwrap in server by @har7an in #2069
- Support UTF-8 character in tab name and pane name by @naosense in #2102
- errors: handle missing plugin caches by @har7an in #2093
- Improve client disconnect handling by @har7an in #2068
- feat: add ScrollToTop action by @yves-biener in #2110
- Fix status bar not displaying w/ size=1 and show shortcuts by @panki27 in #2091
- Add
GoToTabName
action to switch tab by name by @naosense in #2120 - Use singlepass in debug mode by @m-lima in #2134
- cleanups around "buffer full" error by @har7an in #2136
- Make the singlepass compiler opt-in through flags by @m-lima in #2146
- Add pencil theme by @aral in #2157
- Apply correct color on 'more tabs' message by @pedromfedricci in #2166
- feat: add args to new-tab action by @jaeheonji in #2072
- update termwiz to v0.20.0 by @tlinford in #2169
- feat(ui): swap layouts and stacked panes by @imsnif in #2167
- fix(ux): cache stdin queries on startup (remove startup delay) by @imsnif in #2173
- Project Governance Change by @imsnif in #2174
- Add Helix editor (
hx
) to editors that support prefix positions by @bheylin in #2156 - Extend display char in tab by @naosense in #2119
- Fix fullscreen navigation by @yves-biener in #2117
- fix(grid): glitchy resizes by @imsnif in #2182
- Update bug_report.md template with OSX log directory by @KaiSpencer in #2181
- fix(layout): various parser and ui fixes by @imsnif in #2191
- fix(messaging): cache hold pane messages by their tab_id if the tab is not ready by @imsnif in #2196
- fix(layout): tab focus by @imsnif in #2197
- fix(cli): new-tab now also looks in layout_dir for layouts by @imsnif in #2198
- fix(kdl): new-tab keybind looks in layout_dir for layouts by @jaeheonji in #2200
- fix(cli): edit cwd by @imsnif in #2201
- fix(layouts): do not relayout twice on auto_layout by @imsnif in #2202
- fix(new-tab): get config parameters from config file by @imsnif in #2203
- fix(grid): only use background pending styling when deleting characters by @imsnif in #2204
- feat(layouts): exact panes constraint by @imsnif in #2206
- fix(pty): report no-cwd for empty path returned from sysinfo by @imsnif in #2213
- fix(sixel): report pixel size in winsize change ioctl by @imsnif in #2212
- Fix plugin location path decoding from Url by @tarkah in #2190
- Add action
QueryTabNames
to list all tab names by @naosense in #2145 - fix(pty): do not crash when unable to set cwd by @imsnif in #2214
- fix(layouts): naming and gototabname by @imsnif in #2225
- fix(cli): make auto_layout work through the cli by @imsnif in #2227
- feat: add self-provided themes by @jaeheonji in #2224
- Feature: simulate publishing by @har7an in #2194
- Revert theme pr by @imsnif in #2229
- chore(repo): version 0.35.0 by @imsnif in #2230
New Contributors
- @wlsnx made their first contribution in #2082
- @yves-biener made their first contribution in #2110
- @panki27 made their first contribution in #2091
- @m-lima made their first contribution in #2134
- @aral made their first contribution in #2157
- @bheylin made their first contribution in #2156
- @KaiSpencer made their first contribution in #2181
- @tarkah made their first contribution in #2190
Full Changelog: v0.34.4...v0.35.1
Release v0.34.4
Release v0.34.3
This is mostly a stability, performance and bug fix release, but also includes some nice additional features.
Main Changes
- Performance: both loading and rendering are significantly faster now and take less HW resources
- Loading screen: Zellij now has a minor loading screen (0.5 seconds) before it starts. This is so that input from STDIN will not be lost while Zellij queries the user's terminal emulator for pixel/cell ratio and the default colors
- We now fall back to
/bin/sh
if we can't find a $SHELL variable - Users can now directionally decrease pane size and not just increase it - by default these are bound to HJKL (uppercase letter) in resize mode, but can be bound like anything to other keys.
- Lots of stability and bug fixes
Breaking Changes (mainly for plugin authors)
- If plugins exceed their scrollback, the lines will be deleted from the top and not the bottom as they were until now - this is to make the behaviour more consistent with "actual" terminals (lines are pushed into the scrollback rather than cut from below). Probably the most significant change here is that if you did \n at the last line of the plugin, you'll need to remove, otherwise you'll get an empty line at the end of the plugin pane.
- Whenever plugins (re-)render, they should completely re-render themselves without considering the previous cursor position or artifacts on screen
- The plugin update function now needs to return a bool value (0/1 in non-zellij-tile world), indicating whether the plugin needs to be rendered or not. This is significant because previously plugins who subscribed to the KeyPress event would render themselves on every keypress, regardless of whether anything changed. To make everything work, plugin authors can just always return true. To be a little smarter about it though, feel free to take a look at the Zellij default-plugins - who all return conditionally here.
For a full list of changes, please see: https://github.com/zellij-org/zellij/blob/main/CHANGELOG.md#0343---2022-12-09
Release v0.33.0
This release includes lots of bugfixes and improvements, as well as some much requested features after our recent configuration and layout revamp. Some highlights:
- It's now possible to make Command Panes close when their process exits by using the
close_on_exit true
setting in the layout, or the--close-on-exit
cli flag if opening them from the command line. - It's now also possible to start Command Panes suspended - meaning that their command will only run after initially pressing
ENTER
when focused on them. This can be useful when starting a dashboard-style layout and not wanting to immediately run all the commands. - Users can now toggle mouse mode at runtime using the
ToggleMouseMode
keybind (it is not bound by default so has to be explicitly bound in the keybinds configuration). - New themes! Check out our everforest and kanagawa themes.
Full list of changes
- improve error handling in pty by @naosense in #1840
- feat(command-panes): optionally allow panes to be closed on exit by @imsnif in #1869
- Add
everforest
theme in theme examples by @royrustdev in #1873 - fix(themes): remove colons from everforest themes by @tlinford in #1874
- feat: support multiple themes in one file by @jaeheonji in #1855
- improve error handling in ui module by @naosense in #1870
- errors: Don't unwrap in
server::pty_writer
by @har7an in #1872 - docs(example): update the format of the themes for the example directory by @jaeheonji in #1877
- errors: Don't unwrap in
server::terminal_bytes
by @har7an in #1876 - errors: Don't unwrap in
zellij_server::output
by @har7an in #1878 - fix: resolve setup --clean panic by @tlinford in #1882
- feature(mouse): allow toggling mouse mode at runtime by @tlinford in #1883
- Display controls line of status-bar plugin if pane size=1 by @welcoMattic in #1875
- feat(command-panes): allow to start suspended by @imsnif in #1887
- build(deps): bump cachix/cachix-action from 10 to 12 by @dependabot in #1891
- flake.lock: Update by @a-kenji in #1889
- build(deps): bump cachix/install-nix-action from 17 to 18 by @dependabot in #1890
- errors: Don't unwrap in
server::os_input_output
by @har7an in #1895 - fix(keybinds): remove space key from shared_except by @jaeheonji in #1884
- allow terminating char to clear search term by @naosense in #1853
- Fixing YAML => KDL conversion with backslash hotkey. by @noyez in #1879
- fix(ui): clear floating panes indication when closing a command pane by @imsnif in #1897
- Reset dim SGR independently from bold by @pedromfedricci in #1803
- fix(edit): treat cwd properly by @imsnif in #1904
- fix(cli-actions): do not query termios for the cli client by @imsnif in #1905
- feat(terminals): send focus in/out events to terminal panes by @imsnif in #1908
- fix(panes): moving and toggling embed/float with frames by @imsnif in #1909
- errors: Remove
log::error
in server by @har7an in #1881 - Fix bat syntax colors when using mosh by @raphCode in #1900
- convert ALT-centered config to kdl and smoothify by @matu3ba in #1910
- Create kanagawa.kdl by @Serif-7 in #1913
- fix: use
temp_dir
for getting temp folder by @xJonathanLEI in #1898 - made the README more aesthetic by @rskbansal in #1885
- Fix: better error reporting when failing to load plugins (#1912) by @har7an in #1914
- cargo: Don't strip release binary by @har7an in #1916
- chore(deps): bump termwiz to 0.19.0 by @xJonathanLEI in #1896
- docs: Improve error handling docs by @har7an in #1919
- chore(ci): remove msrv check by @imsnif in #1923
New Contributors
- @royrustdev made their first contribution in #1873
- @noyez made their first contribution in #1879
- @pedromfedricci made their first contribution in #1803
- @Serif-7 made their first contribution in #1913
- @xJonathanLEI made their first contribution in #1898
- @rskbansal made their first contribution in #1885
Full Changelog: v0.32.0...v0.33.0