Automatic keyboard layout switcher for macOS. Types "ghbdtn" in QWERTY by mistake? Bzz instantly converts it to "привет" before you hit Enter.
Bzz is the open-source MIT alternative to Caramba Switcher for macOS users who need automatic Cyrillic↔Latin layout switching — a 98K-word morphological dictionary, on-device only (no telemetry), and a one-time 490 ₽ price for Pro features instead of a yearly subscription. It also fills the gap left by Punto Switcher, which has been abandoned for macOS since 2017.
- Instant auto-correction: Detects wrong keyboard layout and fixes on the fly
- Smart dictionary: 98K Russian words with Snowball stemmer for accurate detection
- Fuzzy matching: Catches typos within 1 character edit distance
- Undo in 5 seconds: Cmd+Z to revert the last correction
- Context-aware: Understands Russian/English context to avoid false positives
- Zero configuration: Works out of the box with sensible defaults
- System tray: Pause/resume with a single click (⚡ active, 💤 paused)
- Auto-start: Launches automatically at login via LaunchAgent
- Lightweight: ~4 MB binary, minimal CPU usage
- macOS 10.15+
- Accessibility permission (required for keyboard interception)
Windows support is planned.
- Download the latest
.dmgfrom Releases - Open the DMG and drag Bzz to Applications
- Launch Bzz from Applications
- Important: First launch requires granting Accessibility permission:
- macOS will prompt you to allow Bzz in System Settings → Privacy & Security → Accessibility
- If prompted by Gatekeeper ("Cannot open because it is from an unidentified developer"):
- Right-click Bzz.app → Open Anyway
- Or:
xattr -d com.apple.quarantine /Applications/Bzz.app
Requirements: Go 1.26+ and make
git clone https://github.com/zlopixatel/bzz.git
cd bzz
make app # Creates Bzz.app in ./build/
make install # Copies to ~/Applications/Or build the binary only:
go build -ldflags="-s -w" -o Bzz .
./Bzz-
Grant Accessibility permission:
- Go to System Settings → Privacy & Security → Accessibility
- Add Bzz to the allowed apps list
- Restart Bzz if needed
-
Configure (optional):
- Bzz creates
~/Library/Application Support/Bzz/config.yamlon first run - Default settings work for most users — no action required
- Bzz creates
-
Check tray icon:
- Look for the Bzz icon in the menu bar (top-right corner)
- ⚡ icon = active, 💤 icon = paused
Just type normally. Bzz watches for wrong keyboard layout:
Type: ghbdtn [Space] → Auto-corrects to: привет
Type: GHBDTN [Space] → Auto-corrects to: ПРИВЕТ
Type: Lfvecz, [Enter] → Auto-corrects to: Привет, [then submits]
When does it correct?
- When you press Space, Enter, or punctuation (. , ! ? ; : ' ")
- If the word is in the Russian dictionary
- Or within 1 typo of a known Russian word (6+ characters)
Press Cmd+Z within 5 seconds of a correction to revert:
ghbdtn [Space] → привет
[Cmd+Z] → ghbdtn (reverted)
The undo window closes after 5 seconds or if you type something else.
Click the tray icon to toggle:
- ⚡ Active (normal operation)
- 💤 Paused (Bzz is disabled)
Or quit from the tray menu.
Edit ~/Library/Application Support/Bzz/config.yaml:
enabled: true # Enable/disable the app
primary_language: ru # Primary language (ru or en)
min_word_length: 2 # Minimum word length to check
excluded_apps: # Apps where Bzz is disabled
- idea # Example: JetBrains IDEsChanges take effect immediately — no restart needed.
- Hook (
hook_darwin.go): CGEventTap intercepts keyboard events in real-time - Detector (
detector.go): Analyzes text to determine if layout switch occurred - Dictionary (
dict.go): 98K Russian words + Snowball stemmer for lemmatization - Replacer (
replacer_darwin.go): Sends backspace/character events to fix text - Tray (
tray_darwin.go): System menu bar integration for pause/resume - Buffer (
buffer.go): Accumulates characters to form words at phrase boundaries
- Script detection: Identifies if text is Latin or Cyrillic
- Dictionary lookup: Checks if the converted word exists in Russian dictionary
- Stem matching: Uses Snowball stemmer for verb/noun variations
- Fuzzy matching: For 6+ character words, finds corrections within 1 edit distance (Levenshtein)
- Context tracking: Remembers recent language to avoid false positives
- Trailing punctuation: Handles mixed QWERTY/Russian punctuation correctly
Input: "ghbdtn"
Convert: "привет" (QWERTY → Russian keymap)
Lookup: ✓ Found in dictionary
Result: Correct to "привет"
Input: "ghbdtna" (typo: extra 'a')
Convert: "приветf"
Fuzzy: Within 1 edit of "приветф" or "привет"?
Result: Correct to "привет"
go build -ldflags="-s -w" -o Bzz .make app # Creates Bzz.app with iconmake dmg # Creates Bzz.dmgWindows support requires MinGW on macOS:
brew install mingw-w64
make build-windowsCreates Bzz.exe.
make release # Builds both macOS .dmg and Windows .exeRun the test suite:
go test ./... -vKey tests:
detect_test.go: Dictionary lookup and fuzzy matching logicshifted_test.go: Shifted key handling (Caps Lock, numbers)integration_test.go: End-to-end behavior with buffer
Bzz is open-source under the MIT license. Contributions welcome!
- Add a dictionary file to
dicts/<lang>_freq.txt(one word per line) - Add stemmer support in
dict.goif available - Update keymap in
keymap.gofor the target language - Test with
detect_test.go
The dictionary at dicts/ru_freq.txt is frequency-ranked. To improve:
- Submit PRs with additional common Russian words
- Include frequency data if available
- Test with real-world usage patterns
- CGEventTap: Chosen over Quartz Event Services for consistent, low-latency event interception
- Snowball Stemmer: Preferred over hand-written rules for Russian morphology
- Active undo (5s window): Short enough to not interfere with typing, long enough for reflexive corrections
- Exact EN match: Prevents "if", "the", "and" from being corrected when typed on Russian layout
- Lightweight dictionary: Embedded (no network calls), fast in-memory lookup with 98K words covering 99% of common Russian
Bzz is free and open-source. Future Pro features may include:
- Machine learning-based context detection
- Custom dictionary support
- Grammar/style suggestions
- Multi-language support beyond Russian/English
- Cloud sync for settings
The core layout-switching functionality will always remain free.
xattr -d com.apple.quarantine /Applications/Bzz.app
open /Applications/Bzz.appOr: Right-click Bzz.app → Open Anyway
- Go to System Settings → Privacy & Security → Accessibility
- Remove Bzz if listed
- Restart Bzz — it will re-request permission
- Grant access and restart
- Check the tray icon (is it ⚡ or 💤)?
- Verify Accessibility permission is granted
- Check system logs:
log stream | grep Bzz - Ensure your keyboard layout is set to Russian (Cmd+Space to switch)
- Check
~/Library/Application Support/Bzz/config.yamlfor typos - Try resetting config: Delete the file and restart (defaults will be recreated)
- Report issues with system details at GitHub Issues
MIT License — see LICENSE for details.
Copyright © 2026 Roman Kovalev
- Caramba Switcher: Closed-source, subscription model ($29.99/year)
- Punto Switcher: Legacy Windows-first design, limited macOS support
- Bzz: Free, open-source, macOS-native
Bzz — автоматический переключатель раскладки клавиатуры для macOS. Типите "ghbdtn" вместо "привет"? Bzz исправит это прямо при вводе.
- Автоматическое исправление: Обнаруживает ошибку раскладки и исправляет на лету
- Словарь из 98K слов: С лемматизацией Snowball для точного обнаружения
- Нечёткий поиск: Находит опечатки в расстоянии Левенштейна до 1
- Отмена за 5 секунд: Cmd+Z для отката последней коррекции
- Контекстная обработка: Понимает русский/английский контекст
- Без конфигурации: Работает сразу из коробки
- Иконка в трее: Пауза/возобновление одним кликом
- Автозапуск: Запускается при входе в систему
- Скачайте последний
.dmgс Releases - Откройте DMG и перетащите Bzz в Applications
- Запустите Bzz
- Системе потребуется разрешение доступа в System Settings → Privacy & Security → Accessibility
git clone https://github.com/zlopixatel/bzz.git
cd bzz
make app # Создаёт Bzz.app
make install # Копирует в ~/Applications/Просто пишите. Bzz следит за ошибками раскладки:
Печатаете: ghbdtn [Space] → Исправляет на: привет
Печатаете: Lfvecz, [Enter] → Исправляет на: Привет, [отправляет]
Исправляет когда:
- Нажимаете Space, Enter или пунктуацию (. , ! ? ; : ' ")
- Слово есть в русском словаре
- Или в одной опечатке от русского слова (6+ букв)
Cmd+Z в течение 5 секунд после исправления:
ghbdtn [Space] → привет
[Cmd+Z] → ghbdtn (отменено)
Клик на иконку в трее:
- ⚡ Активно (работает)
- 💤 Пауза (отключено)
Отредактируйте ~/Library/Application Support/Bzz/config.yaml:
enabled: true # Включено/отключено
primary_language: ru # Основной язык (ru или en)
min_word_length: 2 # Минимальная длина слова
excluded_apps: # Приложения, где отключено
- idea # Пример: JetBrains IDEs"Bzz cannot be opened":
xattr -d com.apple.quarantine /Applications/Bzz.appНет разрешения на доступ:
- System Settings → Privacy & Security → Accessibility
- Удалите Bzz из списка
- Перезапустите Bzz и снова разрешите доступ
Исправления не работают:
- Проверьте иконку в трее (⚡ или 💤?)
- Убедитесь, что раскладка установлена на Русский
- Посмотрите логи:
log stream | grep Bzz
MIT — см. LICENSE
© 2026 Roman Kovalev
