Window selection allows for multiple criteria at once, and I can also reject windows.
I'm also able to use the window manager's client list as a source, which makes getting toplevel windows much easier.
Window movement is done using static gravity, fixing an issue where windows were moving differently if they were a terminal window versus non-terminal window.
Bonk can delete properties. I sometimes delete WM_NORMAL_HINTS if a window has size hints set where I can't resize it the way I want.
xdotool can raise windows but can't lower them (bonk can do both).
With kwin it's easy to manually override an application/window to ignore geometry constraints or whatever. I do this for xterm to avoid having a few pixels of background showing at the edge when maximized.
I also used to do this a lot to get the much-nicer "soft fullscreen" in SDL1 applications.
Come to think of it, I should put in better documentation for the state option, as well as a general maximize alias.
I updated my script for i3wm to toggle windows between scratchpad/active/start/stop:
https://gist.github.com/tkapias/0443d4930c1d7b520f4496e1ff39...
Obviously.
X11 is absolutely not the way to go.
When Wayland will get better and apps start supporting Wayland more than they support X11, it will be the time to switch, but at the glacial pace Wayland advances, chances are that your current system will be obsolete when it will happen.
It is still a good idea to consider Wayland support for your own apps and have at least a test machine running it, but doesn't mean writing apps designed to work with X11 like this one is a wasted effort. X11 is here to stay, for a while at least.
I'm not talking about low-level system/graphics bugs, but standard shell/toolkit/application bugs. Things like "alt-letter does not select the correct menu" and "switching between English/Greek keyboard layouts sometimes gets stuck".