sway man page

sway — configuration file and commands


A sway configuration file is a list of sway commands that are executed by sway on startup. These commands usually consist of setting your preferences and setting key bindings. An example config is likely present in /etc/sway/config for you to check out.

Lines in the configuration file might be extended through multiple lines by adding a \ character at the end of line. e.g.:

bindsym Shift+XF86AudioRaiseVolume exec pactl set-sink-volume \
        $(pactl list sinks | grep -B 1 RUNNING | sed '1q;d' | sed 's/[^0-9]\+//g') +5%

These commands can be executed in your config file, via swaymsg(1), or via the bindsym command.


The following commands may only be used in the configuration file.

bar <block of commands>

Append { to this command, the following lines will be commands that configure swaybar, and } on its own line to close the block.

See sway-bar(5) for details.

set <name> <value>

Sets variable $name to value. You can use the new variable in the arguments of future commands.

orientation <horizontal|vertical|auto>

Sets the default container layout for tiled containers.

The following commands cannot be used directly in the configuration file. They are expected to be used with bindsym or at runtime through swaymsg(1).

border <normal|pixel> [<n>]

Set border style for focused window. normal includes a border of thickness n and a title bar. pixel is a border without title bar n pixels thick. Default is normal with border thickness 2.

border <none|toggle>

Set border style for focused window to none or toggle between the available border styles: normal, pixel, none.


Exit sway and end your Wayland session.

floating <enable|disable|toggle>

Make focused view floating, non-floating, or the opposite of what it is now.

focus <direction>

Direction may be one of up, down, left, right, next, prev, parent, or child. The directional focus commands will move the focus in that direction. The next and prev directions will focus the next, respectively previous, element in the current container. The parent focus command will change the focus to the parent of the currently focused container, which is useful, for example, to open a sibling of the parent container, or to move the entire container around.

focus output <direction|name>

Direction may be one of up, down, left, right. The directional focus commands will move the focus to the output in that direction. When name is given the focus is changed to the output with that name.

focus mode_toggle

Toggles focus between floating view and tiled view.


Toggles fullscreen status for the focused view.

layout <mode>

Sets the layout mode of the focused container. mode can be one of splith, splitv, toggle split, stacking, tabbed.

layout auto <mode>

Sets layout to one of the auto modes, i.e. one of left, right, top, or bottom.

layout auto <next|prev>

Cycles between available auto layouts.

layout auto [master|ncol] [inc|set] <n>

Modify the number of master elements, respectively slave columns, in the focused container. <n> can be a positive or negative integer. These commands only have an effect if the focused container uses one of the "auto" layouts.

layout toggle split

Cycles between available split layouts.

move <left|right|up|down> <[px]>

Moves the focused container left, right, up, or down. If the window is floating it moves it px in that direction, defaulting to 10. Tiled containers are moved the same regardless of the px argument.

move <next|prev|first>

Moving to prev or next swaps the container with its sibling in the same container. Move first exchanges the focused element in an auto layout with the first element, i.e. promotes the focused element to master position.

move <container|window> to workspace <name>

Moves the focused container to the workspace identified by name. name may be a special workspace name. See workspace.

move <container|window|workspace> to output <name|direction>

Moves the focused container or workspace to the output identified by name or direction. direction may be one of up, down, left, right.

move [to] scratchpad

Moves the focused window to the scratchpad.


Reloads the sway config file without restarting sway.

resize <shrink|grow> <width|height> [<amount>] [px|ppt]

Resizes the currently focused container or view by amount. amount is optional: the default value is 10 (either px or ppt depending on the view type). The [px|ppt] parameter is optional. px specifies that amount refers to pixels; ppt specifies that amount refers to percentage points of the current dimension. Floating views use px dimensions by default (but can use ppt if specified); tiled views use ppt dimensions by default (but can use px if specified).

resize set <width> [px] <height> [px]

Sets the width and height of the currently focused container to width pixels and height pixels. The [px] parameters are optional and have no effect. This command only accepts pixel dimensions.

resize set <width|height> <amount> [px] [<width|height> <amount> [px]]

Sets the width and/or height of the currently focused container to amount. The [px] parameters are optional and have no effect. This command only accepts pixel dimensions.

scratchpad show

Shows a window from the scratchpad. Repeatedly using this command will cycle through the windows in the scratchpad.

split <vertical|v|horizontal|h|toggle|t>

Splits the current container, vertically or horizontally. If toggled then the current container is split opposite to the parent container.


Equivalent to split horizontal.


Equivalent to split vertical.


Equivalent to split toggle.

sticky <enable|disable|toggle>

"Sticks" a floating window to the current output so that it shows up on all workspaces.

The following commands may be used either in the configuration file or triggered at runtime.

assign <criteria> [→] <workspace>

Assigns views matching criteria (see Criteria section below) to workspace. The → (U+2192) is optional and purely for aesthetics. This command is exactly equivalent to "for_window <criteria> move container to workspace <workspace>".

