Switch: a macOS window switcher you drive from the keyboard
A keyboard-driven window switcher for macOS. Notarized. Free.
At a glance
- What is it?
- Switch is a native macOS window switcher that shows a grid of windows, filters as you type, and adds cross-Space support that moves a window to the current Space when you pick it. The licensing is unusual, an FSL-1.1-MIT arrangement that is source-available for non-competing use and converts to MIT on May 6, 2028, and the README states plainly that AI-generated pull requests will not be merged.
- Who is it for?
- Switch fits a macOS user who lives in the keyboard, wants a faster window switcher than the system one, and works across multiple Spaces without Mission Control animation.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A picker for windows, not applications
Switch is described as a keyboard-driven window switcher for macOS, and the design decision that sets it apart from the system switcher is the unit of selection. The picker shows windows rather than applications, so a single app with six open documents produces six tiles. The shortcut list in the README is the whole interaction model, and it is short enough to learn in a minute. Command-Tab cycles all windows, Option with the backtick cycles within the current app, and typing filters inline. There is optional Vim-style H J K L navigation, digits 1 through 9 or the numpad pick a tile directly, and Return commits while Escape cancels. Command-W closes a window, Command-Q quits the app and Command-H hides it, and the ordering is most recently used, with the picker pre-warming in the background so it is already rendered when you call it.
The project is written in Swift, the licence is FSL-1.1-MIT, the default branch is main, and the homepage is switch-dev.sanyamgarg.com. The recent releases are v0.3.19 from 2026-10-20, v0.3.18 from 2026-10-18 and v0.3.17 from 2026-09-22, so this is a project on a fast patch cadence rather than a finished 1.0.
Installing from Homebrew, and the notarization requirement
The install is a Homebrew cask pointing at the tap.
brew install --cask Sanyam-G/switch/switchAlternatively you can download the latest .dmg from the project site. The README states that the app is notarized by Apple, requires macOS 14 or newer, and is free, and the downloadable artefact is a .dmg, so this is a normal macOS application distribution rather than a script or a package you compile.
Removing it is the mirror image of the install.
brew uninstall --cask Sanyam-G/switch/switchOr, in the manual case, quit Switch and drag Switch.app from /Applications to the Trash. The repository layout matches a native Swift application: a Sources/ directory for the code, a project.yml for the Xcode project generation, scripts/ and tools/ directories, and a CONTRIBUTING.md. There is no build system to run and no runtime dependency to install, which is the practical advantage of shipping a signed app rather than a tool you compile.
Cross-Space windows, and why it matters on a Mac
The feature that separates Switch from a plain window picker is cross-Space support. macOS Spaces are separate virtual desktops, and the system switcher only shows the windows of the current Space, so a window on another desktop is invisible until you move there. Switch shows windows on other Spaces in the picker, badged OTHER SPACE. Picking one moves it to your current Space, and the README says this happens with no Mission Control animation.
There is a toggle for the whole behaviour, and a further setting to choose whether Spaces are mixed by recency, found in Settings, Cross-Space. The default question is whether you want windows jumping between desktops automatically, which is convenient if you use Spaces as separate work contexts and annoying if you use them as separate full-screen presentations. The setting is there, and the badge is there, so the feature is designed to be visible rather than surprising.
This is the kind of thing that only matters on macOS, and it is worth remembering that the app is macOS 14 and newer, so it targets recent versions where the window management APIs behave differently from the ones older tools were written against.
Vertical list, excluded apps and sticky mode
Three settings sections change the shape of the picker rather than add features. Settings, Behavior, Vertical list switches from a grid to a single-column layout showing the app icon, the name, the window title and a thumbnail, which is the better choice when window titles are long or when you have many windows open on one app. Settings, General, Excluded apps hides windows from particular applications, which is how you keep a video call or a full screen game out of the picker. Settings, Behavior, Sticky picker keeps the picker open when you release Command, so Return switches and Escape cancels without the picker vanishing.
Sticky mode has a second control worth knowing about. A separate hotkey under Settings, Hotkeys, Sticky toggles sticky on or off at runtime, which is the way to get the same behaviour for one invocation and a different behaviour for the next, rather than a permanent setting.
The general pattern is that the app is configured almost entirely through named settings paths rather than a preferences file, and the README documents each one as a sentence describing what it does and where it lives.
Updates through Sparkle, on a daily background check
Updates are built in rather than left to a package manager. The README says there is a daily background check, and that a manual check is available at Settings, About, Check for Updates, with an EdDSA-signed appcast via Sparkle. The signature detail is the important part: an EdDSA-signed appcast is what lets the client verify that the update it is about to install came from the publisher, rather than trusting whatever the server hands it.
That matters more here than it would for a command line tool, because the update is a signed application bundle that replaces a running system-level app, and a Mac user typically lacks the context to tell a legitimate update from a hostile one. The notarization by Apple and the signed appcast are two different guarantees covering two different things, and the project uses both.
The roadmap lives on the project site rather than in the repository, at switch-dev.sanyamgarg.com/development, so the README points there instead of listing what is planned.
FSL-1.1-MIT, and the two year conversion date
The licensing deserves its own reading because it is unusual. The README names the licence as FSL-1.1-MIT and describes it as source-available, free for any non-competing use, converting to MIT on May 6, 2028. In other words, the code is visible and usable today, and it becomes MIT licensed on a fixed date, but until then a commercial product that competes with it is not covered by the grant.
That is a deliberate structure for a piece of software whose author is offering it free while asking for a coffee. The Buy me a coffee link and the FSL arrangement are the two halves of the same arrangement, and the two-year date gives an adopter a clear horizon.
The project also states its policy on contributions in one line: it will take feature ideas from AI-generated pull requests but will not merge them, and hand-written pull requests are welcome. The copyright line reads (c) 2026 Sanyam Garg.
Where a native window switcher is the wrong answer
Two cases point elsewhere, and one is legal rather than technical. The first is a company building a competing window management or productivity product. The FSL-1.1-MIT grant covers non-competing use, so shipping Switch inside a competing product is exactly the case the licence excludes, and the answer is a different licence conversation with the author, not a technical workaround.
The second is a non-Mac user, or a Mac user on an old system, since the app requires macOS 14 or newer and there is no other platform target. For a Windows or Linux user the equivalent category of tool exists but this is not it.
The alternative worth weighing is the built-in macOS switcher together with a general window manager, and the difference in approach is where the value lies. The system switcher is a list of applications, the sort of thing you extend with third party tools, and any extension works within the system's own model of what a window is and where it can appear. Switch takes the opposite approach: it renders its own picker, its own previews and its own Space handling, which is what lets it show a window from another desktop and move it, something a picker built on the system's model cannot do. The cost is that you are running a second window manager alongside the one macOS already has, and the two can disagree about focus and about what the Command-Tab key means.
Editorial conclusion
Switch fits a macOS user who lives in the keyboard, wants a faster window switcher than the system one, and works across multiple Spaces without Mission Control animation. It does not fit a team shipping a competing window management product, because the FSL-1.1-MIT licence is source-available and free only for non-competing use, and it does not fit a user who wants to send patches, since the README says AI-generated pull requests will be taken as feature ideas but will not be merged. Before you rely on it, read the LICENSE.md terms, and check the version you install, because the project is on a 0.3.x line with releases on 2026-10-18 and 2026-10-20.
Frequently asked questions
What is Switch for macOS?
It is a keyboard-driven window switcher for macOS that shows a grid of windows rather than applications, with inline type filtering, optional Vim-style H J K L navigation, digit keys to pick a tile directly, and most recently used ordering with the picker pre-warming in the background. It requires macOS 14 or newer.
How do I install Switch?
With the Homebrew cask, brew install --cask Sanyam-G/switch/switch, or by downloading the latest .dmg from the project site. The app is notarized by Apple, and it is free.
What does the cross-Space feature do in Switch?
Windows on other macOS Spaces show up in the picker badged OTHER SPACE, and picking one moves it to your current Space with no Mission Control animation. The behaviour can be toggled off, and in Settings, Cross-Space you can choose whether to mix Spaces by recency.
How does Switch handle updates?
Updates are built in, with a daily background check and a manual check at Settings, About, Check for Updates. The mechanism is an EdDSA-signed appcast via Sparkle, so the client can verify the update comes from the publisher.
Can I use Switch commercially?
The licence is FSL-1.1-MIT, described in the README as source-available and free for any non-competing use, converting to MIT on May 6, 2028. A commercial product that competes with Switch is the case the current grant does not cover.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/sanyam-g-switch)Was this useful?