A simple, secure keyboard remapper for macOS — the straightforward alternative to Karabiner Elements.
NEW in v1.6.0: 🌍 Full multi-language support for all 28 navigation actions in 14 languages!
Frustrated with Karabiner's complexity? You're not alone.
I created BC64Keys because I just wanted to remap a few keys — not learn a new configuration language, edit JSON/XML files, or navigate through hundreds of options.
| Feature | BC64Keys | Karabiner Elements |
|---|---|---|
| Configuration | Visual GUI, click & press | JSON config files |
| Learning curve | ⚡ Minutes | 📚 Hours/Days |
| Codebase size | ~2,100 lines | ~100,000+ lines |
| Code auditability | ✅ Easy to review | ❌ Very complex |
| Setup time | 30 seconds | 10-30 minutes |
| Universal Binary | ✅ Apple Silicon + Intel | ✅ Yes |
| Code Signing | ✅ Developer ID | ✅ Yes |
| Notarized | ✅ Apple Notarized | ✅ Yes |
This app has access to your keystrokes — that's how keyboard remapping works.
This is why BC64Keys is:
- 100% Open Source (GPL-3.0)
- Single file design (~2,100 lines) — anyone can audit it in minutes
- No network access — works completely offline
- No data collection — your keystrokes stay on your Mac
- No external dependencies — pure Swift/SwiftUI
- Apple Notarized — verified and signed by Apple's security team
Unlike massive, complex tools where security vulnerabilities can hide in thousands of files, BC64Keys is simple enough that you can read and verify the entire codebase yourself in under an hour.
- 🖱️ Visual Key Capture — Just click and press the key you want to remap
- 🔄 Simple Key Swaps — Remap any key to any other key
- 🎯 Navigation Actions — Map keys to macOS shortcuts (Home → Cmd+←, etc.)
- � Per-App Filtering — Apply mappings globally, or only in specific apps
- 🚫 Key Blocking — Disable annoying keys completely
- 🔍 Real-time Monitor — See exactly what keys are being pressed
- 🚀 Launch at Login — Optional auto-start when you log in (toggle in Settings)
- 🌍 Multi-language — 14 languages: English, Hungarian, German, French, Spanish, Italian, Japanese, Chinese, Dutch, Portuguese, Swedish, Polish, Korean, Turkish
- ⚡ Instant Apply — Changes take effect immediately, no restart needed
- 💾 Auto-save — Your mappings persist between app restarts
- 🎨 Native UI — Clean SwiftUI interface that feels like macOS
- 🔐 Secure — Signed with Developer ID and notarized by Apple
Coming from Windows? BC64Keys includes pre-configured actions for:
- Home/End → Line start/end (⌘←/⌘→)
- Ctrl+Home/End → Document start/end
- Page Up/Down → macOS equivalents
- And many more...
Clean, intuitive interface for managing your key mappings
Visual key capture - just click and press the key you want to remap
Quick permission setup to get started
Latest version: v1.6.0 (Download)
- Download BC64Keys-v1.6.0.dmg from Releases
- Open the DMG file
- Drag BC64Keys.app to your Applications folder
- Launch BC64Keys from Applications
- Grant Accessibility permission when prompted
✅ No right-click workarounds needed — the app is signed and notarized by Apple!
# Clone the repository
git clone https://github.com/badcode64/BC64Keys.git
cd BC64Keys
# Build and run
./build.sh
open BC64Keys.appBC64Keys needs Accessibility permission to remap keys:
- Open System Settings → Privacy & Security → Accessibility
- Click the + button
- Add BC64Keys and enable it
- Restart BC64Keys if needed
Keyboard remapping on macOS requires intercepting and modifying system-wide key events before they reach applications. This low-level access is protected by macOS's Accessibility permission system to prevent unauthorized keylogging or input manipulation. BC64Keys uses a CGEventTap to observe and transform keyboard events globally — this is the same mechanism used by system utilities like macOS's own keyboard shortcuts. Without this permission, the app cannot intercept keys and remapping won't work.
- Go to the Mapping tab
- Click + New Rule
- Click the Source box and press the key you want to remap
- Choose the target:
- Key Swap: Click target box and press replacement key
- Navigation: Select a predefined macOS action
- Click Save
Use the Monitor tab to see what keys you're pressing — useful for finding key codes and testing your mappings.
Want a mapping to work only in specific apps (or exclude certain apps)?
- When creating/editing a rule, scroll to App Filter
- Choose:
- All Apps — Apply everywhere (default)
- Include — Apply only in selected apps
- Exclude — Apply everywhere except selected apps
- Select apps from the running apps list
By default, BC64Keys doesn't write logs to save SSD wear. To enable:
- Go to Settings tab
- Enable Debug Logging
- Logs will be written to
~/Library/Logs/BC64Keys/bc64keys-status.log
Check Accessibility Permission:
- Open System Settings → Privacy & Security → Accessibility
- Verify BC64Keys is listed and enabled (checkbox checked)
- If it's enabled but not working:
- Toggle it off then back on
- Completely quit BC64Keys (Cmd+Q) and relaunch it
Check Status:
- Look at the Status tab in BC64Keys
- Should show "✅ Enabled" — if it shows "❌ No Permission", grant Accessibility access
- Should show "🟢 Running" — if not, check the error message
Still not working?
- Check the Monitor tab and press a key — if nothing appears, the event tap isn't working
- Enable Debug Logging in Settings and check
~/Library/Logs/BC64Keys/bc64keys-status.logfor errors - Make sure no other keyboard remapper (like Karabiner Elements) is running
On macOS Sequoia or later:
xattr -cr /Applications/BC64Keys.appVerify code signature:
codesign -vv --deep --strict /Applications/BC64Keys.appIf signature is invalid, re-download from official releases.
-
Disable remapper:
- Go to Status tab
- Click Stop Remapper
- Wait 2 seconds
- Click Start Remapper
-
If keys are still stuck:
- Completely quit BC64Keys (Cmd+Q)
- Press the stuck keys manually a few times
- Relaunch BC64Keys
-
Check for conflicting rules:
- Go to Mapping tab
- Look for circular mappings (e.g., A→B and B→A)
- Delete conflicting rules
BC64Keys should use almost 0% CPU when idle. High CPU usage indicates a problem:
- Check Monitor tab — if it's showing thousands of events per second, you may have a key that's auto-repeating
- Quit and relaunch BC64Keys
- If problem persists, disable Debug Logging (Settings tab)
Check file permissions:
ls -la ~/Library/Preferences/com.bc64.BC64Keys.plistShould show your user as owner. If not accessible, reset:
defaults delete com.bc64.BC64Keys(Warning: This deletes all your settings)
This means macOS is blocking the Accessibility API access:
-
Remove and re-add Accessibility permission:
- System Settings → Privacy & Security → Accessibility
- Click the ⓘ button next to BC64Keys
- Click - (minus) to remove it
- Quit BC64Keys completely
- Relaunch BC64Keys — it will re-request permission
-
Still failing? Restart your Mac (sometimes macOS's TCC daemon needs a restart)
If your problem isn't listed here:
- Enable Debug Logging in Settings
- Reproduce the issue
- Check
~/Library/Logs/BC64Keys/bc64keys-status.log - Open an issue with:
- macOS version
- BC64Keys version
- Steps to reproduce
- Relevant log excerpts
- Quit BC64Keys (Cmd+Q)
- Move
/Applications/BC64Keys.appto Trash - Optionally remove Accessibility permission:
- System Settings → Privacy & Security → Accessibility
- Select BC64Keys and click - (minus)
# Remove the app
rm -rf /Applications/BC64Keys.app
# Remove settings
defaults delete com.bc64.BC64Keys
# Remove logs (if debug logging was enabled)
rm -rf ~/Library/Logs/BC64Keys
# Remove login item (if enabled)
osascript -e 'tell application "System Events" to delete login item "BC64Keys"'After removal, go to System Settings → Privacy & Security → Accessibility and remove BC64Keys from the list.
Note: Your settings are stored in macOS UserDefaults. To preserve them when updating, just replace the app — don't run the complete removal commands.
Requirements:
- macOS 13.0+
- Xcode Command Line Tools (
xcode-select --install)
Build:
./build.shThe universal binary (ARM64 + Intel) will be created as BC64Keys.app.
Optional: Create DMG installer:
./create-dmg.shOptional: Notarize with Apple:
# Set up credentials first (see NOTARIZATION_GUIDE.md)
./notarize.sh(Requires Apple Developer account and credentials)
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
- 📸 Screenshots — Help us create beautiful screenshots for the README
- 🌍 Translations — Add support for your language
- 🎨 UI/UX improvements — Make the interface even better
- 🐛 Bug fixes — Help squash bugs
- 📚 Documentation — Improve guides and examples
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Is BC64Keys safe to use?
Yes! BC64Keys is:
- 100% open source — you can review the entire codebase
- Signed with Developer ID — verified by Apple
- Notarized by Apple — passed Apple's security checks
- No network access — all processing is local
- No data collection — your keystrokes never leave your Mac
The entire codebase is ~2,100 lines and designed for easy security auditing.
Why does BC64Keys need Accessibility permission?
Keyboard remapping requires intercepting system-wide key events using macOS's CGEventTap API. This low-level access is protected by the Accessibility permission system to prevent unauthorized keylogging. BC64Keys uses the same mechanism as macOS's built-in keyboard shortcuts.
Will my settings be preserved when I update?
Yes! All your key mappings and preferences are stored in macOS UserDefaults, not inside the app bundle. When you update BC64Keys, simply replace the old app with the new one — your settings will remain intact.
Can I use BC64Keys alongside Karabiner Elements?
Not recommended. Both apps intercept keyboard events at the system level, which can cause conflicts. Choose one and disable the other.
Does BC64Keys work on Apple Silicon Macs?
Yes! BC64Keys is a universal binary that runs natively on both Apple Silicon (M1/M2/M3) and Intel Macs.
How do I uninstall BC64Keys?
See the detailed Uninstalling section above for complete removal instructions.
Quick removal:
- Quit BC64Keys (Cmd+Q)
- Move BC64Keys.app from Applications to Trash
- Remove Accessibility permission in System Settings (optional)
Complete removal (including settings):
rm -rf /Applications/BC64Keys.app
defaults delete com.bc64.BC64Keys
rm -rf ~/Library/Logs/BC64KeysIf BC64Keys saved you time and frustration, consider buying me a coffee!
Your support helps me maintain and improve BC64Keys. Thank you! 🙏
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.
This means:
- ✅ You can use, modify, and distribute this software
- ✅ You can use it commercially
⚠️ Any modifications must also be open source (GPL-3.0)⚠️ You must include the original license and copyright notice
- Built with SwiftUI and ❤️
- Inspired by the need for simplicity
- Thanks to all contributors and supporters!



