It's like swaymsg (in sway) or i3ipc (in i3) but in native Nim.
You might find these docs for i3ipc useful: https://i3wm.org/docs/ipc.html
See also the useful examples below.
See the documentation for the swayipc module as generated directly from the source.
import asyncdispatch
from strutils import spaces
import swayipc
proc dump(tree: TreeReply; indent=0) =
  echo indent.spaces, tree.id, " ", tree.`type`
  for n in tree.nodes:
    n.dump(indent + 2)
  for n in tree.floating_nodes:
    n.dump(indent + 2)
var
  # connect to a compositor at an optional socket path
  compositor = waitFor newCompositor("../some/path")
  # synchronous tree retrieval
  reply = compositor.invoke(GetTree)
dump(reply.tree)
#1 root
#  2147483647 output
#    2147483646 workspace
#  15 output
#    26 workspace
#      28 con
#      39 con
#      49 floating_con
#    37 workspace
#      36 con
#    38 workspace
#      34 con
#    50 workspace
#      6 floating_con
#    7 workspace
#      5 con
# you can pass extra arguments for a command (as strings)
reply = waitFor GetBarConfig.invoke("status")
assert reply.bar.config.mode == "hide"
# you can invoke `send` to instantiate the compositor
block:
  var
    compositor = waitFor RunCommand.send("opacity 0.5")
    # receive the reply
    receipt = waitFor compositor.recv()
    # maybe you want to twiddle your own json?
    js = receipt.data
    # or, nah, that's silly...
    reply = receipt.reply
  # multiple command results are returned as a sequence
  assert reply.ran[0].success
# an example subscription iterator:
iterator focusChanges(): WindowEvent =
  let compositor = waitFor Subscribe.send("[\"window\"]")
  while true:
    let receipt = waitFor compositor.recv()
    if receipt.kind != EventReceipt:
      continue
    if receipt.event.kind != Window:
      continue
    if receipt.event.change != "focus":
      continue
    yield receipt.event.window
for window in focusChanges():
  echo window.name, " now has focus"- reposition and resize floating windows matching any of a series of regexps
 - automagically adjust the opacity of windows according to whether they are focussed
 
MIT