Every RuSwitcher version in order, newest first. The text comes from the GitHub releases, where older DMGs also live.
3.4.0c
betanot in a stable release yet
The ⌥+⇧ (Option+Shift) combo - the familiar Windows Alt+Shift - can now be assigned to layout switching, the conversion trigger, and the change-case hotkey (Settings → General). Requested in discussion #32. Also carries the previous betas: hide the menu bar icon (Settings → Advanced) and the "Russian - PC" punctuation fix (#33).
"Russian - PC" layout: punctuation on the /? key now converts correctly (#33) - "tkrb?" gives "елки," instead of "елки?". Standard Russian is unaffected ("привет," stays intact). Also carries 3.4.0a: the menu bar icon can be hidden completely (Settings → Advanced) - to bring it back, just launch RuSwitcher again.
The menu bar icon can now be hidden completely (Settings → Advanced) - requested by a user who switched from Punto. To open Settings or bring the icon back, just launch RuSwitcher again (Applications or Spotlight). All hotkeys and conversion keep working with the icon hidden. Also adds a "Quit RuSwitcher" button to Advanced. Beta updates are opt-in: Settings → Advanced → beta channel.
Change-case hotkey (like Punto): a separate hotkey cycles the case of the last word, a selection, or the whole line - UPPER → lower → Title. Off by default (Settings → General).
Hebrew conversion now works in right-to-left web fields (Chrome address bar, WhatsApp Web).
The Secure Input notice no longer steals focus while you type a password; can be turned off in Advanced.
Faster typing: rare freezes eliminated and word replacement is now visually instant.
Change-case hotkey (#29): a separate hotkey (Settings → General) cycles UPPER → lower → Title, like Alt+Break in Punto. Works on the last word, on a selection, AND on the whole line (when “Convert whole line” is on). Off by default.
Hebrew in RTL web fields (#26): conversion now works where the caret sits on the left (Chrome address bar, WhatsApp Web).
The Secure Input notice no longer steals focus (#27); can be turned off in Advanced.
Performance (from 3.2.1): rare typing freezes eliminated, word replacement is now visually instant.
Change-case hotkey (#29): a separate hotkey (Settings → General) cycles the last word or selection through UPPER → lower → Title, like Alt+Break in Punto. Off by default.
Hebrew in RTL web fields (#26): conversion now works where the caret sits on the left (Chrome address bar, WhatsApp Web) - it did nothing there before.
The Secure Input notice no longer steals focus (#27): it won't disrupt typing a password in a terminal; can be turned off in Advanced.
Performance (from 3.2.1): rare typing freezes eliminated, word replacement is now visually instant.
⚠️ Просьба к тестерам (#26): напишите, заработала ли конверсия иврит↔английский в адресной строке Chrome и в WhatsApp Web.
Performance beta: rare typing freezes eliminated (Accessibility timeouts, layout-list and dictionary caching, spell-checker warm-up) and visually instant word replacement (retype pauses ~45ms → ~12ms). Thanks to @russelgal for the contribution (#25). If conversion starts losing letters in some app - please report which one. Beta updates are opt-in: Settings → Updates → beta channel.
"Convert whole line" now works inside terminals (iTerm2, Terminal.app, Claude Code) via the keystroke buffer - no mouse selection. Plus the 3.2.0 skeptic-review fixes (smart conversion keeps foreign words/brands, clipboard safety, dead-key layouts).
Enable Settings → Advanced → Get beta versions, or download below.
issue #24: the trigger can convert the whole line, not just the last word (Settings → Advanced → "Trigger converts the whole line"). Handy in terminals where selecting by mouse is awkward.
Enable Settings → Advanced → Get beta versions, or download below.
issue #22: words on punctuation keys auto-convert (`krf→ёлка), and smart selection conversion - converting a selection fixes only mis-typed words and keeps correct text (Settings → Advanced).
Enable Settings → Advanced → Get beta versions, or download below.
🧪 Beta for testing / Бета для тестирования - 3.2.0a
⚠️ Pre-release. Enable Settings → Advanced → “Get beta versions” to receive it via the in-app updater, or download the DMG below. ⚠️ Пред-релиз. Включите Настройки → Расширенные → "Получать бета-версии" или скачайте DMG ниже.
EN - what to test:
Third-party keyboard layouts (e.g. Ilya Birman Typography): auto-conversion, the menu-bar flag and the caret flag should now work - the layout’s language is detected from its actual output.
Spotlight conversion - manual and as-you-type auto - no stray leftover letter.
If the trigger ever does nothing, you now get a hint when a password field is holding “Secure Input”.
RU - что проверить:
Сторонние раскладки (напр. Ilya Birman Typography): автопереключение, флаг в меню-баре и флаг у курсора теперь должны работать - язык раскладки определяется по её реальному выводу.
Spotlight - конверсия ручная и автоматическая - без лишней первой буквы.
Если триггер вдруг ничего не делает - теперь есть подсказка, когда защищённый ввод (поле пароля) блокирует конверсию.
🧪 Beta for testing / Бета для тестирования - 3.1.1a
⚠️ Pre-release. Enable Settings → Advanced → “Get beta versions” to receive betas via the in-app updater, or download the DMG below. Not for everyday use. ⚠️ Пред-релиз. Включите Настройки → Расширенные → "Получать бета-версии", чтобы получать беты встроенным апдейтером, или скачайте DMG ниже. Не для повседневного использования.
EN: Completes the #16 Spotlight fix for auto-conversion. The manual trigger was fixed in 3.1.0; here the leftover first letter is gone for as-you-type auto-conversion in Spotlight too (e.g. "еуые" → "test", not "еtest"). Please test in Spotlight (manual and auto) and report anything odd.
RU: Доводит фикс #16 в Spotlight до автоконверсии. Ручной триггер был исправлен в 3.1.0; здесь убрана лишняя первая буква и при автозамене "на лету" в Spotlight (напр. "еуые" → "test", а не "еtest"). Проверьте в Spotlight (ручной и авто) и напишите, если что-то не так.
RuSwitcher 3.1 - Spotlight fix, short-word conversion, Share, and an opt-in beta channel.
Spotlight conversion fixed (#16). Converting a word typed in the wrong layout inside Spotlight no longer leaves a stray first letter - RuSwitcher now reads the real field and replaces it cleanly.
Short common words now convert (#22). Two-letter words like "Не", "да", "мы" are handled too - "Не могу" no longer stays half-switched.
Share RuSwitcher. A new menu submenu to share the app via Telegram, VK, X, WhatsApp, Facebook, Reddit, email, or a copied link.
“What’s New” window after an update, in the app’s language (16 languages).
Opt-in beta channel. Turn on “Get beta versions” in Advanced settings to help test upcoming releases.
Reliability fixes. The layout-switch hotkey now fires reliably even on a firmer press (#21); the greyed-out switch-hotkey setting is resolved (#20); plus the accumulated 3.0.1 bug-fixes and a localization pass across all 16 languages.
RuSwitcher 3.0 - Hebrew, the first right-to-left layout. שלום!
> ⚠️ Hebrew support is new and experimental. The engine is thoroughly reviewed, but it hasn't yet been battle-tested by native Hebrew typists. If you type in Hebrew, please try it and report anything odd. The interface itself is not localized into Hebrew yet (RTL UI is a separate step).
Hebrew layout support. The conversion engine now handles any layout pair involving Hebrew: typed akuo in the wrong layout? One tap converts it to שלום. Works both directions, with any second layout (English, Russian, German…), because conversion is keycode-based - no hardcoded tables.
Right-to-left done safely. Text insertion is bidi-aware and never re-orders or merges niqqud marks; words with trailing punctuation are handled the same way as in LTR layouts.
Auto-conversion for Hebrew pairs - deliberately conservative. The macOS Hebrew dictionary is unusable for validation (it accepts any letter soup), so auto-convert fires only on a positive signal: you typed in Hebrew but the word is a real word of your other layout's language - then it converts. The reverse direction (into Hebrew) is left to the manual trigger - precision first, no corrupted words.
🇮🇱 in the menu bar, עב on the monochrome badge, Hebrew in the menu layout switcher - all in place.
New: dedicated layout-switch hotkey. A second configurable combo that just switches the layout - no conversion. Including modifier-only combos like Ctrl+Shift that macOS system settings can't assign, and an optional double-tap mode (e.g. double-Shift to switch) so it can share a working key without false fires. Off by default (Settings → next to the conversion trigger). Thanks to @polpinty and @xumix for the request (#14).
Fixed: no more security prompt on every switch with third-party layouts. Layouts like “Ilya Birman Typography” triggered a macOS security confirmation on each switch; RuSwitcher no longer re-enables an already-enabled layout. Thanks to @iamniketas (#19).
Interface localization stays at 16 languages for now; a Hebrew (RTL) interface is planned separately.
Under the hood: the repository is now structured for an upcoming Windows version (macos/ · windows/ · shared/).
Auto-conversion now handles punctuation, and the updater got a major reliability overhaul.
Fixed: words followed by punctuation now auto-convert.ghbdtn, becomes привет, (and vice versa) - the trailing punctuation is kept as typed, only the word itself is converted. Works for , . ! ? ; : ) including runs like ?!. Ambiguous cases (where the “punctuation” key could be the last letter of a valid word, e.g. levf. → "думаю" vs "дума.") are deliberately left untouched - precision first; the manual trigger handles them. Thanks to @iizotov for the report (#15).
Fixed: over remote desktop, words with punctuation no longer garble text - they are now safely skipped by auto-conversion.
Fixed: in-app updates failing with “Download verification failed” on a second attempt. Two long-standing bugs meant a previous update attempt (even a successful one) could break the next one until you restarted the app - or rebooted the Mac. Both are gone.
Clearer update errors. Instead of one generic message you now see what actually happened: a corrupted download (with a one-click Download in browser fallback - useful behind filtering proxies), a failed authenticity check, or an install error.
Updater hardening. Downloads and disk images moved to a private temporary directory; fallback links no longer trust the update feed.
Menu-bar flag now reacts to system layout changes instantly.
Note: the updater fixes take effect starting from this version - if this update itself fails with an install error, quit and reopen RuSwitcher and try again (or use the DMG below).
Fixed: ⌘A (Select All) before converting no longer wipes your text. Selecting everything and converting now converts the whole selection, instead of deleting it and leaving a single converted word. Over remote desktop (Screen Sharing) it also no longer adds a stray “ф”. Thanks to @nagaina1881-code for the report and the fix (#13).
New: switch keyboard layout from the menu. The menu-bar menu now lists your installed layouts (flag + name, a check on the current one) - click one to switch.
New: optional monochrome menu-bar icon. A system-style РУ/EN badge instead of the colored flag; adapts to light/dark automatically. Off by default (menu → “Monochrome icon”).
RuSwitcher can now show the current layout flag right next to the text cursor for a moment after you switch - so you see which layout you're in without glancing at the menu bar. It hides as you start typing. Turn it on in the menu or Settings → Auto-conversion → "Show layout flag at the text cursor" (off by default).
It works wherever the app exposes the cursor position via Accessibility - native apps and most text fields. A few apps that draw their own text (e.g. the VS Code editor) don't expose it; macOS's own input indicator covers those.
🔧 Also
Update check now also runs periodically while the app is open (not only at launch) - controlled by Settings → "Check for updates automatically" (on by default, can be turned off).
RuSwitcher now works through Apple Screen Sharing. Type into a remote Mac's session and fix wrong-layout text right there - by trigger or automatically - just like on your local machine. Run RuSwitcher on both Macs and turn on Remote Desktop mode (beta, marked in the menu).
⌨️ Custom trigger combos
The switch trigger can now be a two-key combo, not only a single modifier: ⌘+⇧, ⌃+⇧, ⌘+⌥, ⌃+⌥ - handy if you're used to the Windows-style Alt+Shift. Settings → Trigger.
🔊 Layout sound
An optional short sound when you start typing after switching layout - so you hear which layout you're in. Enable it in Settings.
🚩 Smarter menu-bar flag
The flag now updates on any layout change - including the system hotkey, not only RuSwitcher's trigger - and is detected by the layout's language, so it's correct for any pair.
🔧 Also
Smoother install: both the app and the DMG are fully signed, notarized and stapled.
Stability fixes for conversion and the menu-bar indicator.
RuSwitcher can now fix the keyboard layout automatically as you type - no key press needed. Finish a word and, only when it's confident (checked against the macOS system dictionary), RuSwitcher converts it to the right layout and switches for you. Off by default - enable it in Settings → Auto-conversion.
🎛 Three exception lists
Fine-tune auto-conversion in Settings → Auto-conversion:
Apps - where auto-conversion stays off (terminals, IDEs, password managers pre-filled).
Never convert - words to leave alone (nicknames, logins, brands). Undo a wrong fix and RuSwitcher offers to add the word.
Always convert - words to always fix even when not in the dictionary (compound words, slang).
💻 Universal binary (Intel + Apple Silicon)
RuSwitcher now ships as a universal binary and runs natively on both Apple Silicon and Intel Macs.
🔧 Also
Clearer menu: the master toggle is now Enable RuSwitcher; the auto feature is Automatic conversion.
Caps Lock is now handled (case preserved).
Privacy: diagnostic logs no longer record typed words.
Many correctness/robustness fixes (off-main retype engine, focus-change safety, password-manager protection, and more).
The conversion trigger is no longer fixed to Option. In Settings → General pick Option ⌥ (Alt) / Command ⌘ / Control ⌃ / Shift ⇧, restrict to the right-hand key, and choose single or double tap.
Works in Atom / VS Code / Electron now
New clipboard-free engine: conversion deletes the typed word and re-inserts the corrected text via direct Unicode input - no more select-copy-paste. This fixes editors where conversion previously left the text un-replaced, and it **never touches your clipboard** anymore.
Two new languages
Added Armenian and Georgian - RuSwitcher's interface is now in 16 languages.
> Caps Lock as a trigger: macOS makes raw Caps Lock interception unreliable, so it > isn't offered directly. To use it, remap Caps Lock → Control in System Settings, > then pick the Control trigger.
Update:brew upgrade --cask ruswitcher (tap installs) or download the DMG.
Fixed: changing the interface language now also updates the menu-bar menu. Previously only the Settings window switched language while the menu kept the old one.
The updater replaced the app directly from the read-only DMG volume, which macOS won't allow - every Install & Restart ended with Installation Failed. Now the app is staged to a writable temp folder first, then swapped in. Error dialogs also show the real reason now.
> ⚠️ Because the broken updater shipped in all earlier versions, those installs > can't self-update to 2.2.1. Update once manually: > ``` > brew upgrade --cask ruswitcher > ``` > (or download the DMG). From 2.2.1 onward, in-app Install & Restart works.
Clicking Check Permissions when everything is already granted used to do nothing - it looked like a dead button. Now it confirms with a clear dialog. (The confirmation only appears for the manual menu action, not on every launch.)
Full localization - all 12 languages
Portuguese, Chinese, Japanese, Korean and Polish were only about half-translated: the update flow, the permission wizard and several settings strings silently fell back to English. Every interface language is now 100% localized.
Homebrew
The cask now has livecheck + auto_updates. Update as usual:
Important: the previous 2.1.0 DMG accidentally contained the 2.0.3 app inside (the headline per-app layout memory was missing). 2.1.1 fixes the build pipeline so the DMG always matches the announced version, and ships the real 2.1.1 build. Homebrew and the in-app updater will pick it up automatically.
Security & privacy
Auto-update is now signature-verified: the downloaded app is checked for a valid Developer ID signature (Team ID pinned) and matching bundle id/version before it replaces the running app. sha256 verification is now mandatory.
Debug log no longer stores the text you type - only lengths are recorded.
Clipboard is reliably restored on conversion failure and on quit.
Reliability
The build pipeline rebuilds and hard-checks the version before packaging, and writes the sha256 back into the manifest and Homebrew cask automatically.
Keystroke logging moved off the input hot path.
The "Auto-switch" toggle now actually turns conversion on/off.
Per-App Layout Memory - RuSwitcher now remembers which keyboard layout was active in each application. When you switch back to an app, the layout is automatically restored. Enable it in Settings → General → "Remember layout per application".
Install & Restart - The update dialog now has an "Install & Restart" button. One click downloads the new version, verifies its integrity (sha256), replaces the app, and restarts - no manual DMG mounting needed.
Bug Fix: Word Boundary - Fixed a bug where Alt conversion could grab characters from the previous word across a space boundary, producing garbled output. Structural keys (space, Enter, arrows, Backspace) are now always tracked regardless of modifier key state.
Selection conversion no longer re-selects the result. Previously, after converting selected text, the converted result remained highlighted - so the very next keystroke would overwrite it. Now the cursor lands at the end of the converted text, ready for normal typing.
Clipboard contents are fully preserved across conversion. Previously only the .string representation was saved, so images, files, RTF, and other data types were lost. The conversion now snapshots every NSPasteboardItem with all its types and restores them after it's done.
Version display in the app now matches the release. The About tab was showing 2.0.0 even on the 2.0.1 Homebrew cask (reported in #1). CFBundleShortVersionString is now synchronized with version.json, create_dmg.sh, and the Homebrew cask.
DMG is now properly notarized and stapled by Apple. Previous 2.0.1 builds were signed but not notarized, which caused Gatekeeper to block them with "Apple could not verify that [app] is free of malware". The build pipeline now runs notarytool submit + stapler staple on every DMG.
Install
Homebrew:brew upgrade --cask ruswitcher
Direct: download RuSwitcher-2.0.2.dmg below, open and drag to Applications.
Thanks to @nickgarkusha and @innokenty for reporting and fixing the version mismatch.
Что исправлено
Конвертация выделенного текста больше не пере-выделяет результат. Раньше после конверсии выделенный текст оставался выделенным, и следующий же символ затирал результат. Теперь курсор оказывается в конце вставленного текста - можно сразу продолжать набор.
Буфер обмена полностью сохраняется при конвертации. Раньше сохранялось только текстовое представление (.string), поэтому картинки, файлы, RTF и другие типы данных терялись. Теперь конвертация снимает snapshot всех NSPasteboardItem со всеми типами и восстанавливает их после завершения.
Версия в приложении совпадает с версией релиза. В About-вкладке показывалось 2.0.0 даже у Homebrew-каста 2.0.1 (см. #1). CFBundleShortVersionString синхронизирован с version.json, create_dmg.sh и Homebrew-формулой.
DMG теперь корректно нотаризован и застаплен Apple. Прежние сборки 2.0.1 были только подписаны, но не нотаризованы - Gatekeeper блокировал их с сообщением "Apple не удалось подтвердить отсутствие вредоносного ПО". Пайплайн сборки теперь автоматически прогоняет notarytool submit + stapler staple на каждый DMG.
Установка
Homebrew:brew upgrade --cask ruswitcher
Прямая загрузка:RuSwitcher-2.0.2.dmg ниже - откройте и перетащите в "Программы".
Спасибо @nickgarkusha и @innokenty за репорт и фикс несоответствия версии.
Конвертация раскладки - нажмите ⌥ Alt для конвертации последнего слова или выделенного текста Layout conversion - tap Alt to convert last word or selected text
Любая пара раскладок - русская, украинская, белорусская, немецкая и любая другая Any two layouts - Russian, Ukrainian, Belarusian, German, or any other pair
Повторный Alt - обратная конвертация Double Alt - reverse conversion
12 языков интерфейса / 12 interface languages
Автозапуск при входе / Auto-start at login
Проверка обновлений / Update checker
~500KB, чистый Swift 6 / pure Swift 6, no dependencies
Без телеметрии / No telemetry
Установка / Installation
Скачайте RuSwitcher-2.0.1.dmg ниже / Download below
Откройте DMG и перетащите в Программы / Drag to Applications
Запустите - программа запросит разрешения / Launch - app requests permissions
macOS 13+ | Apple Silicon + Intel | Signed and Notarized by Apple