bindsym <key combo> <command>

Binds key combo to execute command when pressed. You may use XKB key names here (xev(1) is a good tool for discovering them). An example bindsym command would be bindsym Mod1+Shift+f exec firefox, which would execute Firefox if the alt, shift, and F keys are pressed together. Any valid sway command is eligible to be bound to a key combo.

bindcode <code> <command> is also available for binding with key codes instead of key names.

client.<color_class> <border> <background> <text> <indicator> <child_border>

The client commands control the colors of the view borders and title bars. All of the client commands require five color values. (The one exception is client.background which requires one color value.) If you only want to specify a subset, supply default colors for all the others. Colors must be defined in hex. i.e. #rrggbb or #rrggbbaa when including the alpha channel.

The command tokens are:


Specifies the view to which the colors apply.


The color a view will be painted, underneath the client itself. This will only be visible if a client does not fully cover its allocated view space. This command only requires one color. Note: This is not currently implemented.


The view that has focus.


A view that has focus within its container, but the container is not focused.


Used when drawing placeholder view contents. Only background and text colors are used. Note: This is not currently implemented.


A view that does not have focus.


A view with an urgency hint. Note: This is not currently implemented.


The border around the title bar.


The background of the title bar.


The text color of the title bar.


The color used to indicate where a new view will open. In a tiled container, this would paint the right border of the current view if a new view would be opened to the right.


The border around the view itself.

The default colors are:

color_class border background text indicator child_border
background n/a #ffffff n/a n/a n/a
focused #4c7899 #285577 #ffffff #2e9ef4 #285577
focused_inactive #333333 #5f676a #ffffff #484e50 #5f676a
unfocused #333333 #222222 #888888 #292d2e #222222
urgent #2f343a #900000 #ffffff #900000 #900000
placeholder #000000 #0c0c0c #ffffff #000000 #0c0c0c
debuglog <on|off|toggle>

Enables, disables or toggles debug logging. The toggle argument cannot be used in the configuration file.

default_border <normal|none|pixel> [<n>]

Set default border style for new windows. This command was previously called new_window. While new_window still works, it is considered deprecated and support for it will be removed in the future.

default_floating_border <normal|none|pixel> [<n>]

Set default border style for new floating windows. This only applies to windows that are spawned in floating mode, not windows that become floating after the fact. This command was previously called new_float. While new_float still works, it is considered deprecated and support for it will be removed in the future.

exec <shell command>

Executes shell command with sh.

exec_always <shell command>

Like exec, but the shell command will be executed again after reload or restart is executed.

floating_maximum_size <width> x <height>

Specifies the maximum dimensions of floating windows. Uses the container dimensions as default. -1 x -1 will remove any restriction on dimensions. 0 x 0 has the same behavior as not setting any value. If in conflict this option has precedence over floating_minimum_size.

floating_minimum_size <width> x <height>

Specifies the minimum dimensions of floating windows. Default parameters are 75 x 50. -1 and 0 are invalid parameters, default will be used instead.

floating_modifier <modifier> [normal|inverse]

When the modifier key is held down, you may hold left click to move floating windows, and right click to resize them. Unlike i3, this modifier may also be used to resize and move windows that are tiled. With the inverse mode enabled, left click is used for resizing and right click for dragging. The mode parameter is optional and defaults to normal if it isn’t defined.

floating_scroll <up|down|left|right> [command]

Sets a command to be executed when the mouse wheel is scrolled in the specified direction while holding the floating modifier. Resets the command, when given no arguments.

focus_follows_mouse <yes|no>

If set to yes, moving your mouse over a window will focus that window.

font <font>

Sets font for use in title bars. Generally the format is something like "Name Style Size" e.g. "Deja Vu Sans Book 12". You can also use Pango font descriptions with "pango:font".

for_window <criteria> <command>

Whenever a window that matches criteria appears, run list of commands. See Criteria section below.

gaps edge_gaps <on|off|toggle>

Whether or not to add gaps between views and workspace edges if amount of inner gap is not zero. When off, no gap is added where the view is aligned to the workspace edge, effectively creating gaps only between views. The toggle argument cannot be used in the configuration file.

gaps <amount>

Sets default amount pixels as the gap between each view, and around each workspace.

gaps <inner|outer> <amount>

Sets default amount pixels as the inner or outer gap, where the former affects spacing between views and the latter affects the space around each workspace.

gaps <inner|outer> <all|workspace|current> <set|plus|minus> <amount>

Changes the gaps for the inner or outer gap. all changes the gaps for all views or workspace, workspace changes gaps for all views in current workspace (or current workspace), and current changes gaps for the current view or workspace.

hide_edge_borders <none|vertical|horizontal|both|smart>

Hide window borders adjacent to the screen edges. Default is none.

input <input device> <block of commands>

Append { to this command, the following lines will be commands to configure the named input device, and } on its own line will close the block.

