This release includes some major long-requested integrations with modern terminals as well as with Zellij itself: nested sessions become a first-class experience, images render through the Kitty graphics protocol, the scrollback understands shell prompts, and the default interface gets a redesign.
Following is a non-exhaustive list of some major and significant changes:
Nested Sessions
Running Zellij inside a Zellij pane (eg. after ssh-ing to a remote machine) is now a first-class workflow. The inner session announces itself to the outer one, and the outer session reacts when its pane gains focus, providing the user with 2 options:
- Zoom in and control the nested session - the nested session takes up the whole screen until toggled back (
Ctrl o+f, or clicking the session breadcrumbs in the tab-bar) - Control the nested session on focus - keys and mouse are routed directly to it, with the outer session's chrome dimmed. Ascend back with
Ctrl o+], descend again withCtrl o+[
The behavior is controlled with the new nested_session_handling config option (ask (default) / fullscreen / descend / never).
Kitty Graphics Protocol
Zellij now implements the Kitty graphics protocol in addition to the existing Sixel support. Image placements are tracked per pane and behave correctly across resizes, relayouts, scrollback, fullscreen and floating/pinned panes. The host terminal needs to support the protocol as well (queried at startup); the feature can be disabled with support_kitty_graphics_protocol false.
Relatedly, Sixel support is now only advertised to applications (through DA1 / XTSMGRAPHICS) when the attached terminal actually supports it.
Shell Integration (OSC 133)
Zellij now parses the OSC 133 "semantic prompt" sequences (emitted by fish out of the box; bash/zsh need a shell integration snippet). This enables:
- Jump between prompts in the scrollback:
[/]in scroll and search modes - Select a command with its whole output:
min scroll mode, or triple-click inside the output (opt-out of triple-click withosc133_command_selectionin the config) - Copy the last command's output to the clipboard:
cin scroll mode
Also in the selection department: word boundaries for double-click selection are now configurable with word_separators.
More info: https://zellij.dev/documentation/shell-integration.html
New UI
Title frames: pane frames now default to a single title line above each pane instead of a full border. To restore the classic look:
pane_frame_style "full"
The style can also be changed at runtime with zellij action set-pane-frame-style or the new SetPaneFrameStyle keybinding action.
Stacked lists: stacked panes now render as a list of one-line titles with the expanded pane pinned to the bottom, including exit-status indication in collapsed titles and bulk float/embed operations. To restore the previous in-place rendering:
stacked_pane_list false
Some mouse behaviors can also now be specifically opted out of in the config: mouse_hover_tips false (hover help tips) and mouse_scroll_resize false (Ctrl + scroll wheel resizing).
Mobile Web UI + PWA
The built-in web client now detects mobile browsers and switches to a dedicated touch interface: pane/tab pickers, an on-screen keyboard, panning and fit toggling, single-pane fullscreen and a light theme. The web client can also be installed as a standalone app (PWA) directly from the browser, including behind a base_url reverse-proxy prefix.
Per-Client Tab Sizes
Each tab is now sized according to the viewports of only the clients currently viewing it. Clients focused on different tabs no longer force the whole session down to the smallest terminal; clients on the same tab converge to a common size.
Desktop Notifications
Given the prevalence of a few different desktop notifications protocols, Zellij now supports all and consolidates them to a protocol the host (probably) supports, detected by relevant env variables. Previously Zellij would forward OSC99 directly to the terminal, now this is conditioned on the terminal actually supporting OSC99. Zellij now also supports OSC9 and OSC777 in the same way.
Focus Last Pane and No-UI Fullscreen
A new FocusLastPane action returns focus to the previously focused pane (Ctrl p + ;, or Alt \ in any mode). A new ToggleFocusNoUiFullscreen action (Ctrl p + Shift f) makes the focused pane cover the entire display, including the UI bars (zen mode). Floating panes can now be made fullscreen as well.
CLI Additions
zellij --layout-string <KDL>- use a raw KDL layout string instead of a layout file (new tabs inside a session, a new session otherwise). Also available onnew-tab,override-layoutandswitch-session--no-focus- open panes, plugins and tabs in the background without changing any client's focus (onrun,edit,plugin,new-pane,new-tab,launch-plugin)--tab-id- target a specific tab (onrun,edit,pluginand many actions)zellij action new-pane --pane-id- choose which pane to replace with--in-place- New actions:
focus-last-pane,toggle-no-ui-fullscreen,set-pane-frame-style,set-dark-theme,set-light-theme,toggle-theme
Some of the new features come with new default keybindings. The release notes screen detects which of these are missing from existing config files and offers to add them with a single keypress.
Plugin API
New commands include new_tab_unfocused, new_tiled_pane_in_tab, focus_last_pane, focus_host_session, toggle_focus_no_ui_fullscreen, set_pane_frame_style, toggle_floating_panes, get_session_list and set_soft_keyboard. New events include CommandChanged, InitialKeybinds, HostTerminalThemeChanged, SoftKeyboardVisibilityChanged, HintText and ActivePaneScroll.
Source-level breaking changes for plugin authors:
kill_sessions,delete_dead_sessionanddelete_all_dead_sessionsnow returnResult<(), String>and block until acknowledged (the old wire protocol variants remain valid, so old plugin binaries keep working)open_command_pane_in_new_tabnow requires theRunCommandspermission, andopen_editor_pane_in_new_tabrequiresOpenFiles- The
PaneRenderReportWithAnsievent was removed; the plain-textPaneRenderReportremains
Clipboard Reads
It's now possible to opt in to allowing terminal programs to read the clipboard through OSC52. This is disabled by default for security reasons, and opting in to it is only recommended with care. An opt-in would mean that any program running in the terminal (including over an SSH connection) can read your clipboard without your knowledge. This can be enabled with dangerously_enable_paste_buffer_read true.
Notes for Packagers and Distributors
- MSRV raised from 1.92.0 to 1.95.0
- YAML converter removed: the
convert-config,convert-layoutandconvert-themesubcommands and the automatic YAML-to-KDL conversion at startup are gone. Users with YAML-era files must convert them with a Zellij release of 0.44.x or older - Manpage removed: the manpage source and its build integration were dropped; packages should no longer attempt to install one
- Dependency floors raised: clap 4.6, crossterm 0.29, nix 0.30, vte 0.15, miette 7.6, notify 8.2, axum-extra 0.12, axum-server 0.8, rcgen 0.14 and others - relevant for distros patching to system crate versions
- clap 4 migration side effects: repeating a flag overrides the previous value instead of erroring
- Bundled plugin wasm files can now be properly unbundled when stripped (#5433)
cargo xtask runinformational output moved to stderr, socargo xtask run -- setup --generate-completion fish > fileproduces a clean file
For the full list of changes, see the CHANGELOG.
Addendum: Zellij.online
Want to get a sneak peak at something the Zellij maintainers have been working on?
Check out https://zellij.online
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