--- title: "WezTerm Workspaces (Sessions)" aliases: [wezterm-sessions, wezterm-workspaces] tags: [wezterm, terminal, workspaces, sessions, tmux] sources: [raw/Sessions - Wez's Terminal Emulator.md] created: 2026-04-17 updated: 2026-04-17 --- ## What Are Workspaces? Workspaces are WezTerm's equivalent of **tmux sessions** — named groups of windows (MuxWindows) that can be switched between without closing anything. - Every `MuxWindow` carries a **workspace label** - The GUI renders only the windows in the **active workspace** - Switching workspaces swaps all visible GUI windows simultaneously - Windows in other workspaces are hidden but still running ## Switching Workspaces | Key Assignment | Action | |---|---| | `SwitchToWorkspace` | Jump to a named workspace | | `SwitchWorkspaceRelative` | Cycle forward/backward through workspaces | | `ShowLauncher` / `ShowLauncherArgs` | Interactive list of all workspaces to pick from | Any spawn command (new window, new tab) can also accept a `workspace` argument to open into a non-active workspace immediately. ## Pre-defining Layouts at Startup Use startup events to build a workspace layout automatically when WezTerm launches: - **`gui-startup`** — fires when the GUI starts; use `mux.spawn_window { workspace = "name" }` to create named workspaces with pre-arranged tabs/panes - **`mux-startup`** — fires for the multiplexer daemon; useful for headless / server setups ```lua -- Example: gui-startup pre-built workspaces local mux = wezterm.mux wezterm.on("gui-startup", function() local _, _, window = mux.spawn_window { workspace = "work" } window:gui_window():set_right_status("work") mux.spawn_window { workspace = "personal" } mux.set_active_workspace("work") end) ``` ## Comparison with tmux Sessions | Concept | tmux | WezTerm | |---|---|---| | Session | `tmux new-session -s name` | Workspace label | | Switch session | `tmux switch-client -t name` | `SwitchToWorkspace` | | List sessions | `tmux ls` | `ShowLauncher` | | Pre-define layout | `.tmux.conf` + scripting | `gui-startup` event | ## Key Takeaways - Workspaces are **labels on MuxWindows** — no separate process or socket like tmux sessions - The GUI shows **only the active workspace**; background workspaces are hidden but alive - Use `ShowLauncher` as the interactive workspace picker (bind it to a convenient key) - Pre-built layouts go in the **`gui-startup`** event handler in `wezterm.lua` - Any spawn call can target a non-active workspace by name — useful for background task windows ## Related - [[wiki/dotfiles/wezterm-config|WezTerm Config]] — Lua config structure and file locations - [[wiki/dotfiles/wezterm-key-bindings|WezTerm Key Bindings]] — how to bind SwitchToWorkspace - [[wiki/dotfiles/wezterm-key-tables|WezTerm Key Tables]] — modal layers for workspace switching - [[wiki/dotfiles/wezterm-launching-programs|WezTerm Launching Programs]] — spawn options and CWD ## Sources - [wezterm.org/recipes/workspaces.html](https://wezterm.org/recipes/workspaces.html)