sway-ipc(7)

NAME

sway-ipc - IPC protocol for sway

DESCRIPTION

This details the interprocess communication (IPC) protocol for sway(1). This IPC protocol can be used to control or obtain information from a sway process.

The IPC protocol uses a UNIX socket as the method of communication. The path to the socket is stored in the environment variable SWAYSOCK and, for backwards compatibility with i3, I3SOCK. You can also retrieve the socket path by calling sway --get-socketpath.

MESSAGE AND REPLY FORMAT

The format for messages and replies is:
    <magic-string> <payload-length> <payload-type> <payload>
Where
    <magic-string> is i3-ipc, for compatibility with i3
    <payload-length> is a 32-bit integer in native byte order
    <payload-type> is a 32-bit integer in native byte order

For example, sending the exit command would look like the following hexdump:
    00000000 | 69 33 2d 69 70 63 04 00 00 00 00 00 00 00 65 78 |i3-ipc........ex|
    00000010 | 69 74                                           |it              |

The payload for replies will be a valid serialized JSON data structure.

MESSAGES AND REPLIES

The following message types and their corresponding reply types are currently supported. For all replies, any properties not listed are subject to removal.

TYPE NUMBER | MESSAGE NAME | PURPOSE
0 | RUN_COMMAND | Runs the payload as sway commands
1 | GET_WORKSPACES | Get the list of current workspaces
2 | SUBSCRIBE | Subscribe the IPC connection to the events listed in the payload
3 | GET_OUTPUTS | Get the list of current outputs
4 | GET_TREE | Get the node layout tree
5 | GET_MARKS | Get the names of all the marks currently set
6 | GET_BAR_CONFIG | Get the specified bar config or a list of bar config names
7 | GET_VERSION | Get the version of sway that owns the IPC socket
8 | GET_BINDING_MODES | Get the list of binding mode names
9 | GET_CONFIG | Returns the config that was last loaded
10 | SEND_TICK | Sends a tick event with the specified payload
11 | SYNC | Replies failure object for i3 compatibility
12 | GET_BINDING_STATE | Request the current binding state, e.g. the currently active binding mode name.
100 | GET_INPUTS | Get the list of input devices
101 | GET_SEATS | Get the list of seats

  0. RUN_COMMAND

MESSAGE
Parses and runs the payload as sway commands

REPLY
An array of objects corresponding to each command that was parsed. Each object has the property success, which is a boolean indicating whether the command was successful. The object may also contain the properties error and parse_error. The error property is a human readable error message while parse_error is a boolean indicating whether the reason the command failed was because the command was unknown or not able to be parsed.

Example Reply:
    [
    	{
    		"success": true
    	},
    	{
    		"success": false,
    		"parse_error": true,
    		"error": "Invalid/unknown command"
    	}
    ]

  1. GET_WORKSPACES

MESSAGE
Retrieves the list of workspaces.

REPLY
The reply is an array of objects corresponding to each workspace. Each object has the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
num | integer | The workspace number or -1 for workspaces that do not start with a number
name | string | The name of the workspace
visible | boolean | Whether the workspace is currently visible on any output
focused | boolean | Whether the workspace is currently focused by the default seat (seat0)
urgent | boolean | Whether a view on the workspace has the urgent flag set
rect | object | The bounds of the workspace. It consists of x, y, width, and height
output | string | The name of the output that the workspace is on

Example Reply:
    [
    	{
    		"num": 1,
    		"name": "1",
    		"visible": true,
    		"focused": true,
    		"rect": {
    			"x": 0,
    			"y": 23,
    			"width": 1920,
    			"height": 1057
    		},
    		"output": "eDP-1"
    	},
    ]

  2. SUBSCRIBE

MESSAGE
Subscribe this IPC connection to the event types specified in the message payload. The payload should be a valid JSON array of events. See the EVENTS section for the list of supported events.

REPLY
A single object that contains the property success, which is a boolean value indicating whether the subscription was successful or not.

Example Reply:
    {
    	"success": true
    }

  3. GET_OUTPUTS

MESSAGE
Retrieve the list of outputs

REPLY
An array of objects corresponding to each output. Each object has the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
name | string | The name of the output. On DRM, this is the connector
make | string | The make of the output
model | string | The model of the output
serial | string | The output's serial number as a hexadecimal string
active | boolean | Whether this output is active/enabled
dpms | boolean | (Deprecated, use power instead) Whether this output is on/off (via DPMS)
power | boolean | Whether this output is on/off
primary | boolean | For i3 compatibility, this will be false. It does not make sense in Wayland
scale | float | The scale currently in use on the output or -1 for disabled outputs
subpixel_hinting | string | The subpixel hinting current in use on the output. This can be rgb, bgr, vrgb, vbgr, or none
transform | string | The transform currently in use for the output. This can be normal, 90, 180, 270, flipped-90, flipped-180, or flipped-270
current_workspace | string | The workspace currently visible on the output or null for disabled outputs
modes | array | An array of supported mode objects. Each object contains width, height, and refresh
current_mode | object | An object representing the current mode containing width, height, and refresh
rect | object | The bounds for the output consisting of x, y, width, and height

