Noswoosh: Instant, animation-free switching between macOS Spaces

k5hp1 pts0 comments

GitHub - mmathys/noswoosh: No swoosh: instant macOS space switching with Ctrl+arrows — no animation, no SIP disable. A tiny self-compiled Swift daemon. · GitHub

/" data-turbo-transient="true" />

Skip to content

Search/

Sign in<br>Sign upAppearance settings

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

mmathys

noswoosh

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Latest commit

History<br>11 Commits<br>11 Commits

Folders and files<br>NameNameLast commit message<br>Last commit date<br>assets

assets

tools

tools

.gitignore

.gitignore

LICENSE

LICENSE

README.md

README.md

install.sh

install.sh

noswoosh.swift

noswoosh.swift

uninstall.sh

uninstall.sh

View all files

Repository files navigation

noswoosh

Instant, animation-free switching between macOS Spaces with Ctrl+←/→ — no SIP disabling, no global Reduce Motion. A single ~250-line Swift file you compile yourself.

The name: "swoosh" is Apple's own word for the space-slide animation — from the long-dead Snow Leopard setting workspaces-swoosh-animation-off. This is that setting, resurrected.

Verified on macOS 26 (Tahoe) , Apple Silicon. The technique it uses is known to work on macOS 14/15 as well.

Why

macOS has no supported way to disable only the space-switch slide animation:

The old defaults write com.apple.dock workspaces-swoosh-animation-off died with Lion (2011).

Reduce Motion works but is global (and it's a crossfade, not an instant cut).

Per-app accessibility settings (Reduce Motion for Dock only) exist on iOS, not macOS.

yabai can do it, but only with SIP partially disabled.

This tool takes the approach used by InstantSpaceSwitcher, WhichSpace, and BetterTouchTool: synthesize a Dock-swipe trackpad gesture with near-zero progress and high velocity . The switch runs through the Dock's own pipeline — so Mission Control, focus, wallpaper, and Dock state all stay consistent — but the animation has zero distance to travel, making it instant. No SIP changes, no admin rights; only an Accessibility permission to post events.

Install

Requires Xcode Command Line Tools (xcode-select --install).

Homebrew

brew install mmathys/tap/noswoosh<br>noswoosh-ctrl-arrows off # disable the system's animated Ctrl+arrow shortcuts (live + persisted)<br>brew services start noswoosh # start the daemon now and at every login

Then the one step that can't be scripted: grant Accessibility permission (macOS prompts on first start, or add /opt/homebrew/opt/noswoosh/bin/noswoosh under System Settings → Privacy & Security → Accessibility) and run brew services restart noswoosh. Re-show these instructions anytime with brew info noswoosh. Note: every brew upgrade changes the binary hash, so the Accessibility grant must be re-done after upgrades.

The formula lives in mmathys/homebrew-tap.

From source

git clone https://github.com/mmathys/noswoosh.git<br>cd noswoosh<br>./install.sh

The installer:

Compiles noswoosh.swift and installs the binary + source to ~/.local/bin/.

Disables the system's animated Ctrl+←/→ Mission Control shortcuts (symbolic hotkeys 79/81) — persisted in com.apple.symbolichotkeys and applied live so no logout is needed. Ctrl+Shift+arrows and all other shortcuts are untouched.

Installs and starts a LaunchAgent (ax.max.noswoosh) so the daemon runs at every login. It logs to ~/Library/Logs/noswoosh.log.

Grant Accessibility (one manual step)

On first start the daemon requests Accessibility permission (macOS gates synthetic events behind it). Approve the prompt, or add it manually:

System Settings → Privacy & Security → Accessibility → "+" → Cmd+Shift+G → ~/.local/bin/noswoosh

Then restart the daemon:

launchctl kickstart -k gui/$(id -u)/ax.max.noswoosh

Important: the permission is tied to the binary's code signature. Every rebuild invalidates it. If toggling the checkbox doesn't take, remove the entry ("−"), restart the daemon (which re-triggers the prompt), enable it, and restart the daemon once more. Check ~/Library/Logs/noswoosh.log — a waiting for Accessibility permission line after a restart means it's still not trusted.

Usage

Ctrl+→ / Ctrl+← — switch one space right/left, instantly. Clamped at the first/last space (no rubber-band bounce).

CLI (mostly for scripting/debugging):<br>noswoosh list # "space 2 of 4"<br>noswoosh right # switch once and exit<br>noswoosh left<br>noswoosh empty # which spaces have no windows

The empty-desktop yank (and why this tool prevents it)

While building this we found a macOS behavior you can reproduce with plain native switching: switch to a desktop with no windows, and ~400 ms later macOS yanks you to a different desktop. Chain of events (visible in the Dock's log):

Landing on a windowless space, WindowServer promotes...

noswoosh macos accessibility animation ctrl space

Related Articles