diff options
| author | Aram Drevekenin <aram@poor.dev> | 2025-06-23 19:19:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-23 19:19:37 +0200 |
| commit | c5ac7968809ddb1033b625562eae22019cccc2f4 (patch) | |
| tree | 932cf07d898dfbcc6ec6a9d4cf5353c06a47accc /zellij-utils/src/snapshots | |
| parent | feat(ui): add optional tooltip with key hints to the compact bar (#4225) (diff) | |
| download | sl0ppij-c5ac7968809ddb1033b625562eae22019cccc2f4.tar.gz sl0ppij-c5ac7968809ddb1033b625562eae22019cccc2f4.tar.xz sl0ppij-c5ac7968809ddb1033b625562eae22019cccc2f4.zip | |
Feature: web-client/server to share your sessions in the browser (#4242)
* work
* moar work
* notes
* work
* separate to terminal and control channels
* stdin working
* serve html web client initial
* serve static assets loaded with include_dir
* merge
* enable_web_server config parameter
* compile time flag to disable web server capability
* rustfmt
* add license to all xterm.js assets
* mouse working except copy/paste
* helpful comment
* web client improvements
- move script to js file
- add favicon
- add nerd font
- change title
TODO: investigate if font license embedded in otf is sufficient
* get mouse to work properly
* kitty keyboard support initial
* fix wrong type in preload link
* wip axum websocket handlers
- upgrade axum to v0.8.1, enable ws feature
- begin setup of websocket handlers
- tidy up imports
* replace control listener
* handle terminal websocket with axum
* cleanup Cargo.toml
* kitty fixes and bracketed paste
* fix(mouse): pane not found crash
* initial session switching infra
* add `web_client_font` option
* session switching, creation and resurrection working through the session manager
* move session module to zellij-utils and share logic with web-client
* some cleanups
* require restart for enable-web-server
* use session name from router
* write config to disk and watch for config changes
* rename session name to ipc path
* add basic panic handler, make render_to_client exit on channel close
* use while let instead of loop
* handle websocket close
* add mouse motions
* make clipboard work
* add weblink handling and webgl rendering
* add todo
* fix: use session name instead of patch on session switch
* use "default" layout for new sessions
* ui indication for session being shared
* share this session ui
* plugin assets
* Fix process crash on mac with notify watcher.
Use poll watcher instead of recommended as a workaround.
* make url session switching and creation work
* start welcome screen on root url
* scaffold control messages, set font from config
* set dimensions on session start
* bring back session name from url
* send bytes on terminal websocket instead of json
- create web client os input and id before websocket connection
* draft ui
* work
* refactor ui
* remove otf font, remove margins to avoid scrollbar
* version query endpoint for server status
* web session info query endpoint
* refactor: move stuff around
* add web client info to session metadata
* make tests pass
* populate real data in session list
* remove unnecessary endpoint
* add web_client node to config, add font option
* remove web_client_font
* allow disabling the web session through the config - WIP
* formalize sharing/not-sharing configuration
* fix tests
* allow shutting down web server
* display error when web clients are forbidden to attach
* only show sessions that allow web clients if this is a web client
* style(fmt): rustfmt
* fix: query web server from Zellij rather than from each plugin
* remove log spam
* handle some error paths better in the web client
* allow controlling the web server through the cli
* allow configuring the web server's ip/port
* fix tests and format code
* use direct WebServerStatus event instead of piggy-backing on SessionInfo
* plugin revamp initial
* make plugin responsive
* adjust plugin title
* refactor: share plugin
* refactor: share plugin
* add cors middleware
* some fixes for running without a compiled web server capability
* display error when starting the share plugin without web server support
* clarify config
* add pipelines to compile zellij without web support
* display error when unable to start web server
* only query web server when share plugin is running
* refactor(web-client): connection table
* give zellij_server_listener access to the control channel
* fixes and clarifications
* refactor: consolidate generate_unique_session_name
* give proper error when trying to attach to a forbidden session
* change browser URL when switching sessions
* add keyboard shortcut
* enforce https when bound to non-loopback ip
* initial authentication token implementation
* background color from theme
* initial web client theme config
* basic token generation ui
* refactor set config message creation
* also set body background
* allow editing scrollback for plugins too
* set scrollback to 0
* properly parse colors in config
* generate token from plugin
* nice login modals
* initial token management screen
* implement token authentication
* refactor(share): token management screen
* style(fmt): rustfmt
* fix(plugin): some minor bugs
* refactor(share): main screen
* refactor(share): token screen
* refactor(share): main
* refactor(share): ui components
* fix(responsiveness): properly send usage_width to the render function
* fix cli commands and add some verbosity
* add support for settings ansi and selection colors
* add cursor and cursor accent
* basic web client tests
* fix tests
* refactor: web client
* use session tokens for authentication
* improve modals
* move shutdown to ipc
* refactor: ipc logic
* serialize theme config for web client
* update tests
* refactor: move some stuff around to prepare for config hot reload
* config live reloading for the web clients
* change remember-me UI wording
* improve xterm.js link handling
* make sure terminal is focused on mousemove
* remove deprecated sharing indication from compact-bar
* gate deps and functionality behind the web_server_compatibility feature
* feat(build): add --no-web flag in all the places
* fix some other build flows
* add new assets
* update CI for no-web (untested)
* make more dependencies optional
* update axum-extra
* add web client configuration options
* gracefully close connections on server exit
* tests for graceful connection closing
* handle client-side reconnect when server is down
* fix: make sure ipc bus folder exists before starting
* add commands to manage login tokens from the cli
* style(fmt): rustfmt
* some cleanups
* fix(ux): allow alt-right-click on the web client without opening the context menu
* fix: prevent attaching to welcome screen
* fix: reload config issues
* fix long socket path on macos
* normalize config conversion and fix color gap in browser
* revoke session_token cookie if it is not valid
* fix: visual bug with multiple clients in extremely small screen sizes
* fix: only include rusqlite for the web server capability builds
* update e2e snapshots
* refactor(web): client side js
* some cleanups
* moar cleanups
* fix(tests): wait for server instead of using a fixed timeout
* debug CI
* fix(tests): use spawn_blocking for running the test web server
* fix(tests): wait for http rather than tcp port
* fix(tests): properly pass config path - hopefully this is the issue...
* success! bring back the rest of the tests
* attempt to fix the macos CI issue
* docs(changelog): add PR
---------
Co-authored-by: Thomas Linford <linford.t@gmail.com>
Diffstat (limited to 'zellij-utils/src/snapshots')
9 files changed, 223 insertions, 0 deletions
diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_config_options.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_config_options.snap index 50be8410..0bc15ee0 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_config_options.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_config_options.snap @@ -32,8 +32,15 @@ Options { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_layout_options.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_layout_options.snap index 201b5e64..37d0e455 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_layout_options.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__cli_arguments_override_layout_options.snap @@ -32,8 +32,15 @@ Options { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments-3.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments-3.snap index 94e7a87e..adff6294 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments-3.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments-3.snap @@ -30,8 +30,15 @@ Options { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments.snap index 8a09cae9..c29499cb 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__default_config_with_no_cli_arguments.snap @@ -4441,6 +4441,36 @@ Config { bare_key: Char( 's', ), + key_modifiers: {}, + }: [ + LaunchOrFocusPlugin( + RunPlugin( + RunPlugin { + _allow_exec_host_cmd: false, + location: Zellij( + PluginTag( + "share", + ), + ), + configuration: PluginUserConfiguration( + {}, + ), + initial_cwd: None, + }, + ), + true, + true, + false, + false, + ), + SwitchToMode( + Normal, + ), + ], + KeyWithModifier { + bare_key: Char( + 's', + ), key_modifiers: { Ctrl, }, @@ -5912,10 +5942,17 @@ Config { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, }, themes: {}, plugins: PluginAliases { @@ -6054,4 +6091,12 @@ Config { }, env: {}, background_plugins: {}, + web_client: WebClientConfig { + font: "monospace", + theme: None, + cursor_blink: false, + cursor_inactive_style: None, + cursor_style: None, + mac_option_is_meta: true, + }, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_env_vars_override_config_env_vars.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_env_vars_override_config_env_vars.snap index e4ac2827..f92ee67f 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_env_vars_override_config_env_vars.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_env_vars_override_config_env_vars.snap @@ -4441,6 +4441,36 @@ Config { bare_key: Char( 's', ), + key_modifiers: {}, + }: [ + LaunchOrFocusPlugin( + RunPlugin( + RunPlugin { + _allow_exec_host_cmd: false, + location: Zellij( + PluginTag( + "share", + ), + ), + configuration: PluginUserConfiguration( + {}, + ), + initial_cwd: None, + }, + ), + true, + true, + false, + false, + ), + SwitchToMode( + Normal, + ), + ], + KeyWithModifier { + bare_key: Char( + 's', + ), key_modifiers: { Ctrl, }, @@ -5912,10 +5942,17 @@ Config { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, }, themes: {}, plugins: PluginAliases { @@ -6058,4 +6095,12 @@ Config { "MY_ENV_VAR": "from layout", }, background_plugins: {}, + web_client: WebClientConfig { + font: "monospace", + theme: None, + cursor_blink: false, + cursor_inactive_style: None, + cursor_style: None, + mac_option_is_meta: true, + }, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_keybinds_override_config_keybinds.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_keybinds_override_config_keybinds.snap index 14e792a3..7539c152 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_keybinds_override_config_keybinds.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_keybinds_override_config_keybinds.snap @@ -117,10 +117,17 @@ Config { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, }, themes: {}, plugins: PluginAliases { @@ -259,4 +266,12 @@ Config { }, env: {}, background_plugins: {}, + web_client: WebClientConfig { + font: "monospace", + theme: None, + cursor_blink: false, + cursor_inactive_style: None, + cursor_style: None, + mac_option_is_meta: true, + }, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_options_override_config_options.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_options_override_config_options.snap index ff8ddd98..d9ee9183 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_options_override_config_options.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_options_override_config_options.snap @@ -32,8 +32,15 @@ Options { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_themes_override_config_themes.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_themes_override_config_themes.snap index 0f330251..2a416240 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_themes_override_config_themes.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_themes_override_config_themes.snap @@ -4441,6 +4441,36 @@ Config { bare_key: Char( 's', ), + key_modifiers: {}, + }: [ + LaunchOrFocusPlugin( + RunPlugin( + RunPlugin { + _allow_exec_host_cmd: false, + location: Zellij( + PluginTag( + "share", + ), + ), + configuration: PluginUserConfiguration( + {}, + ), + initial_cwd: None, + }, + ), + true, + true, + false, + false, + ), + SwitchToMode( + Normal, + ), + ], + KeyWithModifier { + bare_key: Char( + 's', + ), key_modifiers: { Ctrl, }, @@ -5912,10 +5942,17 @@ Config { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, }, themes: { "other-theme-from-config": Theme { @@ -7825,4 +7862,12 @@ Config { }, env: {}, background_plugins: {}, + web_client: WebClientConfig { + font: "monospace", + theme: None, + cursor_blink: false, + cursor_inactive_style: None, + cursor_style: None, + mac_option_is_meta: true, + }, } diff --git a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_ui_config_overrides_config_ui_config.snap b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_ui_config_overrides_config_ui_config.snap index 263c68ee..766e7348 100644 --- a/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_ui_config_overrides_config_ui_config.snap +++ b/zellij-utils/src/snapshots/zellij_utils__setup__setup_test__layout_ui_config_overrides_config_ui_config.snap @@ -4441,6 +4441,36 @@ Config { bare_key: Char( 's', ), + key_modifiers: {}, + }: [ + LaunchOrFocusPlugin( + RunPlugin( + RunPlugin { + _allow_exec_host_cmd: false, + location: Zellij( + PluginTag( + "share", + ), + ), + configuration: PluginUserConfiguration( + {}, + ), + initial_cwd: None, + }, + ), + true, + true, + false, + false, + ), + SwitchToMode( + Normal, + ), + ], + KeyWithModifier { + bare_key: Char( + 's', + ), key_modifiers: { Ctrl, }, @@ -5912,10 +5942,17 @@ Config { serialization_interval: None, disable_session_metadata: None, support_kitty_keyboard_protocol: None, + web_server: None, + web_sharing: None, stacked_resize: None, show_startup_tips: None, show_release_notes: None, advanced_mouse_actions: None, + web_server_ip: None, + web_server_port: None, + web_server_cert: None, + web_server_key: None, + enforce_https_for_localhost: None, }, themes: {}, plugins: PluginAliases { @@ -6054,4 +6091,12 @@ Config { }, env: {}, background_plugins: {}, + web_client: WebClientConfig { + font: "monospace", + theme: None, + cursor_blink: false, + cursor_inactive_style: None, + cursor_style: None, + mac_option_is_meta: true, + }, } |