Example Reply:
    [
    	{
    		"name": "HDMI-A-2",
    		"make": "Unknown",
    		"model": "NS-19E310A13",
    		"serial": "0x00000001",
    		"active": true,
    		"primary": false,
    		"scale": 1.0,
    		"subpixel_hinting": "rgb",
    		"transform": "normal",
    		"current_workspace": "1",
    		"modes": [
    			{
    				"width": 640,
    				"height": 480,
    				"refresh": 59940
    			},
    			{
    				"width": 800,
    				"height": 600,
    				"refresh": 60317
    			},
    			{
    				"width": 1024,
    				"height": 768,
    				"refresh": 60004
    			},
    			{
    				"width": 1920,
    				"height": 1080,
    				"refresh": 60000
    			}
    		],
    		"current_mode": {
    			"width": 1920,
    			"height": 1080,
    			"refresh": 60000
    		}
    	}
    ]

  4. GET_TREE

MESSAGE
Retrieve a JSON representation of the tree

REPLY
An array of objects that represent the current tree. Each object represents one node and will have the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
id | integer | The internal unique ID for this node
name | string | The name of the node such as the output name or window title. For the scratchpad, this will be __i3_scratch for compatibility with i3.
type | string | The node type. It can be root, output, workspace, con, or floating_con
border | string | The border style for the node. It can be normal, none, pixel, or csd
current_border_width | integer | Number of pixels used for the border width
layout | string | The node's layout. It can either be splith, splitv, stacked, tabbed, or output
orientation | string | The node's orientation. It can be vertical, horizontal, or none
percent | float | The percentage of the node's parent that it takes up or null for the root and other special nodes such as the scratchpad
rect | object | The absolute geometry of the node. The window decorations are excluded from this, but borders are included.
window_rect | object | The geometry of the content inside the node. These coordinates are relative to the node itself. Window decorations and borders are outside the window_rect
deco_rect | object | The geometry of the decorations for the node relative to the parent node
geometry | object | The natural geometry of the contents if it were to size itself
urgent | boolean | Whether the node or any of its descendants has the urgent hint set. Note: This may not exist when compiled without xwayland support
sticky | boolean | Whether the node is sticky (shows on all workspaces)
marks | array | List of marks assigned to the node
focused | boolean | Whether the node is currently focused by the default seat (seat0)
focus | array | Array of child node IDs in the current focus order
nodes | array | The tiling children nodes for the node
floating_nodes | array | The floating children nodes for the node
representation | string | (Only workspaces) A string representation of the layout of the workspace that can be used as an aid in submitting reproduction steps for bug reports
fullscreen_mode | integer | (Only containers and views) The fullscreen mode of the node. 0 means none, 1 means full workspace, and 2 means global fullscreen
floating | string | Floating state of container. Can be either "auto_off" or "user_on"
scratchpad_state | string | Whether the window is in the scratchpad. Can be either "none" or "fresh"
app_id | string | (Only views) For an xdg-shell view, the name of the application, if set. Otherwise, null
pid | integer | (Only views) The PID of the application that owns the view
visible | boolean | (Only views) Whether the node is visible
shell | string | (Only views) The shell of the view, such as xdg_shell or xwayland
inhibit_idle | boolean | (Only views) Whether the view is inhibiting the idle state
idle_inhibitors | object | (Only views) An object containing the state of the application and user idle inhibitors. application can be enabled or none. user can be focus, fullscreen, open, visible or none.
window | integer | (Only xwayland views) The X11 window ID for the xwayland view
window_properties | object | (Only xwayland views) An object containing the title, class, instance, window_role, window_type, and transient_for for the view

