github nikitabobko/AeroSpace v0.21.0-Beta

pre-release5 hours ago

New features

  • #12 Implement focus-follows-mouse
  • #278 Overall, increase AeroSpace scriptability:
    • Implement shell && (and), || (or), ; (sequence) and | (pipe). See #shell section in the updated docs.
    • Implement aerospace test, aerospace test-not, aerospace eval, aerospace echo commands.
    • on-window-detected callback gets a new more composable syntax: docs (the old syntax is still supported and probably will remain supported forever: docs)
    • Related issues: #359 #842 #375 #460 #660
  • 16a0b634 Migrate from TOML 1.0.0 to TOML 1.1.0. Now, you can use newlines in inline tables! Which I highly recommend in your on-window-detected callbacks instead of the dubious double square brackets syntax. AeroSpace docs were updated to use the new syntax. See TOML 1.1.0 release notes for more details.
  • #1673 Introduce the warnings in reload-config command. Warnings are printed to stderr and do not block config reload. You can use the new --warnings-as-errors flag to convert warnings to errors.
    • You will now get a warning if config-version is below the maximum value.
  • #163 Implement auto-reload-config config option. Kudos to @bshowell0
  • #1514 Implement aerospace subscribe command - the alternative to callbacks. Kudos to @ojowwalker77
  • #107 Implement aerospace run-callback command to programmatically run the specified callback.
  • #1480 focus/move commands: add --fail-if-fullscreen/--fail-if-macos-native-fullscreen. Kudos to @ishangodawatta
  • bb1e5429 layout command can now change the layout of an empty workspace (changes the layout of the root tiling container)
  • #940 layout command: support new --root flag
  • 91064acc layout command: support --workspace <workspace> flag
  • #1701 Implement aerospace focus --wrap-around alias. Kudos to @i-pj

New documentation

  • config-version is now properly documented: link
  • AEROSPACE_WINDOW_ID and AEROSPACE_WORKSPACE environment variables are now properly documented: link
  • Update the "trackpad gestures trick" in goodies to use the new more performant shell operators: link

Improvements

  • #1513 The client-server socket protocol is now documented and is part of the public API. Unfortunately, this results in a breaking change for clients who interact with the socket directly.
  • #2103 Treat Outlook reminders as popups. Kudos to @sivertism
  • #2133 Treat Codex pet window as popup
  • #776 Treat Emacs child frames as popups. Kudos to @jperras

Bug fixes

  • #2084 Fix potentially infinite while loop
  • #1921 Potentially fix 'Value is already destroyed' crash

Other minor bug fixes: 6021c13c, a8241641, #1064, 19b5999d 6a2a126d ecfc745c

Breaking changes

  • #1513 The client-server socket protocol was changed to make it future proof and public. Unfortunately, it results in a breaking change for clients that interact with the socket directly. The clients have to be updated.
  • #278 The parser of binding's right-hand side was rewritten to support the new shell operators. That results in breaking changes in some corner cases. Most of the users are not affected. But if you are doing something creative in your bindings, you might need to update them. The fix should be trivial - just quote the appropriate arguments.
  • b5f9e443 layout command now return zero exit code when the layout is already applied. This only affects users who supplied a single argument to the layout command (I expect it to be rare). You can use --fail-if-noop flag to return the old behavior.
  • 8ceabe9b Forbid the error prone on-window-detect callbacks with empty or non-existing if clause.

- Nikita Bobko, 30 June 2026

Don't miss a new AeroSpace release

NewReleases is sending notifications on new releases.