input * <block of commands> may be used to match all input devices.

See sway-input(5) for details.


Kills (force-closes) the currently-focused container and all of its children.

smart_gaps <on|off>

If smart_gaps are on then gaps will only be enabled if a workspace has more than one child container.

mark <--add|--replace> <--toggle> <identifier>

Marks are arbitrary labels that can be used to identify certain windows and then jump to them at a later time. By default, the mark command sets identifier as the only mark on a window. By specifying --add, mark will add identifier to the list of current marks. If --toggle is specified mark will remove identifier if it is already a label. Marks may be found by using a criteria. See the Criteria section below.

mode <mode_name>

Switches to the given mode_name. The default mode is simply default. To create a new mode in config append { to this command, the following lines will be keybinds for that mode, and } on its own line to close the block.

mouse_warping <output|none>

When output: place mouse at center of newly focused window when changing output. When none: don’t move mouse.

no_focus <criteria>

Prevents windows matching <criteria> from being focused automatically when they’re created. This does not apply to the first window in a workspace.

output <name> <resolution|res> <WIDTHxHEIGHT>

Configures the specified output to use the given resolution.

Note: sway does not currently support modesetting. Your output’s native resolution will be used and the screen will be scaled from the resolution specified to your native resolution.

output <name> <position|pos> <X,Y>

Configures the specified output to be arranged at the given position.

output <name> <scale> <I>

Configures the specified output to be scaled up by the specified integer scaling factor (usually 2 for HiDPI screens).

output <name> <background|bg> <file> <mode>

Sets the wallpaper for the given output to the specified file, using the given scaling mode (one of "stretch", "fill", "fit", "center", "tile").

output <name> <background|bg> <color> solid_color

Sets the background of the given output to the specified color. color should be specified as an #rrggbb (no alpha) color.

output <name> disable

Disables the specified output.


You may combine output commands into one, like so:

output HDMI-A-1 res 1920x1080 pos 1920,0 bg ~/wallpaper.png stretch

You can get a list of output names like so:

swaymsg -t get_outputs

You may also match any output by using the output name "*". Be sure to add this output config after the others, or it will be matched instead of the others.

seamless_mouse <on|off>

Change output seamlessly when pointer touches edge of output. Outputs need to be configured with perfectly aligned adjacent positions for this option to have any effect.

show_marks <on|off>

If show_marks is on then marks will be showed in the window decoration. However, any mark that starts with an underscore will not be drawn even if the option is on. The default option is on.

unmark <identifier>

Unmark will remove identifier from the list of current marks on a window. If no identifier is specified then unmark will remove all marks.

workspace [number] <name>

Switches to the specified workspace. The string "number" is optional. The worspace name, if unquoted, may not contain the string "output", as sway will assume that the command is moving a worspace to an output, as described below.

workspace <prev|next>

Switches to the next workspace on the current output or on the next output if currently on the last workspace.

workspace <prev_on_output|next_on_output>

Switches to the next workspace on the current output.

workspace <name> output <output>

Specifies that the workspace named name should appear on the specified output.

workspace_auto_back_and_forth <yes|no>

When yes, repeating a workspace switch command will switch back to the prior workspace. For example, if you are currently on workspace 1, switch to workspace 2, then invoke the "workspace 2" command again, you will be returned to workspace 1. Defaults to no.

workspace_layout <default|stacking|tabbed|auto|auto left|auto right|auto top|auto bottom>:: Specifies the start layout for new workspaces.

include <path>

Includes a sub config file by path. path can be either a full path or a path relative to the parent config.


A criteria is a string in the form of e.g.:

[class="[Rr]egex.*" title="some title"]

The string contains one or more (space separated) attribute/value pairs and they are used by some commands filter which views to execute actions on. All attributes must match for the criteria string to match.

Criteria may be used with either the for_window or assign commands to specify operations to perform on new views. A criteria may also be used to perform specific commands (ones that normally act upon one window) on all views that match that criteria. For example:

Focus on a window with the mark "IRC": [con_mark="IRC"] focus

Kill all windows with the title "Emacs": [class="Emacs"] kill

Mark all Firefox windows with "Browser": [class="Firefox"] mark Browser

Currently supported attributes:


Compare value against the window class. Can be a regular expression. If value is focused then the window class must be the same as that of the currently focused window.


Compare against the internal container ID, which you can find via IPC.


Compare against the window marks. Can be a regular expression.


Matches against floating windows.


Compare value against the app id. Can be a regular expression.


Compare against the window title. Can be a regular expression. If value is focused then the window title must be the same as that of the currently focused window.


Matches against tiling windows.


Compare against the workspace name for this view. Can be a regular expression. If value is focused then all the views on the currently focused workspace matches.

See Also

sway(1) sway-input(5) sway-bar(5)

Referenced By

sway(1), sway-bar(5), sway-input(5), swaymsg(1).