Example Reply:
    {
    	"id": 1,
    	"name": "root",
    	"rect": {
    		"x": 0,
    		"y": 0,
    		"width": 1920,
    		"height": 1080
    	},
    	"focused": false,
    	"focus": [
    		3
    	],
    	"border": "none",
    	"current_border_width": 0,
    	"layout": "splith",
    	"orientation": "horizontal",
    	"percent": null,
    	"window_rect": {
    		"x": 0,
    		"y": 0,
    		"width": 0,
    		"height": 0
    	},
    	"deco_rect": {
    		"x": 0,
    		"y": 0,
    		"width": 0,
    		"height": 0
    	},
    	"geometry": {
    		"x": 0,
    		"y": 0,
    		"width": 0,
    		"height": 0
    	},
    	"window": null,
    	"urgent": false,
    	"floating_nodes": [
    	],
    	"sticky": false,
    	"type": "root",
    	"nodes": [
    		{
    			"id": 2147483647,
    			"name": "__i3",
    			"rect": {
    				"x": 0,
    				"y": 0,
    				"width": 1920,
    				"height": 1080
    			},
    			"focused": false,
    			"focus": [
    				2147483646
    			],
    			"border": "none",
    			"current_border_width": 0,
    			"layout": "output",
    			"orientation": "horizontal",
    			"percent": null,
    			"window_rect": {
    				"x": 0,
    				"y": 0,
    				"width": 0,
    				"height": 0
    			},
    			"deco_rect": {
    				"x": 0,
    				"y": 0,
    				"width": 0,
    				"height": 0
    			},
    			"geometry": {
    				"x": 0,
    				"y": 0,
    				"width": 0,
    				"height": 0
    			},
    			"window": null,
    			"urgent": false,
    			"floating_nodes": [
    			],
    			"sticky": false,
    			"type": "output",
    			"nodes": [
    				{
    					"id": 2147483646,
    					"name": "__i3_scratch",
    					"rect": {
    						"x": 0,
    						"y": 0,
    						"width": 1920,
    						"height": 1080
    					},
    					"focused": false,
    					"focus": [
    					],
    					"border": "none",
    					"current_border_width": 0,
    					"layout": "splith",
    					"orientation": "horizontal",
    					"percent": null,
    					"window_rect": {
    						"x": 0,
    						"y": 0,
    						"width": 0,
    						"height": 0
    					},
    					"deco_rect": {
    						"x": 0,
    						"y": 0,
    						"width": 0,
    						"height": 0
    					},
    					"geometry": {
    						"x": 0,
    						"y": 0,
    						"width": 0,
    						"height": 0
    					},
    					"window": null,
    					"urgent": false,
    					"floating_nodes": [
    					],
    					"sticky": false,
    					"type": "workspace"
    				}
    			]
    		},
    		{
    			"id": 3,
    			"name": "eDP-1",
    			"rect": {
    				"x": 0,
    				"y": 0,
    				"width": 1920,
    				"height": 1080
    			},
    			"focused": false,
    			"focus": [
    				4
    			],
    			"border": "none",
    			"current_border_width": 0,
    			"layout": "output",
    			"orientation": "none",
    			"percent": 1.0,
    			"window_rect": {
    				"x": 0,
    				"y": 0,
    				"width": 0,
    				"height": 0
    			},
    			"deco_rect": {
    				"x": 0,
    				"y": 0,
    				"width": 0,
    				"height": 0
    			},
    			"geometry": {
    				"x": 0,
    				"y": 0,
    				"width": 0,
    				"height": 0
    			},
    			"window": null,
    			"urgent": false,
    			"floating_nodes": [
    			],
    			"sticky": false,
    			"type": "output",
    			"active": true,
    			"primary": false,
    			"make": "Unknown",
    			"model": "0x38ED",
    			"serial": "0x00000000",
    			"scale": 1.0,
    			"transform": "normal",
    			"current_workspace": "1",
    			"modes": [
    				{
    					"width": 1920,
    					"height": 1080,
    					"refresh": 60052
    				}
    			],
    			"current_mode": {
    				"width": 1920,
    				"height": 1080,
    				"refresh": 60052
    			},
    			"nodes": [
    				{
    					"id": 4,
    					"name": "1",
    					"rect": {
    						"x": 0,
    						"y": 23,
    						"width": 1920,
    						"height": 1057
    					},
    					"focused": false,
    					"focus": [
    						6,
    						5
    					],
    					"border": "none",
    					"current_border_width": 0,
    					"layout": "splith",
    					"orientation": "horizontal",
    					"percent": null,
    					"window_rect": {
    						"x": 0,
    						"y": 0,
    						"width": 0,
    						"height": 0
    					},
    					"deco_rect": {
    						"x": 0,
    						"y": 0,
    						"width": 0,
    						"height": 0
    					},
    					"geometry": {
    						"x": 0,
    						"y": 0,
    						"width": 0,
    						"height": 0
    					},
    					"window": null,
    					"urgent": false,
    					"floating_nodes": [
    					],
    					"sticky": false,
    					"num": 1,
    					"output": "eDP-1",
    					"type": "workspace",
    					"representation": "H[URxvt termite]",
    					"nodes": [
    						{
    							"id": 5,
    							"name": "urxvt",
    							"rect": {
    								"x": 0,
    								"y": 23,
    								"width": 960,
    								"height": 1057
    							},
    							"focused": false,
    							"focus": [
    							],
    							"border": "normal",
    							"current_border_width": 2,
    							"layout": "none",
    							"orientation": "none",
    							"percent": 0.5,
    							"window_rect": {
    								"x": 2,
    								"y": 0,
    								"width": 956,
    								"height": 1030
    							},
    							"deco_rect": {
    								"x": 0,
    								"y": 0,
    								"width": 960,
    								"height": 25
    							},
    							"geometry": {
    								"x": 0,
    								"y": 0,
    								"width": 1124,
    								"height": 422
    							},
    							"window": 4194313,
    							"urgent": false,
    							"floating_nodes": [
    							],
    							"sticky": false,
    							"type": "con",
    							"fullscreen_mode": 0,
    							"pid": 23959,
    							"app_id": null,
    							"visible": true,
    							"shell": "xwayland",
    							"inhibit_idle": true,
    							"idle_inhibitors": {
    								"application": "none",
    								"user": "visible",
    							},
    							"window_properties": {
    								"class": "URxvt",
    								"instance": "urxvt",
    								"title": "urxvt",
    								"transient_for": null
    							},
    							"nodes": [
    							]
    						},
    						{
    							"id": 6,
    							"name": "",
    							"rect": {
    								"x": 960,
    								"y": 23,
    								"width": 960,
    								"height": 1057
    							},
    							"focused": true,
    							"focus": [
    							],
    							"border": "normal",
    							"current_border_width": 2,
    							"layout": "none",
    							"orientation": "none",
    							"percent": 0.5,
    							"window_rect": {
    								"x": 2,
    								"y": 0,
    								"width": 956,
    								"height": 1030
    							},
    							"deco_rect": {
    								"x": 0,
    								"y": 0,
    								"width": 960,
    								"height": 25
    							},
    							"geometry": {
    								"x": 0,
    								"y": 0,
    								"width": 817,
    								"height": 458
    							},
    							"window": null,
    							"urgent": false,
    							"floating_nodes": [
    							],
    							"sticky": false,
    							"type": "con",
    							"fullscreen_mode": 0,
    							"pid": 25370,
    							"app_id": "termite",
    							"visible": true,
    							"shell": "xdg_shell",
    							"inhibit_idle": false,
    							"idle_inhibitors": {
    								"application": "none",
    								"user": "fullscreen",
    							},
    							"nodes": [
    							]
    						}
    					]
    				}
    			]
    		}
    	]
    }

  5. GET_MARKS

