Release / / with v0.21.0-Beta, v0.21.1-Beta
AeroSpace v0.21.2-Beta
Combine window commands with conditions and pipes in keyboard bindings.
Share
Before you upgrade to v0.21.2-Beta
7 to fixLegacy `on-window-detected` conditions such as `if.app-id` are soft-deprecated but still supported; command predicates such as `if = 'test ...'` are documented replacements.
Read the evidence
Quote literal reserved characters in binding and callback command arguments, separate quoted words with spaces, and escape command-line continuations with a backslash.
Add `--fail-if-noop` when scripts need `layout` to return a failure for an unchanged layout; by default an unchanged layout now succeeds.
Read the evidence
Configuration reloads can apply valid settings despite minor errors; warnings go to stderr, while `--warnings-as-errors` reports them as errors.
Update custom socket clients to exchange a four-byte protocol version of 1 before sending length-prefixed JSON requests.
Read the evidence
Update scripts that require an exact generic-error exit code: generic errors now use 2; test conditions distinguish false from errors.
Read the evidence
Install Bash 5 and use the repository's Swift 6.3.2 toolchain when building this release from source.
Replace unframed JSON reads and writes with a four-byte little-endian payload length followed by UTF-8 JSON, in both directions, after the version handshake.
What changed in v0.21.2-Beta
The built-in shell supports sequences, conditions and pipes, with `eval` for CLI use; `subscribe`, `run-callback`, automatic config reload and mouse-driven focus are also available.
v0.21.2-Beta; Beta for macOS 13+, available as a GitHub release archive; Accessibility permission required.
New things you can do
Combine window-management commands with conditions, sequences and pipes.
Read the evidence
Receive window, focus, workspace, mode and binding events as JSON lines.
Focus windows by moving the pointer over them.
Fixed and improved
Set `auto-reload-config = true` and reload once manually to reload configuration on file saves.
Use command predicates in `on-window-detected`; `run-callback on-window-detected --for-every-window` reapplies rules to existing windows and exposes callback output.
Set layouts on empty workspaces or use `layout --workspace NAME --root`; directional `focus` and `move` can refuse to leave fullscreen windows.
`--no-stdin` no longer reads input; `workspace next/prev --stdin` can choose the first listed workspace when the current workspace is absent from the list.
Read the evidence
Mouse-driven focus respects fullscreen windows and ignores pointer positions that do not identify a normal window.
Menu-bar clicks no longer steal focus when Displays have separate Spaces is off; keyboard focus no longer interleaves floating windows between every accordion window.
Read the evidence
Restoring a floating window preserves its latest size so it is not nudged away from the right or bottom screen edge.
Seeded by @iluxav with Codex, from the release's public sources. Each change links to its evidence.