What It Does
macOS gives you as many spaces as you like and then hides which one you are on. ActiveSpace puts a numbered bubble in the menu bar that always tells you, and updates the moment the space changes, however you changed it.
Click the bubble to go somewhere else. With two spaces a click toggles between them; with three or more you get a popover with a button per space. Arriving somewhere brings forward an app that actually lives on that space, so you are never left on a desk with nothing selected.
Optionally, ActiveSpace can also replace the system cmdtab switcher with one that only shows apps with windows on your current space — including minimised windows and windows of hidden apps. Off by default; enable it in Settings if you want it.
How It Works
ActiveSpace does not switch spaces itself. It sends the keyboard shortcut macOS already has for the space you picked, and macOS does the rest. One mechanism on every display configuration, and nothing that breaks the next time Apple changes how Mission Control works.
Those shortcuts live in System Settings, under Keyboard Shortcuts and Mission Control, as Switch to Desktop 1, Switch to Desktop 2 and so on. They are switched off by default on a new Mac, so ActiveSpace’s Settings lists one row per space showing the key macOS has for it, or saying plainly that it has none. One button turns on every missing one.
Earlier versions did switch spaces themselves, with synthetic trackpad gestures and an invisible virtual display to make that work on a single-monitor Mac. macOS 27 ended all of it. Deferring to macOS turned out to be simpler, steadier, and about a thousand lines lighter.
Grid Layout
If you keep more than a handful of spaces and think of them as a grid — for example: 8 spaces as a 4×2 — tell ActiveSpace your row width in Settings. The popover reflows into rows of that width, and two extra hotkeys become available which navigate up/down a row, with optional column-wrap (where navigating down from the bottom of a column lands at the top of the same column and vice versa).
Navigate up/down are ActiveSpace’s own shortcuts, because macOS has no equivalent: moving a row at a time through a grid is not something Mission Control knows about. Set row width to 0 to keep the original linear strip.
Space-Aware Cmd-Tab Switcher
Enable the Switcher in Settings and cmdtab shows only the apps with windows on your current space. Cycle with tab or arrow keys, reverse with shifttab, commit by releasing cmd or pressing return, cancel with esc. Click any icon in the HUD to commit directly.
Apps that are completely hidden (cmdH) or have only minimised windows on the current space still appear in the HUD with a small badge. Selecting one unminimises or unhides as needed before bringing it forward.
When the Switcher is off, native cmdtab behaviour is completely untouched.
Follow App Across Spaces
Some apps you want everywhere: a terminal, a notes window, whatever is playing music. Bind a shortcut in Settings and it pins the frontmost app’s windows to every Mission Control space, the same thing you get from the Dock icon’s right-click menu under Options → Assign To → All Desktops.
The difference is getting back. Press the same shortcut again and the app stops following you and returns to the space it was on when you first turned it on, which saves hunting for where you left it.
Space Detection
ActiveSpace queries the private CoreGraphics CGSCopyManagedDisplaySpaces API to enumerate all spaces across all displays and identify which is current. It stays up to date via three mechanisms:
- Space change notification — fires on every space switch
- Screen parameters notification — fires when spaces are added or removed via Mission Control
- 2-second poll timer — backstop for edge cases where notifications don't fire
Installation
Two formats on every release — both signed and notarised, pick whichever suits:
- Installer (
.pkg) — recommended for first-time installs. Double-click to run; macOS Installer places the app in/Applicationswithout quarantine or App Translocation. - Download (
.zip) — unzip and dragActiveSpace.appto your Applications folder.
Or install it with Homebrew: brew install --cask perpetualbeta/jorvik/activespace
Launch ActiveSpace from /Applications and grant Accessibility when prompted. Input Monitoring is only asked for if you use the keyboard features.
Settings
Right-click the icon and choose Settings… to configure:
- Switching Spaces — one row per space showing the Mission Control shortcut macOS has for it, or saying it has none, with a button that sets up the missing ones
- Grid — optional row width to reflow the popover and enable the up/down navigation hotkeys
- Navigation — Wrap around at the ends, on by default. Turn it off for a hard stop at the top and bottom of a column
- ActiveSpace Shortcuts — Follow App Across Spaces, plus the grid’s up/down hotkeys. These are the app’s own, because macOS has no equivalent
- Switcher — toggle the space-aware cmdtab replacement on or off
- Permissions — Accessibility and Input Monitoring status with grant buttons
- Launch at Login — start automatically when you log in
Auto-updates are handled by Sparkle. Use the “Check for Updates…” menu item to check on demand; Sparkle’s prompt offers an “Automatically download and install updates in the future” checkbox the first time an update is available. ActiveSpace checks for new versions automatically once a day in the background.
Permissions
Both are manageable from the Settings panel:
- Accessibility — always required. ActiveSpace switches spaces by sending a keystroke, and macOS only lets a trusted app do that. It will prompt on first launch.
- Input Monitoring — only required if you use the keyboard. It exists for the shortcut listener, which is created only when the Switcher is on, or Follow App Across Spaces is bound, or grid layout is on with an up/down hotkey bound. Turn all of those off and ActiveSpace never asks for it.
There is nothing to disable in System Settings. ActiveSpace no longer competes with the built-in Mission Control shortcuts, it uses them.
Building from Source
Open the Xcode project and build:
- Clone the repo:
git clone https://github.com/PerpetualBeta/ActiveSpace.git - Open
ActiveSpace.xcodeprojin Xcode - Build with commandB or run with commandR
Requirements
macOS 14 (Sonoma) or later. Universal binary (Apple Silicon and Intel).
Read about ActiveSpace
- When the Stars Align — how synthetic dock-swipe gestures once enabled instant space switching, with credit to the open-source projects that made it possible. Superseded by macOS 27.
- When the Stars Align (Redux) — the single-monitor debugging odyssey, and the invisible virtual display that fixed it at the time. Both are now history.
- When the Stars Align (Final Cut)(Maybe) — the post-Redux week of subtle misbehaviour, three small fixes that finally let ActiveSpace ship cleanly, and the satisfying deletion of a fourth that the data showed wasn’t needed.