Last Updated: 3/12/2026
Workspace Management
Hyprland provides fully dynamic workspaces that are created and destroyed on demand. This guide covers workspace navigation, window movement, special workspaces (scratchpads), and workspace rules.
Dynamic Workspaces
Unlike traditional desktop environments with fixed workspace counts, Hyprland creates workspaces dynamically:
- Workspaces are created when you switch to them or move a window to them
- Empty workspaces are automatically destroyed
- No need to pre-configure workspace count
Switching Workspaces
By Number
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
# ... through 10Relative Navigation
bind = $mainMod, mouse_down, workspace, e+1 # Next workspace
bind = $mainMod, mouse_up, workspace, e-1 # Previous workspaceThe e+1 and e-1 syntax means “relative to current workspace.”
Via hyprctl
hyprctl dispatch workspace 5
hyprctl dispatch workspace e+1
hyprctl dispatch workspace e-1Moving Windows Between Workspaces
Move and Follow
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
# ... through 10This moves the active window to the specified workspace and switches to that workspace.
Move Silently (Stay on Current Workspace)
bind = $mainMod CTRL, 1, movetoworkspacesilent, 1Or via hyprctl:
hyprctl dispatch movetoworkspacesilent 3Special Workspaces (Scratchpads)
Special workspaces are hidden workspaces that can be toggled on/off, useful for dropdown terminals or quick-access apps.
Creating a Special Workspace
# Toggle special workspace named "magic"
bind = $mainMod, S, togglespecialworkspace, magic
# Move window to special workspace
bind = $mainMod SHIFT, S, movetoworkspace, special:magicMultiple Special Workspaces
You can have multiple named special workspaces:
bind = $mainMod, T, togglespecialworkspace, terminal
bind = $mainMod, N, togglespecialworkspace, notes
bind = $mainMod, M, togglespecialworkspace, musicVia hyprctl
hyprctl dispatch togglespecialworkspace magic
hyprctl dispatch movetoworkspace special:terminalWorkspace Rules
Customize workspace behavior with workspace rules:
Disable Gaps on Specific Workspaces
workspace = w[tv1], gapsout:0, gapsin:0
workspace = f[1], gapsout:0, gapsin:0Combined with window rules for a true fullscreen experience:
windowrule {
name = no-gaps-fullscreen
match:workspace = f[1]
match:float = false
border_size = 0
rounding = 0
}Persistent Workspaces
By default, empty workspaces are destroyed. To keep specific workspaces persistent:
workspace = 1, persistent:true
workspace = 2, persistent:trueDefault Workspace for Monitors
Assign default workspaces to monitors:
workspace = 1, monitor:DP-1, default:true
workspace = 2, monitor:HDMI-A-1, default:trueQuerying Workspaces
List All Workspaces
hyprctl workspacesReturns workspace IDs, window counts, and monitor assignments.
Get Active Workspace
hyprctl activeworkspaceIn JSON Format
hyprctl workspaces -j
hyprctl activeworkspace -jMulti-Monitor Workspace Behavior
Hyprland assigns workspaces independently per monitor:
- Each monitor can have its own active workspace
- Switching workspaces on one monitor doesn’t affect others
- Windows can be moved between monitors via workspace assignment
Move Window to Different Monitor
# Move to workspace 5 (which may be on another monitor)
hyprctl dispatch movetoworkspace 5Workspace Naming
Workspaces can have custom names:
workspace = 1, name:web
workspace = 2, name:code
workspace = 3, name:terminalSwitch by name:
hyprctl dispatch workspace name:webAdvanced Workspace Navigation
Cycle Through Occupied Workspaces
bind = $mainMod, Tab, workspace, m+1 # Next occupied workspace
bind = $mainMod SHIFT, Tab, workspace, m-1 # Previous occupied workspaceJump to First/Last Workspace
bind = $mainMod, Home, workspace, 1
bind = $mainMod, End, workspace, 10Workspace Tips
- Use special workspaces for quick-access apps: Dropdown terminal, music player, notes
- Assign apps to specific workspaces: Use window rules to send browsers to workspace 2, terminals to 3, etc.
- Disable gaps for media workspaces: Create immersive fullscreen experiences
- Name workspaces semantically: “web”, “code”, “comm” instead of numbers
- Use relative navigation:
e+1/e-1for fluid workspace switching
What’s Next
Explore advanced visual customization with the Animations guide.