No description
  • Swift 93.7%
  • Python 3.2%
  • Shell 2.9%
  • Objective-C 0.1%
Find a file
bogac 0cb2068e5f
Some checks failed
build / build-debug (push) Has been cancelled
build / build-debug-1 (push) Has been cancelled
build / build-debug-2 (push) Has been cancelled
build / build-release (push) Has been cancelled
build / build-release-1 (push) Has been cancelled
Tidy the repo root, rewrite the README
2026-08-14 12:32:20 +10:00
.bundle Bundler: install gems locally 2024-07-22 01:53:40 +02:00
.github Fix GitHub actions 2026-06-26 11:49:58 +02:00
.idea AppCode indentation settings 2023-09-15 02:00:00 +02:00
axDumps 2/2 Fix wisprFlow popup detection 2026-07-11 23:03:25 +02:00
dev-docs Tidy the repo root, rewrite the README 2026-08-14 12:32:20 +10:00
docs Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
grammar Add sticky windows 2026-08-01 13:10:06 +10:00
icons New app icon with light and dark variants 2026-08-12 14:40:51 +10:00
legal Minor 2026-07-01 00:00:53 +02:00
personal Tidy the repo root, rewrite the README 2026-08-14 12:32:20 +10:00
resources New app icon with light and dark variants 2026-08-12 14:40:51 +10:00
script Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
Sources Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
xcode Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
.editorconfig set max_line_length for COMMIT_EDITMSG 2025-06-14 21:53:30 +02:00
.gitattributes Drop stale ShellParserGenerated 2026-07-07 16:14:17 +02:00
.gitignore Make the xcode project git worktree-friendly and move it to its own subdir 2026-07-07 16:14:17 +02:00
.swift-version Bump Swift 2026-06-10 15:36:30 +02:00
.swiftformat Make the xcode project git worktree-friendly and move it to its own subdir 2026-07-07 16:14:17 +02:00
.swiftlint.yml Make the xcode project git worktree-friendly and move it to its own subdir 2026-07-07 16:14:17 +02:00
build-debug.sh Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
build-docs.sh Doc: Highlight active TOC section while scrolling 2026-06-24 18:07:10 +02:00
build-release.sh Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
build-shell-completion.sh Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
CONTRIBUTING.md Update CONTRIBUTING.md 2026-06-22 14:55:12 +02:00
format.sh 2/2 format.sh: drop --check-uncommitted-files & move swiftlint to lint.sh 2026-06-10 16:32:03 +02:00
Gemfile Bump pygments.rb to support TOML 1.1.0 2026-06-10 15:40:11 +02:00
generate.sh Make the xcode project git worktree-friendly and move it to its own subdir 2026-07-07 16:14:17 +02:00
install-from-sources.sh Use modern bash 2026-06-13 18:22:15 +02:00
LICENSE.txt License fuss 2024-09-22 19:22:42 +02:00
lint.sh Drop stale ShellParserGenerated 2026-07-07 16:14:17 +02:00
makefile Reorgonize test scripts to avoid common 'run-' prefix 2026-04-14 19:30:17 +02:00
Package.resolved Remove old generated Shell lexer & parser implementation 2026-06-21 02:03:02 +02:00
Package.swift Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
README.md Tidy the repo root, rewrite the README 2026-08-14 12:32:20 +10:00
run-cli.sh Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
run-debug.sh Use modern bash 2026-06-13 18:22:15 +02:00
swift-test.sh Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00
test.sh Give the fork its own identity: bogac.aerospace-next, AeroSpace Next, aerospace-next CLI 2026-08-14 12:02:28 +10:00

AeroSpace Next

A personal fork of AeroSpace, the i3-like tiling window manager for macOS.

Credit

AeroSpace is written by Nikita Bobko and is MIT licensed. Every good idea in this repository is his: the tree paradigm, the workspace emulation that avoids macOS Spaces, the command surface, the CLI-first design, the whole architecture. This fork is a handful of commands bolted onto his work for one person's habits.

If you want AeroSpace, get it from upstream rather than here. If you already use it and it saves you time, sponsor him.

The upstream documentation applies to this fork almost completely, and it's better than anything I would write: Guide · Commands · Goodies

What's different

Four commands upstream doesn't have.

scratchpad parks a window out of sight and summons it back with one key, i3 style. The window keeps running and reappears floating, in the same relative position it had when you hid it. Several named scratchpads can coexist, so a terminal and a notes window can live on different keys.

scratchpad move        # park the focused window
scratchpad toggle      # bring it back, or send it away again
scratchpad move --name notes

layout-snapshot saves a workspace's tiling layout to a file and rebuilds it later, so you can flip between a teaching desk and a research desk. It matches saved slots to windows that are running now, gathering them back from wherever they ended up after a restart. It never launches anything.

layout-snapshot save teaching
layout-snapshot restore teaching
layout-snapshot list

window-hints shows a panel listing every window with a hint letter; press the letter to jump there. It uses letters rather than a search field on purpose: AeroSpace is a background accessory app, so a text field would have to steal keyboard focus and hand it back, which is where focus bugs come from. The hints run through the existing global hotkey machinery instead, and the panel never takes focus at all.

sticky keeps a window visible on every workspace, for a timer or a video call. Upstream issue #2, approached as an emulation rather than a model change: the window is rebound to whichever workspace is active on its monitor, so it always has exactly one parent.

sticky toggle

Smaller changes. The menu bar lists saved layouts with the keys that restore them and hides empty workspaces, which matters when persistent-workspaces keeps eleven of them alive. build-release.sh takes a --skip-docs flag that builds just the app and the CLI, skipping the man pages and shell completions that need Ruby, Rust and fish. New app icon, light and dark. The sponsor item is gone from the menu, which is why the ask is at the top of this file instead.

Identity

This fork has its own bundle id, config file, socket and state directory, so it coexists with upstream rather than replacing it.

upstream this fork
App AeroSpace.app AeroSpace Next.app
Bundle id bobko.aerospace bogac.aerospace-next
CLI aerospace aerospace-next
Config ~/.aerospace.toml ~/.aerospace-next.toml
Snapshots n/a ~/.local/state/aerospace-next/layouts

Run both at once and they will fight over your windows, since neither can see the other any more. Quit one.

Building

Needs Xcode, bash 5 (brew install bash, since macOS ships 3.2), and a self-signed code signing certificate named aerospace-codesign-certificate. See dev-docs/development.md for the Keychain Access steps.

./build-debug.sh && ./swift-test.sh          # fast loop
./build-release.sh --skip-docs               # signed app
cp -r ".release/AeroSpace Next.app" /Applications/

Grant Accessibility permission on first launch. Because the app is signed, the grant survives rebuilds, and start-at-login = true works.

Layout

Sources/            upstream's code, plus the four commands
docs/               upstream's asciidoc, plus one page per new command
dev-docs/           architecture and development notes
  fork-notes.md     why this fork does what it does, and the traps
  reviews/          code reviews of the fork and the replies
personal/           my config, cheatsheet and hotkey tooling
icons/              app icon masters

dev-docs/fork-notes.md is the file to read before changing anything. It covers the eight places a new command has to be registered, the design decisions behind each feature, and the mistakes that cost the most time.

License

MIT, same as upstream. See LICENSE.txt, which retains Nikita Bobko's copyright.