MESSAGE
Retrieve the currently set marks

REPLY
An array of marks current set. Since each mark can only be set for one container, this is a set so each value is unique and the order is undefined.

Example Reply:
    [
    	"one",
    	"test"
    ]

  6. GET_BAR_CONFIG (WITHOUT A PAYLOAD)

MESSAGE
When sending without a payload, this retrieves the list of configured bar IDs

REPLY
An array of bar IDs, which are strings

Example Reply:
    [
    	"bar-0",
    	"bar-1"
    ]

  6. GET_BAR_CONFIG (WITH A PAYLOAD)

MESSAGE
When sent with a bar ID as the payload, this retrieves the config associated with the specified by the bar ID in the payload. This is used by swaybar, but could also be used for third party bars

REPLY
An object that represents the configuration for the bar with the bar ID sent as the payload. The following properties exists and more information about what their value mean can be found in sway-bar(5):

PROPERTY | DATA TYPE | DESCRIPTION
id | string | The bar ID
mode | string | The mode for the bar. It can be dock, hide, or invisible
position | string | The bar's position. It can currently either be bottom or top
status_command | string | The command which should be run to generate the status line
font | string | The font to use for the text on the bar
workspace_buttons | boolean | Whether to display the workspace buttons on the bar
workspace_min_width | integer | Minimum width in px for the workspace buttons on the bar
binding_mode_indicator | boolean | Whether to display the current binding mode on the bar
verbose | boolean | For i3 compatibility, this will be the boolean value false.
colors | object | An object containing the #RRGGBBAA colors to use for the bar. See below for more information
gaps | object | An object representing the gaps for the bar consisting of top, right, bottom, and left.
bar_height | integer | The absolute height to use for the bar or 0 to automatically size based on the font
status_padding | integer | The vertical padding to use for the status line
status_edge_padding | integer | The horizontal padding to use for the status line when at the end of an output

The colors object contains the following properties, which are all strings containing the #RRGGBBAA representation of the color:
PROPERTY | DESCRIPTION
background | The color to use for the bar background on unfocused outputs
statusline | The color to use for the status line text on unfocused outputs
separator | The color to use for the separator text on unfocused outputs
focused_background | The color to use for the background of the bar on the focused output
focused_statusline | The color to use for the status line text on the focused output
focused_separator | The color to use for the separator text on the focused output
focused_workspace_text | The color to use for the text of the focused workspace button
focused_workspace_bg | The color to use for the background of the focused workspace button
focused_workspace_border | The color to use for the border of the focused workspace button
active_workspace_text | The color to use for the text of the workspace buttons for the visible workspaces on unfocused outputs
active_workspace_bg | The color to use for the background of the workspace buttons for the visible workspaces on unfocused outputs
active_workspace_border | The color to use for the border of the workspace buttons for the visible workspaces on unfocused outputs
inactive_workspace_text | The color to use for the text of the workspace buttons for workspaces that are not visible
inactive_workspace_bg | The color to use for the background of the workspace buttons for workspaces that are not visible
inactive_workspace_border | The color to use for the border of the workspace buttons for workspaces that are not visible
urgent_workspace_text | The color to use for the text of the workspace buttons for workspaces that contain an urgent view
urgent_workspace_bg | The color to use for the background of the workspace buttons for workspaces that contain an urgent view
urgent_workspace_border | The color to use for the border of the workspace buttons for workspaces that contain an urgent view
binding_mode_text | The color to use for the text of the binding mode indicator
binding_mode_bg | The color to use for the background of the binding mode indicator
binding_mode_border | The color to use for the border of the binding mode indicator

