CapsLangSwitcher
macos · menu-bar · caps lock · zero-delay input switch
Tap Caps Lock, switch languages — instantly. No macOS hotkey-disambiguation delay, ever.
How it works
Caps Lock is remapped to F18 via hidutil — below the firmware caps-lock delay, so it fires the instant you press it
A CGEventTap catches the F18 key-down at the HID level and swallows it
The app calls macOS's Text Input Source API directly, in-process — your input source switches on the spot
Why CapsLangSwitcher
Zero-Delay Switching
Remaps Caps Lock to F18 at the HID level, beating both the OS hotkey delay and the firmware caps-lock activation delay.
Real Caps Lock Repurposed
The physical key is swallowed at the HID level — it never triggers actual caps lock while the app is running.
Signed & Notarized
Signed with a Developer ID and notarized by Apple — double-click to install, no security warnings.
Cycles Any Input Sources
Works with however many keyboard layouts you have enabled — not hardcoded to Thai/English.
Lives in the Menu Bar
Shows your current input source at a glance. No Dock icon, no clutter.
Launch at Login
Optional toggle in the menu bar so the app starts automatically when you log in (macOS 13+).
Featherweight
Pure Swift. No Electron, no background daemons weighing your Mac down.
Open Source
MIT licensed and small enough to read in one sitting — hack it to fit your own workflow.
Auto-Updates
Checks for new releases on launch and daily via Sparkle — no need to manually redownload.
Get started in 2 minutes
- Download the .dmg from Releases, open it, and drag CapsLangSwitcher into the Applications folder
- Launch it — it's signed and notarized, so no Gatekeeper warnings
- Optional: enable Launch at Login from the menu bar so it starts with your Mac
- Allow Accessibility access when prompted (System Settings → Privacy & Security → Accessibility) — the app then remaps Caps Lock automatically
- Turn off any existing Caps Lock shortcut in System Settings → Keyboard → Keyboard Shortcuts → Input Sources
- Tap Caps Lock and enjoy instant switching