SmartIME is a macOS desktop app (Tauri v2 + Next.js) that automatically switches input methods based on the active application.
It is designed for users who frequently move between coding tools, browsers, and chat apps and want input method switching to happen automatically in the background.
- Monitors foreground app changes on macOS and applies per-app input method rules.
- Uses LLM-based initial prediction to bootstrap rules on first setup.
- Allows manual rule override in the rules list panel.
- Supports rescanning installed apps and refreshing AI-generated rules.
- Supports menu bar background mode and login-at-startup behavior.
- macOS 12+ (Monterey and above)
- Apple Silicon (M1/M2/M3+)
- Download the latest
.dmgfrom Releases. - Drag
SmartIME.appinto/Applications. - Launch
SmartIME.appfrom Applications.
brew tap SummerLiu95/smartime
brew install --cask smartimeSmartIME is currently a technical exploration project and does not ship with Apple Developer ID signing or Apple notarization. After installing from Homebrew or downloading the DMG, macOS Gatekeeper may report that SmartIME.app is damaged and cannot be opened.
If this happens, remove the quarantine attribute manually before the first launch:
xattr -dr com.apple.quarantine /Applications/SmartIME.app
open /Applications/SmartIME.appThen continue setup:
- Complete Accessibility permission authorization in onboarding.
- Configure LLM settings (
API Key,Model,Base URL) and run connection test. - Start first scan to generate initial rules.
- Bun
- Rust toolchain (
rustup) - Xcode Command Line Tools
bun installcp .env.llm.example .env.llmThen edit .env.llm with your local credentials:
LLM_API_KEY: LLM service API keyLLM_MODEL: Model name, such asgpt-4o-miniLLM_BASE_URL: API base URL, defaulting to OpenAI-compatible endpoints
bun tauri devEquivalent package-script form:
bun run tauri devThis starts both the Next.js frontend and the Tauri desktop shell. For frontend-only work, use:
bun run devbun tauri buildFor the frontend static build only:
bun run buildbun run lint- Frontend debugging: right-click the Tauri window and choose "Inspect Element" to open the Web Inspector.
- Backend debugging: use
println!oreprintln!in Rust; output appears in the terminal runningbun tauri dev. - IPC debugging: command names in frontend
invokecalls must match backend#[tauri::command]names exactly. - Permission testing: validate macOS Accessibility behavior with a bundled
.appbefore release decisions.
- Update and commit version metadata in:
package.jsonsrc-tauri/Cargo.tomlsrc-tauri/tauri.conf.json
- Create and push a tag in format
v<version>(for examplev0.1.0). - GitHub Actions workflow
Release DMGis triggered automatically and will:- run
bun tauri build - upload
SmartIME_<version>_aarch64.dmgand checksum file to GitHub Release.
- run
Future development plans include but are not limited to:
- System Apps Support: Extend support to macOS system applications (e.g., Safari).
- Universal Build Support: Support Intel chips (x86_64) to provide universal binary packaging.
-
Focus Indicator: Display a visual indicator of the current input method when the input cursor is focused. - Website-Based Switching: Enable automatic input method switching in browsers based on the specific website being visited.
- Built-in Local Model: Integrate a built-in tiny LLM or lightweight classification model to remove dependency on third-party API keys.
- UI Enhancement: Improve the user interface for better usability and aesthetics.
- i18n: Add support for multiple languages.
Note: These features are part of the roadmap but are not guaranteed to be implemented.
- This project requires users to provide their own LLM API credentials (
LLM_API_KEY), and any credential misuse, leakage, billing loss, account suspension, or related damages are the user's own responsibility. - SmartIME is a personal-interest project provided "as is", without warranty of any kind, and the maintainer is not liable for any direct or indirect loss caused by installing, running, or relying on this software.