Example Reply:
    {
    	"id": "bar-0",
    	"mode": "dock",
    	"position": "top",
    	"status_command": "while date +'%Y-%m-%d %l:%M:%S %p'; do sleep 1; done",
    	"font": "monospace 10",
    	"gaps": {
    		"top": 0,
    		"right": 0,
    		"bottom": 0,
    		"left": 0
    	},
    	"bar_height": 0,
    	"status_padding": 1,
    	"status_edge_padding": 3,
    	"workspace_buttons": true,
    	"workspace_min_width": 0,
    	"binding_mode_indicator": true,
    	"verbose": false,
    	"pango_markup": false,
    	"colors": {
    		"background": "#323232ff",
    		"statusline": "#ffffffff",
    		"separator": "#666666ff",
    		"focused_background": "#323232ff",
    		"focused_statusline": "#ffffffff",
    		"focused_separator": "#666666ff",
    		"focused_workspace_border": "#4c7899ff",
    		"focused_workspace_bg": "#285577ff",
    		"focused_workspace_text": "#ffffffff",
    		"inactive_workspace_border": "#32323200",
    		"inactive_workspace_bg": "#32323200",
    		"inactive_workspace_text": "#5c5c5cff",
    		"active_workspace_border": "#333333ff",
    		"active_workspace_bg": "#5f676aff",
    		"active_workspace_text": "#ffffffff",
    		"urgent_workspace_border": "#2f343aff",
    		"urgent_workspace_bg": "#900000ff",
    		"urgent_workspace_text": "#ffffffff",
    		"binding_mode_border": "#2f343aff",
    		"binding_mode_bg": "#900000ff",
    		"binding_mode_text": "#ffffffff"
    	},
    }

  7. GET_VERSION

MESSAGE
Retrieve version information about the sway process

REPLY
An object containing the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
major | integer | The major version of the sway process
minor | integer | The minor version of the sway process
patch | integer | The patch version of the sway process
human_readable | string | A human readable version string that will likely contain more useful information such as the git commit short hash and git branch
loaded_config_file_name | string | The path to the loaded config file

Example Reply:
    {
    	"human_readable": "1.0-rc1-117-g2f7247e0 (Feb 24 2019, branch 'master')",
    	"major": 1,
    	"minor": 0,
    	"patch": 0,
    	"loaded_config_file_name": "/home/redsoxfan/.config/sway/config"
    }

  8. GET_BINDING_MODES

MESSAGE
Retrieve the list of binding modes that currently configured

REPLY
An array of strings, with each string being the name of a binding mode. This will always contain at least one mode (currently default), which is the default binding mode

Example Reply:
    [
    	"default",
    	"resize",
    ]

  9. GET_CONFIG

MESSAGE
Retrieve the contents of the config that was last loaded

REPLY
An object with a single string property containing the contents of the config

Example Reply:
    {
    	"config": "set $mod Mod4\nbindsym $mod+q exit\n"
    }

  10. SEND_TICK

MESSAGE
Issues a TICK event to all clients subscribing to the event to ensure that all events prior to the tick were received. If a payload is given, it will be included in the TICK event

REPLY
A single object contains the property success, which is a boolean value indicating whether the TICK event was sent.

Example Reply:
    {
    	"success": true
    }

  11. SYNC

MESSAGE
For i3 compatibility, this command will just return a failure object since it does not make sense to implement in sway due to the X11 nature of the command. If you are curious about what this IPC command does in i3, refer to the i3 documentation.

REPLY
A single object that contains the property success, which is set to the boolean value false.

Exact Reply:
    {
    	"success": false
    }

  12. GET_BINDING_STATE

MESSAGE
Returns the currently active binding mode.

REPLY
A single object that contains the property name, which is set to the currently active binding mode as a string.

Exact Reply:
    {
    	"name": "default"
    }

  100. GET_INPUTS

MESSAGE
Retrieve a list of the input devices currently available

REPLY
An array of objects corresponding to each input device. Each object has the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
identifier | string | The identifier for the input device
name | string | The human readable name for the device
vendor | integer | The vendor code for the input device
product | integer | The product code for the input device
type | string | The device type. Currently this can be keyboard, pointer, touch, tablet_tool, tablet_pad, or switch
xkb_active_layout_name | string | (Only keyboards) The name of the active keyboard layout in use
xkb_layout_names | array | (Only keyboards) A list a layout names configured for the keyboard
xkb_active_layout_index | integer | (Only keyboards) The index of the active keyboard layout in use
scroll_factor | floating | (Only pointers) Multiplier applied on scroll event values.
libinput | object | (Only libinput devices) An object describing the current device settings. See below for more information

