TypeSwitch is a native macOS menu bar utility for switching input methods per app. Choose how each app should behave, set the rule for unconfigured apps, and let TypeSwitch switch to the right input method when the frontmost app changes.
🇨🇳 简体中文 · 🇺🇸 English
- Switch automatically by app. TypeSwitch watches the frontmost app and applies its saved input method rule as you move between apps, except for apps you choose to ignore.
- Choose the behavior that fits. Let an app inherit the default rule, remember its
Last Switch, select aSpecific Input Method, or ignore apps you do not want TypeSwitch to manage. - Configure apps where you find them. Set a rule for the current app, review running apps by configuration status, or manage every saved rule without leaving the menu bar.
- Keep rules and results tidy. Find rules for missing apps, remove stale settings, review successful switch counts, and clear statistics when needed.
- Fit TypeSwitch into your workflow. Launch it at login, check for updates through Sparkle, open the GitHub repository, or press
Command + Qto quit.
- Truly native. TypeSwitch's app business code is written in Swift and built with SwiftUI and The Composable Architecture (TCA). It uses
MenuBarExtraandLSUIElementinstead of an Electron runtime or embedded WebView. - Focused and lightweight. TypeSwitch runs as a menu bar utility without shipping a browser engine or server component. App rules, the default rule, and switch statistics stay on your Mac.
- At home on macOS. The interface follows Light and Dark Mode automatically. On macOS 26, native SwiftUI controls use the system-provided Liquid Glass appearance where appropriate, while macOS 14 and macOS 15 retain their native system styling. TypeSwitch does not simulate Liquid Glass with custom visual effects.
- Built for modern Macs. The release workflow uses Xcode 26.5 and verifies every release as a Universal Binary for both Apple Silicon and Intel Macs.
- macOS 14.0 or later
- Enabled macOS keyboard layouts or input methods
- macOS permissions needed for app activation monitoring, system input method switching, and optional Login Items
The brew trust command first shipped with Homebrew 5.1.15 on June 3, 2026. In Homebrew 5.1.15 through 5.x, trust was required only when HOMEBREW_REQUIRE_TAP_TRUST=1 was set. Starting with Homebrew 6.0.0 on June 11, 2026, casks from non-official taps require explicit trust by default.
brew tap ygsgdbd/tap
brew trust --cask ygsgdbd/tap/typeswitch
brew install --cask typeswitchThis trusts only the third-party typeswitch cask, not the entire tap. Homebrew stores the trust entry, so you normally need to run the trust command only once. The cask also includes a custom postflight step that removes the macOS quarantine attribute from TypeSwitch after installation. TypeSwitch is still unsigned and not notarized, and brew trust is not an official Gatekeeper certification. See Homebrew's Tap Trust documentation for details.
Homebrew 5.1.14 and earlier do not have brew trust and do not require it:
brew tap ygsgdbd/tap
brew install --cask typeswitchIf brew trust reports Unknown command: trust, skip that command or run brew update to upgrade Homebrew.
Update Homebrew installations with:
brew upgrade typeswitch- If Homebrew reports
Refusing to load cask ... from untrusted tap, runbrew trust --cask ygsgdbd/tap/typeswitch, then retry the installation or upgrade. - If
brew doctorreports thatygsgdbd/tapis untrusted, trust only the TypeSwitch cask with the command above; trusting the entire tap is not required. - If an existing installation stops upgrading after Homebrew is updated to 6.0.0 or later, trust the cask and retry
brew upgrade typeswitch. - To trust every current and future formula, cask, and external command in the tap, use
brew trust ygsgdbd/tap. This grants broader access and is not the recommended option.
- Download the latest build from Releases.
- Drag
TypeSwitch.appto the Applications folder. - In Applications, Control-click or right-click
TypeSwitch.app, chooseOpen, then confirm that you want to open it. - If macOS still blocks the app, open System Settings → Privacy & Security, find the TypeSwitch security message, and choose
Open Anyway. - Grant any system permissions macOS requests.
- Use
Check for Updates…from the menu bar app to check GitHub Releases for future updates.
- Launch TypeSwitch. Its keyboard icon appears in the menu bar.
- Open the menu and use
Current Appto configure the frontmost app. - Use
Running · Unconfiguredto assign rules to running apps that do not have one yet. - Use
Running · ConfiguredandAll Configured Appsto review and change existing app rules. - For each app, choose
Defaultto inherit the fallback,Last Switch, or a specific input method. - Choose
Ignore This Appto stop automatic switching and hide the app from the regular lists. Restore one or all apps fromIgnored Apps. - Use
Default Rule for Unconfigured Appsto set the fallback behavior for apps without their own rule. - Check
Missing AppsandSwitcheswhen you want to clean missing rules or review successful switches.
- App rules, the Default Rule for Unconfigured Apps, and switch statistics are stored locally.
- TypeSwitch has no server-side component in this repository.
GitHub RepositoryandCheck for Updates…contact GitHub only when you use them.- Input method switching uses macOS system input sources.
- Launch at Login uses macOS Login Items, with a LaunchAgent fallback when needed.
This project uses:
- The Composable Architecture
1.26.0for app architecture and state management - Sharing
2.9.1for file-backed shared state - Sparkle
2.9.4for manual update checks and appcast support - SwifterSwift
8.0.0for Swift extensions - Point-Free support libraries: CasePaths, Dependencies, and PerceptionCore
- Tuist for project generation and build configuration
- Xcode 26.5+
- Swift 5.9+
- macOS 14.0+
- just
- Tuist
- SwiftFormat (version pinned in
.swiftformat-version) - ImageMagick
- RTK (
rtk, required by the screenshot generation script)
Install the required development tools:
brew install just swiftformat
brew tap tuist/tuist
brew install --formula tuistClone and generate the Xcode project:
git clone https://github.com/ygsgdbd/TypeSwitch.git
cd TypeSwitch
tuist generate
open TypeSwitch.xcworkspaceRun the same formatting and test checks required by pull requests:
just checkTo regenerate the deterministic, privacy-safe README screenshots, grant your terminal or Codex Screen Recording and Accessibility permissions, quit other running TypeSwitch instances, and run:
./script/generate_readme_screenshots.shProduction releases are built by GitHub Actions when a strict, annotated vX.Y.Z tag on main is pushed:
git tag -a v0.10.0 -m "TypeSwitch v0.10.0"
git push origin v0.10.0The workflow validates the tag, runs tests, builds a universal macOS app, packages a zip, publishes its SHA-256 checksum, signs the Sparkle appcast.xml with EdDSA, generates a GitHub Artifact Attestation for the release zip, publishes a GitHub Release, and updates the Homebrew cask.
To rerun an existing release, dispatch the workflow from that same tag ref. A branch or a different tag ref is rejected:
gh workflow run release.yml --ref v0.10.0 -f release_tag=v0.10.0After downloading the release zip, verify its build provenance with GitHub CLI:
gh attestation verify TypeSwitch-macOS-universal.zip --repo ygsgdbd/TypeSwitchTypeSwitch was inspired by:
- SwitchKey, an input method switcher for macOS
- The Swift and SwiftUI community
- Contributors and users who shared feedback

