TypeSwitch is a modern macOS menu bar application built with SwiftUI for automatically switching input methods across different applications. It runs quietly in the background and provides an elegant menu bar interface for managing input method preferences per application.
✨ Featuring macOS 26 Liquid Glass Design - Experience the beautiful translucent interface with cutting-edge macOS 26 liquid glass effects, creating an elegant and modern user experience that seamlessly integrates with your system.
- 🔄 Auto Switch: Automatically switch to preset input methods when changing applications
- 📱 Menu Bar Interface: Clean and intuitive menu bar interface for easy access
- 🎯 Per-App Settings: Set independent input method preferences for each application
- 🚀 Auto Start: Support automatic startup at login
- 📋 Running Apps: View and configure currently running applications
- ⚙️ Installed Apps: Manage input method settings for all installed applications
- ⌨️ Keyboard Shortcuts:
⌘ + Q
- Quit application
- 🔗 Quick Links: Direct access to GitHub repository and latest releases
- 🖥 macOS 13.0 or later (compatible up to macOS 26)
- 🔐 Accessibility permission for monitoring application switches
- ⌨️ Input method switching permission
brew install ygsgdbd/tap/typeswitch --cask
- Download the latest version from Releases
- Drag the application to Applications folder
- Grant necessary system permissions on first launch
- After launching, the app icon (⌨️) appears in the menu bar
- Click the menu bar icon to open the dropdown menu
- The menu shows two sections:
- Running Apps: Currently running applications
- Configured Apps: Applications with input method settings
- Click on any application to set its input method:
- Select "Default" to use system default input method
- Select any installed input method to set as default for that app
- The input method will automatically switch when you switch to that application
- Use the settings section to enable auto-launch at login
TypeSwitch takes user privacy and security seriously:
- 🏠 All data is stored locally, nothing is uploaded to the network
- 🚫 No user information or usage data is collected
- 📖 Source code is fully open source and welcome for review
- 🛡️ Uses Swift's built-in security features
- 🔐 Permission usage:
- Accessibility: Only used for detecting application switches
- Input method switching: Only used for switching input methods
- Auto-start: Only used for launching at startup
This project uses the following open source libraries:
- Defaults (7.3.1) - For persistent settings storage
- SwiftUIX (0.2.3) - Provides additional SwiftUI components
- SwifterSwift (8.0.0) - Swift native extensions
Build tools:
- Tuist - For project generation and management
- Xcode 15.0+
- Swift 5.9+
- macOS 13.0+ (compatible up to macOS 26)
- Tuist
-
Install Tuist
-
Clone repository
git clone https://github.com/ygsgdbd/TypeSwitch.git
cd TypeSwitch
- Generate Xcode project
tuist generate
- Open and build
open TypeSwitch.xcworkspace
This project uses GitHub Actions for automated building and releasing:
- Push a new version tag to trigger automatic build:
git tag v1.0.0
git push origin v1.0.0
-
GitHub Actions will automatically:
- Build the application
- Create DMG package
- Release new version
- Generate changelog
-
Build artifacts can be downloaded from Releases
TypeSwitch/
├── Project.swift # Tuist project configuration
├── Tuist/ # Tuist configuration files
│ └── Signing/
│ └── TypeSwitch.entitlements
├── TypeSwitch/ # Main source code
│ ├── Sources/
│ │ ├── App/ # App entry point
│ │ │ └── TypeSwitchApp.swift
│ │ ├── Core/ # Core models and extensions
│ │ │ ├── Models/
│ │ │ │ ├── AppInfo.swift
│ │ │ │ ├── InputMethod.swift
│ │ │ │ └── InputSourceProperties.swift
│ │ │ └── Extensions/
│ │ │ └── Defaults+Extensions.swift
│ │ ├── Services/ # Business logic services
│ │ │ ├── AppManagement/
│ │ │ │ ├── AppInfoService.swift
│ │ │ │ └── AppListService.swift
│ │ │ ├── InputMethod/
│ │ │ │ ├── InputMethodManager.swift
│ │ │ │ └── InputMethodService.swift
│ │ │ └── System/
│ │ │ └── LaunchAtLoginService.swift
│ │ └── UI/ # User interface
│ │ └── Views/
│ │ └── MenuBar/ # Menu bar interface
│ │ ├── MenuBarView.swift
│ │ ├── RunningAppsView.swift
│ │ ├── ConfiguredAppsView.swift
│ │ ├── AppRowView.swift
│ │ ├── SettingsView.swift
│ │ └── AppInfoView.swift
│ └── Resources/ # App resources
│ ├── Assets.xcassets/ # App icons and images
│ └── *.lproj/ # Localization files
└── Screenshots/ # App screenshots
Pull requests and issues are welcome. Before submitting a PR, please ensure:
- Code follows project style
- Necessary tests are added
- Documentation is updated
This project is licensed under the MIT License. See LICENSE file for details.
This project was inspired by and received help from:
- SwitchKey - An excellent input method switcher that provided valuable reference
- Swift and SwiftUI community
- All contributors and users who provided feedback