The libinput object describes the device configuration for libinput devices. Only properties that are supported for the device will be added to the object. In addition to the possible options listed, all string properties may also be unknown, in the case that a new option is added to libinput. See sway-input(5) for information on the meaning of the possible values. The following properties will be included for devices that support them:

PROPERTY | DATA TYPE | DESCRIPTION
send_events | string | Whether events are being sent by the device. It can be enabled, disabled, or disabled_on_external_mouse
tap | string | Whether tap to click is enabled. It can be enabled or disabled
tap_button_map | string | The finger to button mapping in use for tapping. It can be lmr or lrm
tap_drag | string | Whether tap-and-drag is enabled. It can be enabled or disabled
tap_drag_lock | string | Whether drag-lock is enabled. It can be enabled or disabled
accel_speed | double | The pointer-acceleration in use
accel_profile | string | The acceleration profile in use. It can be none, flat, or adaptive
natural_scroll | string | Whether natural scrolling is enabled. It can be enabled or disabled
left_handed | string | Whether left-handed mode is enabled. It can be enabled or disabled
click_method | string | The click method in use. It can be none, button_areas, or clickfinger
click_button_map | string | The finger to button mapping in use for clickfinger. It can be lmr or lrm
middle_emulation | string | Whether middle emulation is enabled. It can be enabled or disabled
scroll_method | string | The scroll method in use. It can be none, two_finger, edge, or on_button_down
scroll_button | int | The scroll button to use when scroll_method is on_button_down. This will be given as an input event code
scroll_button_lock | string | Whether scroll button lock is enabled. It can be enabled or disabled
dwt | string | Whether disable-while-typing is enabled. It can be enabled or disabled
dwtp | string | Whether disable-while-trackpointing is enabled. It can be enabled or_disabled_
calibration_matrix | array | An array of 6 floats representing the calibration matrix for absolute devices such as touchscreens

Example Reply:
    [
    	{
    		"identifier": "1:1:AT_Translated_Set_2_keyboard",
    		"name": "AT Translated Set 2 keyboard",
    		"vendor": 1,
    		"product": 1,
    		"type": "keyboard",
    		"xkb_active_layout_name": "English (US)",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	},
    	{
    		"identifier": "1267:5:Elan_Touchpad",
    		"name": "Elan Touchpad",
    		"vendor": 1267,
    		"product": 5,
    		"type": "pointer",
    		"libinput": {
    			"send_events": "enabled",
    			"tap": "enabled",
    			"tap_button_map": "lmr",
    			"tap_drag": "enabled",
    			"tap_drag_lock": "disabled",
    			"accel_speed": 0.0,
    			"accel_profile": "none",
    			"natural_scroll", "disabled",
    			"left_handed": "disabled",
    			"click_method": "button_areas",
    			"middle_emulation": "disabled",
    			"scroll_method": "edge",
    			"dwt": "enabled",
    			"dwtp": "enabled"
    		}
    	},
    	{
    		"identifier": "3034:22494:USB2.0_VGA_UVC_WebCam:_USB2.0_V",
    		"name": "USB2.0 VGA UVC WebCam: USB2.0 V",
    		"vendor": 3034,
    		"product": 22494,
    		"type": "keyboard",
    		"xkb_active_layout_name": "English (US)",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	},
    	{
    		"identifier": "0:3:Sleep_Button",
    		"name": "Sleep Button",
    		"vendor": 0,
    		"product": 3,
    		"type": "keyboard",
    		"xkb_active_layout_name": "English (US)",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	},
    	{
    		"identifier": "0:5:Lid_Switch",
    		"name": "Lid Switch",
    		"vendor": 0,
    		"product": 5,
    		"type": "switch",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	},
    	{
    		"identifier": "0:6:Video_Bus",
    		"name": "Video Bus",
    		"vendor": 0,
    		"product": 6,
    		"type": "keyboard",
    		"xkb_active_layout_name": "English (US)",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	},
    	{
    		"identifier": "0:1:Power_Button",
    		"name": "Power Button",
    		"vendor": 0,
    		"product": 1,
    		"type": "keyboard",
    		"xkb_active_layout_name": "English (US)",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	}
    ]

  101. GET_SEATS

MESSAGE
Retrieve a list of the seats currently configured

REPLY
An array of objects corresponding to each seat. There will always be at least one seat. Each object has the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
name | string | The unique name for the seat
capabilities | integer | The number of capabilities that the seat has
focus | integer | The id of the node currently focused by the seat or 0 when the seat is not currently focused by a node (i.e. a surface layer or xwayland unmanaged has focus)
devices | array | An array of input devices that are attached to the seat. Currently, this is an array of objects that are identical to those returned by GET_INPUTS

