aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
...
* Fix bce and other issues (#4992)Aram Drevekenin2026-04-02
| | | | | | | * fix bce and other issues * rustfmt * add pr
* fix(e2e): stabilize tests and support Apple Silicon local dev (#4952)Thomas Linford2026-04-01
| | | | | | | | | | - cross-compile musl binary on macOS via cargo-zigbuild, with arch-independent symlink so snapshots are stable across x86_64 and aarch64 - kill_running_sessions() now calls stop_zellij() instead of start_zellij(), eliminating 3s startup per test - prevent steps from firing prematurely by tightening completion conditions and adding re-send logic for garbled keys
* Move from native-tls to rustls in the remote client (mirrors the web server) ↵Aram Drevekenin2026-03-31
| | | | | | | | | | | (#4972) * native-tls -> rustls * add/update tests * rustfmt * add pr
* Preserve scrollback for partial scroll regions starting at top (#4941)Nitin Gupta2026-03-31
| | | | | | | | | | | | | | | | | | | | | | | | | * Preserve scrollback for partial scroll regions starting at top When a partial scroll region starts at row 0 (the top of the viewport), lines scrolled off the top were silently discarded via viewport.remove(0) instead of being transferred to lines_above (the scrollback buffer). This affected both add_canonical_line and rotate_scroll_region_down. Applications like Codex CLI use partial scroll regions to push rendered content into terminal scrollback (via DECSTBM + newlines). In tmux, these lines are preserved in the scrollback buffer and accessible via copy-mode scrolling. In Zellij, they were lost, causing mouse wheel scrolling to show only stale pre-application content. Transfer lines to lines_above when scroll_region_top == 0 and alternate screen is not active, matching the behavior of tmux. * add selection handling to CSI S, add matching handling for CSI M, add tests * add pr --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
* Proper error when providing layout name with a tab (#4958)Aram Drevekenin2026-03-30
| | | | | * proper error when providing layout name with a tab * rustfmt
* Error on socket paths that are too long (#4957)Aram Drevekenin2026-03-30
| | | | | * error on socket paths that are too long * add pr
* Layout string flag (#4956)Aram Drevekenin2026-03-30
| | | | | | | | | * allow sending a stringified layout with --layout-string * add --tab-id to all the things * fix windows tests * add pr
* docs(changelog): recent windows fixesAram Drevekenin2026-03-28
|
* fix: resolve Windows compilation warnings (#4890)divens2026-03-28
| | | | | | | - Consume unused CompilationResult from embed_resource::compile in build.rs - Gate std::io::prelude import with #[cfg(unix)] since it's only used by daemonize_web_server which is unix-only Co-authored-by: divens <divens.dev@gmail.com>
* fix(windows): normalize temp socket paths (#4923)Hiro2026-03-28
|
* Support OSC-99 desktop notifications (#4931)Aram Drevekenin2026-03-28
| | | | | | | | | | | | | | | * initial implementation * tests * fix: always report to zellij, only report to app if it wants a report * rustfmt * fix: always report capabilities to panes requesting them * rustfmt * add pr
* CLI focus-pane-id and are-floating-panes-visible actions (#4926)Aram Drevekenin2026-03-27
| | | | | | | | | * add zellij action focus-pane-id * zellij action are-floating-panes-visible * fix e2e tests * add pr
* docs(changelog): riscv64 binariesAram Drevekenin2026-03-27
|
* ci: add riscv64 to release binaries (#4913)Bruno Verachten2026-03-27
| | | | | | | | | * ci: add cross-compilation test for riscv64 * ci: add riscv64 to release binaries * ci: switch riscv64 to musl target, consistent with other Linux targets * ci: remove separate cross-compile workflow (not needed per reviewer)
* docs(changelog): update recent PRsAram Drevekenin2026-03-26
|
* fix: performance regression when switching tabs (#4918)Aram Drevekenin2026-03-26
| | | | | | | | | | | | | | | | | | | * remove pane render report * only collect pane contents if pane should render * add logs * conditional keybinding serialization * remove logs * rustfmt * fix tests * tests * rustfmt
* fix: do not reset layout selection in layout manager (#4919)Aram Drevekenin2026-03-26
|
* docs(changelog): theme prAram Drevekenin2026-03-26
|
* fix: user themes from `~/.config/zellij/themes` not loaded on session start ↵Luca Pattocchio2026-03-26
| | | | | | | | | | | (#4892) * Fix user themes in config folder not loaded on session start * preserve layout config dir --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
* fix: properly display web server status with default ports in share plugin ↵Aram Drevekenin2026-03-26
| | | | | | | (#4908) * initial implementation * add pr
* chore(release): v0.44.0Aram Drevekenin2026-03-23
|
* Fix cli blocking logic and update dependencies (#4881)Aram Drevekenin2026-03-21
| | | | | | | * fix: do not unblock blocking commands for other unblock conditions * update deps * allow trailing : in file path detection and change log format to match
* Add windows support in strider (#4854)divens2026-03-21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* Release notes and fixes (#4879)Aram Drevekenin2026-03-20
| | | | | | | | | * release notes * fix some link issues * rustfmt * fix click wording
* adjust badges location in readmeAram Drevekenin2026-03-19
|
* fix sponsored links truncationAram Drevekenin2026-03-19
|
* fix(windows): avoid hang when share plugin starts web server (#4863)divens2026-03-19
| | | | | | | | Use cmd.status() instead of cmd.output() on Windows to prevent pipe handle inheritance from blocking indefinitely. cmd.output() creates pipe handles that the grandchild web server process inherits via CreateProcess bInheritHandles, keeping them open and preventing EOF. Co-authored-by: divens <divens.dev@gmail.com>
* Fix Windows config/data paths and consolidate path helpers (#4852)divens2026-03-19
| | | | | | | | | | | | | | | | | | | | | | | | * Fix Windows config/data paths and consolidate path helpers Move platform-specific path logic into home_unix.rs / home_windows.rs behind a shared interface. Consolidate duplicated path helpers from setup.rs into home.rs. Use Display formatting for paths in setup info output to avoid escaped backslashes on Windows. - Remove organization from ProjectDirs to get clean Zellij\ paths - Add Windows-specific ProgramData paths for system config/data - Remove duplicated find_default_config_dir, get_default_data_dir, xdg_config_dir, xdg_data_dir, home_config_dir, get_layout_dir, get_theme_dir from setup.rs (now in home.rs) * Restore quoted paths in setup --check and org qualifier on non-Windows Restore quotation marks around paths in setup --check output, and keep the "org", "Zellij Contributors" qualifier in ProjectDirs on non-Windows platforms to preserve existing config directory locations. --------- Co-authored-by: divens <divens.dev@gmail.com>
* change layout manager key (#4865)Aram Drevekenin2026-03-18
|
* Minor fixes and updates (#4861)Aram Drevekenin2026-03-17
| | | | | * add all blocking flags to action new-pane * security updates
* fix: do not reuse terminal pane ids, clean up tokio tasks (#4859)Aram Drevekenin2026-03-16
| | | | | | | * don't reuse terminal pane_ids, perform some cleanups * rustfmt * add pr
* feat(themes): add Flexoki Dark theme (#4555)Kaan Ozdokmeci2026-03-16
|
* Add Windows MSI installer with WiX v6 (#4847)divens2026-03-16
| | | | | | | | | | | | | | | | | | | | | | | | | * Add Windows MSI installer with WiX v6 Build a dual-scope MSI installer that lets users choose per-user (%LocalAppData%\Zellij) or per-machine (Program Files\Zellij) install, with automatic PATH configuration and clean uninstall support. - Custom UI based on stock WixToolset.UI.wixext dialogs to work around the long-standing WixUI_Advanced dual-scope bug (wixtoolset/issues#7137) - Custom folder resolution CAs (SetFolderPerUser/SetFolderPerMachine) - Embed application icon into zellij.exe via embed-resource - Icon shown in Add/Remove Programs via ARPPRODUCTICON - MSI build integrated into release.yml CI workflow * Add MSI installer to no-web build and fix artifact naming - Add MSI build steps to build-release-noweb job - Add SHA256 checksums for MSI artifacts - Pin WixToolset.UI.wixext to 6.0.2 to avoid v7 RC incompatibility - Use -installer suffix after target in artifact names --------- Co-authored-by: divens <divens.dev@gmail.com>
* fix: sixel-image aspect ratio and opacity issues (#4858)Aram Drevekenin2026-03-16
| | | | | * upgrade sixel-image * add pr
* Warning and duplication cleanups (#4857)Aram Drevekenin2026-03-16
| | | | | * cleanup compilation warnings * consolidate EditScrollbackRaw into EditScrollback
* Ansi dump support (#4848)Aram Drevekenin2026-03-14
| | | | | | | | | | | | | | | | | | | | | * 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
* Add `--pane-id` and `--tab-id` to all relevant CLI commands (#4846)Aram Drevekenin2026-03-13
| | | | | | | | | | | * add missing pane-id and tab-id arguments to all cli actions * rustfmt * fix tests * update e2e snapshots * add pr
* Fix debug-mode stack overflow on Windows (#4843)divens2026-03-12
| | | | | | | | | | | | | | | | * Fix debug-mode stack overflow on Windows The clap-derived augment_subcommands for CliAction (~70 variants) produces a >1 MB stack frame in debug mode, overflowing the Windows default 1 MB main-thread stack. Increase it to 8 MB via linker flag to match Linux. Only applies to debug builds; release optimizes the frame down and doesn't need it. * move file and include dev-opt --------- Co-authored-by: divens <divens.dev@gmail.com> Co-authored-by: Aram Drevekenin <aram@poor.dev>
* fix: pass NotificationEnd to KeybindPipe to prevent 1s timeout (#4638)Hüseyin Gence Erdağı2026-03-12
| | | | | | | | | | | * fix: pass NotificationEnd to KeybindPipe to prevent 1s timeout * fix: threded down complete signal * fix: shadowing fixes --------- Co-authored-by: Gence Erdagi <gence@Gence.localdomain>
* fix: restore console input mode on exit to prevent mouse sequence leak (#4829)divens2026-03-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix: restore console input mode on exit to prevent mouse sequence leak On Windows with WezTerm (VT input path), enable_vt_input() sets ENABLE_MOUSE_INPUT and ENABLE_VIRTUAL_TERMINAL_INPUT on the console handle. crossterm's disable_raw_mode() only ORs back LINE_INPUT, ECHO_INPUT and PROCESSED_INPUT — it never clears those flags. After Zellij exits, ConPTY continues delivering mouse events as VT escape sequences (urxvt mode 1015) into the shell's stdin, causing visible garbage like [555;99;32M at the prompt. Fix: save the original console mode before enable_vt_input() modifies it, and restore it on all exit paths via a new restore_console_mode() method on the ClientOsApi trait. Also move disable_mouse() before unset_raw_mode() on error/panic paths for correct ordering. * Move Windows VT input state management to stdin_handler_windows.rs Move enable_vt_input, restore_vt_input, ORIGINAL_CONSOLE_MODE, and related windows-sys imports from the shared stdin_handler.rs into stdin_handler_windows.rs to keep platform-specific code in _windows files per project convention. --------- Co-authored-by: divens <divens.dev@gmail.com>
* fix: handle short writes in write_to_tty_stdin to prevent paste truncation ↵Edgars Nemše2026-03-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (#4818) * fix: handle short writes in write_to_tty_stdin to prevent paste truncation On macOS the kernel PTY buffer is only 4-16 KiB, so a single write() call for a large paste returns a short write count rather than blocking until all bytes are accepted. The current code returns this partial count without retrying, silently dropping the remaining bytes. This wraps the write in a retry loop that handles: - Short writes (advances the buffer offset and retries) - EINTR (retries immediately) - EAGAIN (sleeps 1ms then retries) Without this fix, pasting ~1 KiB+ of text into a terminal pane loses everything beyond the first kernel-buffer-full. Includes a test that exercises the fix using a real PTY pair with O_NONBLOCK set on the master fd to force short writes. * fix: cap EAGAIN retries at 50 to prevent infinite busy-wait Per reviewer feedback, add a retry counter that caps consecutive EAGAIN retries at 50 and logs an error if the limit is reached. The counter resets on any successful write progress, so it only triggers when the PTY is genuinely stuck. * fix: use poll(POLLOUT) instead of sleep-retry loop for EAGAIN handling Replace the 50-retry sleep(1ms) busy-wait with poll(POLLOUT, 5s timeout). This properly waits for fd writability without CPU spinning and returns an error on timeout instead of silently returning Ok(partial) — which the caller (pty_writer_main) would ignore, causing silent data loss. Tests: - write_to_tty_stdin_delivers_all_bytes: remove flaky reader delay, use concurrent reader, move master close after reader join to avoid macOS kernel buffer flush race - write_all_to_fd_errors_on_stuck_pty: new test verifying timeout returns Err on stuck PTY (uses 100ms timeout for speed) * fix: re-queue partial PTY writes instead of blocking PtyWriter thread Replace the poll(POLLOUT) blocking loop with a non-blocking re-queue approach as suggested in review. On partial write or EAGAIN: - write_to_tty_stdin now drains as much as the kernel accepts in one pass and returns the count (may be 0 on EAGAIN) - PtyWriter re-queues unwritten bytes back onto its own channel, letting other terminals' writes proceed between retries - Retry count tracks consecutive zero-progress attempts (reset on any forward progress), drops bytes after 50 retries with log::error - yield_now() before re-queue on zero progress to avoid tight spin - Guard against write() returning Ok(0) on non-empty buffer - Wire up PtyWriter's self-sender (was None, now Some(&to_pty_writer)) * fix: per-terminal write buffering to handle short writes and EAGAIN Replace re-queue approach with per-terminal pending write buffers (HashMap<u32, VecDeque<PendingWrite>>). Uses recv_timeout(10ms) when pending data exists, blocking recv when idle. 10MB per-terminal cap drops buffer on overflow. Terminal errors clear the queue. Adds Bus::recv_timeout via crossbeam Select::select_timeout. Removes tcdrain from write path. * use safe accessor methods and saturating substitutions * add tests for ptywriter * rustfmt * fix tests by not assuming kernel buffer sizes * rustfmt * add pr --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
* Focus follows mouse and mouse clickthrough (#4836)Aram Drevekenin2026-03-11
| | | | | | | | | * implement focus follows mouse * mouse click through * rustfmt * add pr
* add verify cli test (#4835)Aram Drevekenin2026-03-11
|
* fix: atomic floating pane issues with the about screen (#4834)Aram Drevekenin2026-03-11
| | | | | | | * fix: atomic floating pane issues with the about screen * rustfmt * add pr
* Layout manager ux fixes (#4831)Aram Drevekenin2026-03-10
| | | | | | | | | * close self after applying and rename tab as layout * general ui/ux fixes * change session manager title on startup * add pr
* Web security hardening (#4830)Aram Drevekenin2026-03-10
| | | | | | | | | * security hardening * fix some issues * rustfmt * add pr
* Highlight priority levels (#4827)Aram Drevekenin2026-03-10
| | | | | * highlight priority levels * add pr
* allow specifying ip/port with the zellij web --status cli (#4825)Aram Drevekenin2026-03-09
| | | | | * allow specifying ip/port with the zellij web --status cli * add pr
* Update CHANGELOG.mdAram Drevekenin2026-03-09
|
* allow dumping screen to STDOUT as well (#4823)Aram Drevekenin2026-03-09
|