256 Commits
Author SHA1 Message Date
Oli Treadwell (he/him) a162323384 fix: correct typos in docs and code comments (#5599) 2026-09-09 19:16:46 +02:00
MsfPablo af38660c58 fix typos in code comments (#5562) 2026-08-31 21:00:55 +02:00
Thomas Dickson f4d38d6510 fix(plugins): release a CLI pipe when the plugin handling it crashes (#5537)
apply_pipe_message_to_plugin sends UnblockCliPipes on every success path,
including the path for old plugins that do not export `pipe`, but not when
the call into the plugin fails. When a plugin traps while handling a pipe
message, both call sites in wasm_bridge only log and call handle_plugin_crash,
which paints a loading-indication error on the pane and does not unload the
plugin. The (plugin_id, client_id) entry therefore stays in PendingPipes and
the `zellij pipe` client blocks until the plugin is unloaded or the session
ends.

Move the body to apply_pipe_message_to_plugin_inner and have the wrapper
release the pipe on any error before re-returning it, so neither call site
can forget.

Adds a regression test driving a fixture-plugin branch that panics while
handling a pipe, asserting UnblockCliPipeInput is emitted at crash time
rather than at teardown.
2026-08-28 10:20:24 +02:00
habeebweeb 52f1210710 fix first run wizard unlock first nested session keybinds (#5539) 2026-08-26 09:42:44 +02:00
Aram Drevekenin 18cb94e1cc Release notes (in the about plugin) for the 0.45 release (#5498)
* vesion 0.45.0 release notes

* update release notes
2026-08-20 09:41:18 +02:00
Aram Drevekenin 070b9c3d1c Fixes before 045 (#5492)
* fix: keep single-pane tabs when serializing, stop the busy-spin on IPC disconnect, and make client-less CLI actions either work or fail loudly

* fix: some tab closing/ordering issues

* test: integration coverage for OSC 133 selection, scroll retention, paste-read opt-in, theme actions, and input fragmentation

* rendering-width regression tests

* fix: forward alt+mouse events into a guest pane the client is descended into

* fix: alt + [] delay in non-kitty

* allow disabling mouse hover tips while keeping the other effects

* more osc133 actions

* fix: base mode race when changing keybinding presets

* fix compilation warnings

* make releases drafts and remove diagnostic logging

* add pr
2026-08-20 08:04:12 +02:00
Aram Drevekenin 4156b50233 fix: close session manager if switching sessions (#5486) 2026-08-17 13:37:34 +02:00
Aram Drevekenin 3239d37b40 Native web mobile UI (#5441)
* initial chrome

* mobile state

* feat(mobile-web): implement browser→server actions (fit toggle, single-pane fullscreen, pane/tab focus) with fullscreen-truth reconciliation

* panning

* remove mobile plugin

* fix first load race

* improve web handshake

* rustfmt

* cleanups

* moar cleanups

* add bundle asset check to ci

* fix(mobile-web): tab-scope co-presence, yield single-pane to desktop clients, fix render-mode desync

* make mobile use no-ui fullscreen

* client side welcome screen for mobile

* attach web clients to first tab on tiles surface

* fix: opening new pane in mobile single mode no longer exits mobile single mode

* mobile chrome light theme support

* fix server races and flaky tests

* rustfmt

* fix flakes

* add pr
2026-08-05 15:32:53 +02:00
Aram Drevekenin 9969ed10b2 Dep upgrades for debian (#5420)
* chore(deps): upgrade base64 0.22, colored 3.1, crossterm 0.29, dialoguer 0.11, directories 6.0, highway 1.2, prost 0.12.6, strip-ansi-escapes 0.2.1, suggest 0.5.1

* chore(deps): upgrade miette 7.6, nix 0.30, notify 8.2, notify-debouncer-full 0.5

* vte 0.15

* clap 4.6

* workspaceify plugin deps

* don't send empty fs watch events
2026-07-28 12:05:38 +02:00
Aram Drevekenin ea07e2d5b6 Nested session handling (#5417)
* fix: theme query and updated pixel dimensions

* add no-ui-fullscreen key/action/capability

* protocol core

* integration test harness

* fix integration tests

* fix flaky tests

* nested ui (dimming) and directional focus initial implementation

* integration tests for nested ui dimming and directional focus

* initial full screen nesteed implementation

* fix: keep hidden floating panes hidden across nested no-ui fullscreen

* fix integration tests

* no ui fullscreen integration tests

* hardening behavior/tests

* fix(nested): re-derive descend/dim on host tab switch and new-tab so clicking dimmed chrome ascends

* initial modal implementation

* initial ui improvements

* fix integration tests

* improve nested selection ui

* nested session modal refactoring and tests

* improve integration test speed somewhat

* some ui adjustments

* simplify full/auto nested session handling

* hints in compact-bar

* guest stdin leak fix

* allow floating panes to be fullscreen

* make nested session handling configurable

* protocol reannounce

* refactor: naming confusion

* improve ux somewhat

* rustfmt

* merge fixes

* improve integration test rate limiting (fix ci)

* add pr
2026-07-27 18:24:37 +02:00
Aram Drevekenin 4bfda976b1 Allow creating panes/tabs from the CLI without changing focus to them (#5346)
* feat: allow opening panes and tabs from the cli without focusing them

* rustfmt

* fix flake

* rustfmt

* add pr
2026-07-09 16:52:50 +02:00
Aram Drevekenin 5b310ada79 UI tweaks (#5337)
* remove dimmed

* clearer list ui

* fix integration tests

* rustfmt

* move hint to tab-bar

* redesign stack list

* rustfmt

* fix e2e

* add pr
2026-07-06 22:09:06 +02:00
Aram Drevekenin 245f5141c9 Title frames (#5318)
* initial implementation

* improve single line title design

* hint text plugin infra

* add proto regen task

* display alt text in status bar

* don't display text with full frames

* style alt hover text

* fix + style control own pane hover

* make multiplayer indications responsive

* update snapshots

* plugin api

* single pane as tab

* better scroll styling

* fix tests

* tab-bar plus hover

* plugin surface tests

* integration tests

* adjust all integration tests

* reduce hover noise

* add pane id to in place

* more integration tests

* style: rustfmt

* update plugin assets

* update assets and snapshots

* add pr
2026-06-29 18:10:59 +02:00
DawidPietrykowskiandAram Drevekenin ebd731b0ff feat(panes): FocusLastPane action (#4241)
* feat(panes): focus last pane (#4142)

* add tests

* add client id parameter to `add_floating_pane`

* add action for floating panes

* add tests for floating panes

* add keybinds to configs

* rebase fixes

* simplify focus logic when adding stacked pane

* formatting fix

* formatting fix 2

* fix: make sure expanding pane always focuses it for all clients in stack

* add pr

* fix rebase

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
2026-06-25 18:12:51 +02:00
Aram Drevekenin b6a5ad0e5a Mobile layout (#5241)
* phase 2+3

* initial mobile plugin (phases 4 + 5 + 6)

* some bugfixes

* implement stage 7

* mobile interface improvements

* improve mobile pane/tab picker

* more ui improvements and fixes

* various mobile fixes

* some mobile fixes

* mobile keyboard triggering fix

* some cleanups

* initial plugin keyboard implementation

* improve keyboard hit zones

* improve keyboard

* pinch resize

* pinching fixes

* implement scrolling + panning

* initial keyboard resizing

* fix: mobile first render issues

* keyboard responsiveness

* fix some issues with the keyboard

* implement fit

* fix mobile scrolling

* add tilde cell to compact

* improve mobile keyboard

* fix starting mobile terminal font to natural keyboard size

* fix mobile resize blank screen flash

* shadow focus for mobile

* more keyboard fixes

* improve mobile status bar

* fix: render plugins to mobile clients

* allow opening new panes/tabs from the mobile plugin

* allow configuring

* fix dot slash

* improve mobile native soft keyboard interaction

* switch to native keyboard - initial implementation

* dirty hacks, but phone keyboard works now

* adjust keyboard help strip

* fix cursor in mobile

* fix keyboard and help line

* rename keyboard to modifier bar

* allow starting new session

* make clicking session name bring us to new session menu

* allow switching to desktop from the mobile ui

* mobile welcome screen initial implementation

* mobile welcome screen fixes

* various welcome screen fixes

* more mobile fixes

* moar mobile fixes

* mobile ui redesign

* fix: swallowed backspace bug

* switch session screen improvement

* touch up some interfaces

* refactor: move mobile state to own struct

* refactor: move fit resizing to the server

* remove dead flash code

* some cleanups

* refactor: clear fit on close

* refactor: improve fit api

* refactor: pane sync functions

* refactor: mouse

* refactor: break into modules

* some cleanups for the sessions screen

* fix scrolling and other stuff

* refactor: sessions screen

* refactor: panes screen

* refactor: new session screen

* refactor: menu screen

* refactor: render

* cleanups

* refactor: plugin structure

* remove unused welcome screen path

* Rename api

* refactor input.js

* cleanup useless comments

* fit/mobile refactoring

* take out the garbage

* remove more comments

* remove mobile flash on startup/attach

* fix: various mobile startup issues

* fix space bugs

* cleanup

* rustfmt

* fix windows build

* adjust modifier bar ui

* add pr
2026-06-10 16:50:55 +02:00
Aram Drevekenin fc6c5942a1 Welcome screen del fix (#5160)
* fix: session-manager delete

* rustfmt

* add pr
2026-05-12 12:20:23 +02:00
cossio 441158f67b Fix session-manager Esc/Ctrl-c to close plugin instead of hiding (#5055) 2026-05-11 16:13:46 +02:00
Aram Drevekenin aa29cbaf66 Some idle CPU and disk/io fixes, new CommandChanged plugin Event (#5063)
* initial implementation

* fix mouse cpu spam

* prevent excess metadata write and prune sessions on startup

* consolidate CommandChanged and PaneCommandChanged

* tests

* rustfmt

* add pr
2026-04-17 14:08:48 +02:00
Aram Drevekenin 8ce05f0bbd Layout string flag (#4956)
* allow sending a stringified layout with --layout-string

* add --tab-id to all the things

* fix windows tests

* add pr
2026-03-30 16:02:09 +02:00
Aram Drevekenin 12ee607532 fix: performance regression when switching tabs (#4918)
* remove pane render report

* only collect pane contents if pane should render

* add logs

* conditional keybinding serialization

* remove logs

* rustfmt

* fix tests

* tests

* rustfmt
2026-03-26 12:49:05 +01:00
Aram Drevekenin 93bc9ec00f fix: do not reset layout selection in layout manager (#4919) 2026-03-26 12:48:24 +01:00
Aram Drevekenin a6a6440614 Fix cli blocking logic and update dependencies (#4881)
* fix: do not unblock blocking commands for other unblock conditions

* update deps

* allow trailing : in file path detection and change log format to match
2026-03-21 20:19:37 +01:00
divensanddivens 3fa7744906 Add windows support in strider (#4854)
* Add Windows path support to strider plugin

Strider is a WASM plugin where std::path::PathBuf uses Unix semantics,
so Windows backslash paths break parent(), join(), strip_prefix(), etc.

Fix by normalizing all incoming paths to forward slashes at plugin
boundaries and converting back to native backslashes for display. A new
platform.rs module detects the host OS at runtime from the initial_cwd
format and centralizes all platform-aware logic.

Also fix scan_host_folder on the server side: canonicalize
plugin_host_folder so the starts_with security check works on Windows,
where canonicalize() adds the \?\ prefix.

* Add virtual root view for drive and WSL navigation in strider

On Windows, navigating up from a drive root (e.g. C:\) now shows a
"Computer" view listing all available drives and WSL distributions.
Drives are enumerated via GetLogicalDriveStringsW and WSL distros
via `wsl -l -q` (since read_dir on \wsl.localhost fails with OS
error 64/67). Drive letters appear before WSL entries, which are
displayed as "Ubuntu-24.04 (WSL)" etc. On non-Windows platforms,
behavior is unchanged.

* Rename ListHostEntries to ListWindowsVolumes and gate behind FullHdAccess

The old name was misleading — on Unix it just returned `/`, which isn't
"listing host entries." Rename to ListWindowsVolumes to make the
Windows-specific intent explicit, gate behind FullHdAccess permission,
and replace the Unix implementation with a log::error since the command
is not meaningful on non-Windows platforms.

* Replace direct array indexing with .get() in strider platform detection

Use safe accessors and matches! macro instead of direct byte indexing
for bounds-checked access patterns.

---------

Co-authored-by: divens <divens.dev@gmail.com>
2026-03-21 19:20:32 +01:00
Aram Drevekenin 4ba41c085a Release notes and fixes (#4879)
* release notes

* fix some link issues

* rustfmt

* fix click wording
2026-03-20 17:28:36 +01:00
Aram Drevekenin bbba23c04f change layout manager key (#4865) 2026-03-18 10:24:29 +01:00
Aram Drevekenin 91e7297b63 Warning and duplication cleanups (#4857)
* cleanup compilation warnings

* consolidate EditScrollbackRaw into EditScrollback
2026-03-16 10:37:45 +01:00
Aram Drevekenin a1e2247547 Ansi dump support (#4848)
* add missing pane-id and tab-id arguments to all cli actions

* rustfmt

* dump-screen --ansi

* edit-scrollback --ansi

* add --ansi to subscribe

* add tests for ansi additions

* add ansi render report to plugins

* rustfmt

* fix e2e tests

* add pr
2026-03-14 08:35:00 +01:00
Aram Drevekenin 216f391b51 fix: atomic floating pane issues with the about screen (#4834)
* fix: atomic floating pane issues with the about screen

* rustfmt

* add pr
2026-03-11 09:40:11 +01:00
Aram Drevekenin 578a7db7d7 Layout manager ux fixes (#4831)
* close self after applying and rename tab as layout

* general ui/ux fixes

* change session manager title on startup

* add pr
2026-03-10 22:47:09 +01:00
Aram Drevekenin 2035e052f3 Highlight priority levels (#4827)
* highlight priority levels

* add pr
2026-03-10 10:18:44 +01:00
Aram Drevekenin e7985f0d77 Single screen session manager (#4821)
* initial implementation

* adjust ui

* preserve selection

* width responsiveness

* behavior fixes

* fix: do not count suppressed panes

* ui improvements

* multi-screen config and prompt hint

* tests + refactoring

* improve performance

* add pr
2026-03-09 13:31:08 +01:00
Aram Drevekenin 85d29a1e66 fix: click links with alt-click (#4809) 2026-03-06 15:23:17 +01:00
Aram Drevekenin 903cdf5d32 Click file paths to open in editor, allow plugins to change styles and hover of viewport (#4802)
* initial implementation

* implement hover

* add styles and foreground/background emphases, fix upsert hover collisions

* initial implementation of link plugin

* suppress highlighting + clicks on unfocused and mouse mode panes

* also make italic

* fix env var and ~ expansions

* fix regex issues and add defensive validations

* fix tests and add plugin assets

* add tests

* refactor all the things

* add pr
2026-03-05 21:13:02 +01:00
Aram Drevekenin f618b0653a Visual indication for terminal bells (#4781)
* initial implementation

* rustfmt

* allow disabling with config

* add missing kdl

* add pr

* fix tests
2026-03-03 08:20:04 +01:00
Aram Drevekenin 56d31239cb fix: translate plugin paths in api (add missing methods) (#4767)
* fix: translate plugin paths in api (add missing methods)

* fix test
2026-02-25 14:44:58 +01:00
Aram Drevekenin 8cd6286c3f remove sequence plugin (#4761) 2026-02-24 13:10:40 +01:00
Aram Drevekenin 2f069143fd Allow closing replaced panes when opening panes in place (#4760)
* allow close_replaced_pane from keybind and cli

* rustfmt

* add pr
2026-02-24 10:37:08 +01:00
Aram Drevekenin b0584cae42 fix: tab-bar wrapping for extremely small widths (#4728)
* fix: tab-bar wrapping for extremely small widths

* add pr
2026-02-19 11:38:02 +01:00
Aram Drevekenin 4e66a0beff Revamp the sequence plugin (#4713)
* initial pipe interface

* initial open_x_pane_in_new_tab plugin api implementation

* fix: send CommandPaneExited for command panes opened as initial_terminals in new tabs from plugins

* open panes in place of specific pane id plugin commands - initial implementation

* sequence and plugin api ux

* focus self when starting

* combine ui and pipe paths

* highlight selected pane

* initial sequence removal of editing capabilities

* fix: translate plugin paths in api

* properly trim commands when loaded from pipe or pasted text

* minor ux fixes

* get ctrl c to work properly

* behavior fixes

* more ui fixes

* fix tests

* close tab and end sequence properly

* default to AND

* zellij sequence alias

* add alias

* consolidate paths

* rustfmt

* fix ui padding

* add pr

* fix: reset scrolling when resetting terminal state
2026-02-17 15:43:28 +01:00
Aram Drevekenin e887164a0a Allow plugins to read env vars present upon session creation (behind permission) (#4700)
* allow plugins to read environment variables

* rustfmt

* add pr
2026-02-12 18:35:55 +01:00
Aram Drevekenin 90da559f38 Propagate plugin alias config changes to plugins (#4698)
* propagate plugin alias config changes to plugins

* rustfmt

* add pr
2026-02-12 16:12:26 +01:00
Aram Drevekenin 860e8e323a Improve plugin API ergonomics and add CLI goodies (#4690)
* return created tab_id from relevant plugin API methods

* add to cli

* return Option<PaneId> in plugin API methods that create panes

* return created pane_id in cli for relevant actions

* allow plugins to query for pane_info based on pane_id

* allow plugins to query for TabInfo by its id

* allow plugins to query pane command/cwd synchronously

* zellij action list-panes

* style and formatting

* fix e2e tests

* add pr
2026-02-10 10:42:46 +01:00
Aram Drevekenin 82178222a2 Handle errors in route loop (#4655)
* handle errors in route thread

* fix session-manager deadlock on startup

* rustfmt

* add pr
2026-01-29 13:35:24 +01:00
Aram Drevekenin cdbdf2b667 Allow saving current session for resurrection on demand (#4654)
* initial implementation

* session manager ui and plugin api

* remove event

* cleanups and formatting

* add pr
2026-01-29 11:53:56 +01:00
Aram Drevekenin 432c6d7491 Fix tiled new pane borderless (#4618)
* allow opening tiled pane as borderless

* rustfmt

* add pr

* fix e2e tests
2026-01-20 17:11:26 +01:00
Aram Drevekenin 03c86d09cf Allow toggling pane frames for specific panes (#4615)
* initial implementation

* add borderless to edit and plugin cli commands

* allow changing existing pane to borderless

* allow setting in layouts and keybindings

* get to work through the existing plugin api commands

* fix when applying (swap) layouts

* fix tests

* allow setting pane as bordered (borderful?) when changing its coordinates (eg. through the cli)

* allow explicitly setting a pane as bordered or borderless without toggling

* rustfmt

* adjust snapshots

* docs(changelog): add PR
2026-01-20 10:13:37 +01:00
Aram Drevekenin f6584b0131 fix: properly quit welcome screen when switching sessions (#4605)
* fix: properly quit welcome screen when switching sessions

* fix tests and add PR to changelog
2026-01-15 09:07:03 +01:00
Aram Drevekenin 98dc619856 Deps upgrade (#4603)
* upgrade wasmi to 0.51.3

* update default plugins as workspace dependencies

* upgrade mio to 0.8.11

* upgrade native-tls to 0.2.14

* update url package
2026-01-13 18:02:19 +01:00
Aram Drevekenin 4a27ceea0d Layout manager (#4601)
* ad plugin override_layout command

* watch available layouts and report to plugin thread

* Event::AvailableLayoutInfo

* save layout command

* refactor save_layout

* fix api and permissions

* delete_layout API command

* edit layout in place API

* edit layout response through api

* propagate layout parsing errors

* generate random name plugin api

* dump stringified layout API

* synchronicity dump_session_layout and include LayoutMetadata in sync response

* parse_layout plugin api

* fix: default to default layout dir in plugin api

* rename_layout plugin command API

* initial implementation of multi-tab override

* apply to multiple tabs

* allow applying to only the active tab

* add tab/pane names to layout parsing metadata

* indicate is_builtin_plugin in PaneMetadata

* get_layout_dir plugin API command

* consolidate (and fix) is_builtin_plugin logic

* fix bad ret

* allow dumping the layout for just a specific tab in the session

* get focused pane and tab sync api

* color last substring variants

* add plugin

* update assets

* fix tests

* add e2e tests for new plugin apis

* update ui with new shortcut

* rustfmt

* docs(changelog): add PR
2026-01-13 11:27:07 +01:00
Aram Drevekenin 1296a46a68 Read only web tokens (#4551)
* initial implementation

* fix race condition potentially allowing read-only clients to gain write access

* clear read only status on disconnect

* cleanups and formatting

* fix tests

* refactor first message + ipc pipe creation out of trait

* fix web tests

* fix web tests again

* refactor: move os_input connection establishment to session manager trait

* add read-only-token tests

* fix: identify watchers as web-clients when they are and enforce no-web-clients for them as well

* identify watcher web clients on the server

* fix tests

* cleanups and formatting

* add read-only-tokens to the plugin api

* update share plugin ui for read-only tokens

* cleanups and formatting

* docs(changelog): add PR
2025-12-16 09:16:41 +01:00