Example Reply:
    [
    	{
    		"name": "seat0",
    		"capabilities": 3,
    		"focus": 7,
    		"devices": [
    			{
    				"identifier": "1:1:AT_Translated_Set_2_keyboard",
    				"name": "AT Translated Set 2 keyboard",
    				"vendor": 1,
    				"product": 1,
    				"type": "keyboard",
    				"xkb_active_layout_name": "English (US)",
    				"libinput": {
    					"send_events": "enabled"
    				}
    			},
    			{
    				"identifier": "1267:5:Elan_Touchpad",
    				"name": "Elan Touchpad",
    				"vendor": 1267,
    				"product": 5,
    				"type": "pointer",
    				"libinput": {
    					"send_events": "enabled",
    					"tap": "enabled",
    					"tap_button_map": "lmr",
    					"tap_drag": "enabled",
    					"tap_drag_lock": "disabled",
    					"accel_speed": 0.0,
    					"accel_profile": "none",
    					"natural_scroll", "disabled",
    					"left_handed": "disabled",
    					"click_method": "button_areas",
    					"middle_emulation": "disabled",
    					"scroll_method": "edge",
    					"dwt": "enabled",
    					"dwtp": "enabled"
    				}
    			},
    			{
    				"identifier": "3034:22494:USB2.0_VGA_UVC_WebCam:_USB2.0_V",
    				"name": "USB2.0 VGA UVC WebCam: USB2.0 V",
    				"vendor": 3034,
    				"product": 22494,
    				"type": "keyboard",
    				"xkb_active_layout_name": "English (US)",
    				"libinput": {
    					"send_events": "enabled"
    				}
    			},
    			{
    				"identifier": "0:3:Sleep_Button",
    				"name": "Sleep Button",
    				"vendor": 0,
    				"product": 3,
    				"type": "keyboard",
    				"xkb_active_layout_name": "English (US)",
    				"libinput": {
    					"send_events": "enabled"
    				}
    			},
    			{
    				"identifier": "0:5:Lid_Switch",
    				"name": "Lid Switch",
    				"vendor": 0,
    				"product": 5,
    				"type": "switch",
    				"libinput": {
    					"send_events": "enabled"
    				}
    			},
    			{
    				"identifier": "0:6:Video_Bus",
    				"name": "Video Bus",
    				"vendor": 0,
    				"product": 6,
    				"type": "keyboard",
    				"xkb_active_layout_name": "English (US)",
    				"libinput": {
    					"send_events": "enabled"
    				}
    			},
    			{
    				"identifier": "0:1:Power_Button",
    				"name": "Power Button",
    				"vendor": 0,
    				"product": 1,
    				"type": "keyboard",
    				"xkb_active_layout_name": "English (US)",
    				"libinput": {
    					"send_events": "enabled"
    				}
    			}
    		]
    	}
    ]

EVENTS

Events are a way for client to get notified of changes to sway. A client can subscribe to any events it wants to be notified of changes for. The event is sent in the same format as a reply. The following events are currently available:

EVENT TYPE | NAME | DESCRIPTION
0x80000000 | workspace | Sent whenever an event involving a workspace occurs such as initialization of a new workspace or a different workspace gains focus
0x80000001 | output | Sent when outputs are updated
0x80000002 | mode | Sent whenever the binding mode changes
0x80000003 | window | Sent whenever an event involving a view occurs such as being reparented, focused, or closed
0x80000004 | barconfig_update | Sent whenever a bar config changes
0x80000005 | binding | Sent when a configured binding is executed
0x80000006 | shutdown | Sent when the ipc shuts down because sway is exiting
0x80000007 | tick | Sent when an ipc client sends a SEND_TICK message
0x80000014 | bar_state_update | Send when the visibility of a bar should change due to a modifier
0x80000015 | input | Sent when something related to input devices changes

  0x80000000. WORKSPACE

Sent whenever a change involving a workspace occurs. The event consists of a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
change | string | The type of change that occurred. See below for more information
current | object | An object representing the workspace effected or null for reload changes
old | object | For a focus change, this is will be an object representing the workspace being switched from. Otherwise, it is null

The following change types are currently available:
TYPE | DESCRIPTION
init | The workspace was created
empty | The workspace is empty and is being destroyed since it is not visible
focus | The workspace was focused. See the old property for the previous focus
move | The workspace was moved to a different output
rename | The workspace was renamed
urgent | A view on the workspace has had their urgency hint set or all urgency hints for views on the workspace have been cleared
reload | The configuration file has been reloaded

Example Event:
    {
    	"change": "init",
    	"old": null,
    	"current": {
    		"id": 10,
    		"name": "2",
    		"rect": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"focused": false,
    		"focus": [
    		],
    		"border": "none",
    		"current_border_width": 0,
    		"layout": "splith",
    		"percent": null,
    		"window_rect": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"deco_rect": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"geometry": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"window": null,
    		"urgent": false,
    		"floating_nodes": [
    		],
    		"num": 2,
    		"output": "eDP-1",
    		"type": "workspace",
    		"representation": null,
    		"nodes": [
    		]
    	}
    }

  0x80000001. OUTPUT

Sent whenever an output is added, removed, or its configuration is changed. The event is a single object with the property change, which is a string containing the reason for the change. Currently, the only value for change is unspecified.

Example Event:
    {
    	"change": "unspecified"
    }

  0x80000002. MODE

Sent whenever the binding mode changes. The event consists of a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
change | string | The binding mode that became active
pango_markup | boolean | Whether the mode should be parsed as pango markup

Example Event:
    {
    	"change": "default",
    	"pango_markup": false
    }

  0x80000003. WINDOW

Sent whenever a change involving a view occurs. The event consists of a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
change | string | The type of change that occurred. See below for more information
container | object | An object representing the view effected

The following change types are currently available:
TYPE | DESCRIPTION
new | The view was created
close | The view was closed
focus | The view was focused
title | The view's title has changed
fullscreen_mode | The view's fullscreen mode has changed
move | The view has been reparented in the tree
floating | The view has become floating or is no longer floating
urgent | The view's urgency hint has changed status
mark | A mark has been added or removed from the view

Example Event:
    {
    	"change": "new",
    	"container": {
    		"id": 12,
    		"name": null,
    		"rect": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"focused": false,
    		"focus": [
    		],
    		"border": "none",
    		"current_border_width": 0,
    		"layout": "none",
    		"percent": 0.0,
    		"window_rect": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"deco_rect": {
    			"x": 0,
    			"y": 0,
    			"width": 0,
    			"height": 0
    		},
    		"geometry": {
    			"x": 0,
    			"y": 0,
    			"width": 1124,
    			"height": 422
    		},
    		"window": 4194313,
    		"urgent": false,
    		"floating_nodes": [
    		],
    		"type": "con",
    		"pid": 19787,
    		"app_id": null,
    		"window_properties": {
    			"class": "URxvt",
    			"instance": "urxvt",
    			"transient_for": null
    		},
    		"nodes": [
    		]
    	}
    }

  0x80000004. BARCONFIG_UPDATE

Sent whenever a config for a bar changes. The event is identical to that of GET_BAR_CONFIG when a bar ID is given as a payload. See 6. GET_BAR_CONFIG (WITH A PAYLOAD) above for more information.

  0x80000005. BINDING

Sent whenever a binding is executed. The event is a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
change | string | The change that occurred for the binding. Currently this will only be run
command | string | The command associated with the binding
event_state_mask | array | An array of strings that correspond to each modifier key for the binding
input_code | integer | For keyboard bindcodes, this is the key code for the binding. For mouse bindings, this is the X11 button number, if there is an equivalent. In all other cases, this will be 0.
symbol | string | For keyboard bindsyms, this is the bindsym for the binding. Otherwise, this will be null
input_type | string | The input type that triggered the binding. This is either keyboard or mouse

Example Event:
    {
    	"change": "run",
    	"binding": {
    		"command": "workspace 2",
    		"event_state_mask": [
    			"Mod4"
    		],
    		"input_code": 0,
    		"symbol": "2",
    		"input_type": "keyboard"
    	}
    }

  0x80000006. SHUTDOWN

Sent whenever the IPC is shutting down. The event is a single object with the property change, which is a string containing the reason for the shutdown. Currently, the only value for change is exit, which is issued when sway is exiting.

Example Event:
    {
    	"change": "exit"
    }

  0x80000007. TICK

Sent when first subscribing to tick events or by a SEND_TICK message. The event is a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
first | boolean | Whether this event was triggered by subscribing to the tick events
payload | string | The payload given with a SEND_TICK message, if any. Otherwise, an empty string

Example Event:
    {
    	"first": true
    	"payload": ""
    }

  0x80000014. BAR_STATE_UPDATE

Sent when the visibility of a bar changes due to a modifier being pressed. The event is a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
id | string | The bar ID effected
visible_by_modifier | boolean | Whether the bar should be made visible due to a modifier being pressed

Example Event:
    {
    	"id": "bar-0",
    	"visible_by_modifier": true
    }

  0x80000015. INPUT

Sent when something related to the input devices changes. The event is a single object with the following properties:

PROPERTY | DATA TYPE | DESCRIPTION
change | string | What has changed
input | object | An object representing the input that is identical the ones GET_INPUTS gives

The following change types are currently available:
TYPE | DESCRIPTION
added | The input device became available
removed | The input device is no longer available
xkb_keymap | (Keyboards only) The keymap for the keyboard has changed
xkb_layout | (Keyboards only) The effective layout in the keymap has changed
libinput_config | (libinput device only) A libinput config option for the device changed

Example Event:
    {
    	"change": "xkb_layout",
    	"input": {
    		"identifier": "1:1:AT_Translated_Set_2_keyboard",
    		"name": "AT Translated Set 2 keyboard",
    		"vendor": 1,
    		"product": 1,
    		"type": "keyboard",
    		"xkb_layout_names": [
    			"English (US)",
    			"English (Dvorak)"
    		],
    		"xkb_active_layout_index": 1,
    		"xkb_active_layout_name": "English (Dvorak)",
    		"libinput": {
    			"send_events": "enabled"
    		}
    	}
    }

SEE ALSO

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