CyrFlip setup guide

The CyrFlip desktop app works standalone — it puts the layout marker on the system cursor and next to the text caret everywhere, and transliterates mistyped text with one hotkey. If you use VS Code, the optional VS Code extension adds the same marker precisely at the Monaco editor caret. Here's how to set them up.

How the two pieces fit together

The app is the brain - it knows the active layout. The extension is just a display surface for VS Code, because VS Code draws its own caret and isn't keen on sharing its whereabouts with the outside world.

  CyrFlip.exe (tray app)            %LOCALAPPDATA%\CyrFlip\        VS Code extension
  detects the layout   ──writes──▶        layout.txt      ──watches──▶  draws the marker
                                                                        at the editor caret

The app must be running for the extension to show anything - the extension only reads what the app publishes. Without VS Code you still get the tray icon, the mouse-cursor marker, and the transliteration hotkey everywhere.

Step 1 - Install and run the CyrFlip app

Pick any option:

On launch, CyrFlip sits in the system tray (no window). The tray icon shows the active layout. Right-click it to show the clipboard-history strip, enable or pause history, change the indicator, or open Settings. Settings contains hotkeys, autostart, privacy controls and diagnostics.

Turn on Start with Windows so the app - and therefore the layout marker everywhere, including in VS Code - is always available after a reboot.

Step 2 - Install the VS Code extension (optional)

The VS Code extension is not required for the app to work. Skip this step entirely if you don't use VS Code. Install it only if you want the layout marker to appear exactly at the caret inside VS Code. Choose one:

After installing, run Developer: Reload Window (Ctrl+Shift+P). The extension activates on startup - no configuration needed.

Step 3 - Use them together

  1. Make sure the CyrFlip app is running (its tray icon shows the layout code).
  2. Click into a code editor in VS Code and start typing. Switch your keyboard layout - the coloured EN/RU/UK marker follows your caret, and the status bar shows ⌨ EN, ⌨ DE, ⌨ ZH - whatever is active.
  3. Everywhere else (other apps, dialogs, the desktop), the marker rides the mouse I-beam cursor and the tray icon, driven by the same app.
  4. Typed half a message in the wrong layout before looking up? Select it and press Ctrl+Shift+F12 - CyrFlip transliterates it in place (QWERTY ↔ ЙЦУКЕН, EN ↔ RU). Each character is flipped by script, so even the mixed EN + RU masterpiece is handled correctly. Works in any app, VS Code included.
  5. Need another language pair? That Ctrl+Shift+F12 is simply the EN ⇄ RU row the Layout conversions table starts with - all these chords live in that one table. In Settings → Windows languages, install the 13 curated languages in one click or add any Windows layout, then add a row for the pair you want. Each row has its own hotkey and its own on/off switch, converts by physical key position, and works in both directions (press the same chord again while the pair's target layout is active and it converts back).
  6. Left CapsLock on by accident and got hELLO wORLD? Select it and press Ctrl+Shift+F11 - CyrFlip swaps UPPER ↔ lower case in place. It has its own configurable hotkey, and an optional Synchronize CapsLock after case correction toggle sets the CapsLock key to match the corrected text - off when it ends in a small letter, on when it ends in a capital - so you can keep typing exactly as it now reads.

When CapsLock is on, a thin frame appears around the EN/RU/UK marker on the mouse cursor, the text caret and the tray icon - so the CapsLock state is visible right where you type.

Clipboard history (optional)

Clipboard history is off until you enable it from the tray menu. It keeps recent Unicode text in a small topmost strip. Click an item to use it; pin items you want to keep or delete individual entries. Press Ctrl+Shift+F10 to show or hide the strip.

History is stored locally and protected with Windows DPAPI for your Windows account. Pause capture, clear the history, or disable it entirely in the tray menu or Settings.

Settings, tab by tab

Right-click the tray icon and choose Settings… (or double-click the icon). Every change applies at once - there is nothing to restart and nothing to save.

TabWhat lives there
GeneralStart with Windows; keep the computer awake and keep the screen on (both are remembered - a switch left on keeps the machine awake after a restart too, and CyrFlip will not watch your battery for you); the interface language - 13 to choose from.
IndicatorsThe I-beam cursor marker (off by default), the caret marker (on), the compact dot style, change the layout after converting text, and synchronize CapsLock after the case fix.
HotkeysA master switch plus a separate on/off and chord for the case fix and the clipboard manager - so a machine can keep only the one chord it needs. Also yield hotkeys to the remote desktop: while an mstsc/msrdc window is focused the chord is passed to the remote session, which is what you want when CyrFlip runs on both ends of an RDP connection. The context menu lives here too: its on/off switch and the mouse chord that opens it.
Layout conversionsOne table holding every chord that converts text between layouts. EN ⇄ RU on Ctrl+Shift+F12 is created on the first run and can be edited or deleted like any other row; add as many pairs as you like, each with its own chord and switch.
Windows languagesWindows' own input settings, without opening the Windows pane: install / reorder / remove keyboard layouts (nothing is downloaded - the layouts ship with Windows), the cycle chord (Alt+Shift, Ctrl+Shift, ` or off), and direct per-language shortcuts that Windows handles itself, so they keep working when CyrFlip is closed - and, unlike the built-in Windows dialog, they are not limited to Ctrl+Shift+digit. Both sections snapshot your pre-CyrFlip state once and can restore it.
ClipboardHistory on/off, pause capture, whether the manager window opens at startup, its transparency, full-history search, and clearing everything.
TranslationThe optional local translator - see the section below.
Quick launchThe optional scenario launcher - see the section below.
About & AdvancedThe build version (the same YY.M.D.HHmm stamp the release ZIP carries, so you can tell at a glance whether a fix is in your copy; a Store build says so too), links, the caret-position diagnostics report, and Send logs to the author.. - it packs CyrFlip's own logs into one archive and opens a message that you send yourself.

A Windows-language change usually takes effect immediately, but Windows occasionally only settles it after signing out and back in. The Microsoft Store build runs in a container, so Windows may redirect those registry writes into the package - the tab says so and links to the Windows settings.

Quick launch (scenario launcher, optional)

An opt-in module that absorbs OneClickRunner into CyrFlip - one tray process instead of two. It is off by default: until you enable it on Settings → Quick launch, CyrFlip behaves exactly as before - no extra tray entry and no Jump List tasks.

Translation (local model, optional)

Select text anywhere in Windows, press the chord, and the translation appears in a small window next to the mouse pointer, filling in as the model writes it. The translating is done by Ollama - a free program you install once on your own computer. CyrFlip does not bundle it, has no account and no key, and sends nothing to the author or to any cloud service. It is off by default: until you enable it on Settings → Translation, no chord is bound, there is no tray entry, and CyrFlip opens no network connection at all.

Worth knowing before you start: the quality is the local model's; the first translation after a cold start takes a while, because the model has to load; and Ollama plus a model are a multi-gigabyte download you make once. The model is held in memory by the Ollama process, not by CyrFlip - the app itself stays within its 50 MB budget.

CyrFlip's own context menu (optional)

Everything CyrFlip can do to a selection lives behind a hotkey. This module puts the same commands on the mouse: hold Ctrl and right-click a selection, and CyrFlip's own menu opens at the pointer - Copy / Cut / Paste, then your layout conversions, the case fix and your translation rows, then Quick launch and the clipboard history, then Settings. It is off by default, and while it is off the mouse hook is not installed at all: a hook that sits in the path of every mouse move on the machine has no business existing for a feature nobody switched on.

This module reads no text and stores nothing. It watches for its own chord and, while its menu is open, for a click outside it - a menu that belongs to a background process never hears the click that should dismiss it, so CyrFlip closes it itself.

Interface languages

The interface is available in English, Русский, Українська, Deutsch, Italiano, Español, Français, Português, العربية, हिन्दी, বাংলা, اردو and 中文. A fresh install follows the Windows display language and falls back to English; Arabic and Urdu are mirrored right-to-left. Translations into languages the author does not speak are machine-made and not proofread - corrections are very welcome on GitHub.

What the marker's colour means

The two letters name the language: US and Dvorak both read EN, because a badge a few pixels wide has no room for "US-International". The colour names the layout - each of the 25 keyboard layouts of the 13 curated languages has its own shade of its language's colour, so Russian is always red but Russian Typewriter is a different red. In the compact dot style that colour is the whole marker.

Any other layout - a Polish keyboard, a Japanese IME - keeps its language's letters (PL, JA, TR) and gets one neutral colour: there is no honest way to hand out distinct, recognisable colours for the ~218 layouts Windows ships.

LanguageMarkerKeyboard layoutColour
EnglishENUS 00000409 #4DA3FF
ENUS-International 00020409 #0A58FF
ENUS-Dvorak 00010409 #C2E3F4
ChineseZHChinese (Simplified) - US keyboard 00000804 #F3B33D
ZHChinese (Traditional) - US keyboard 00000404 #FAEAA7
HindiHIDevanagari - INSCRIPT 00000439 #E68742
HIHindi Traditional 00010439 #F0B88F
SpanishESSpanish 0000040A #F06E9C
ESLatin American 0000080A #E92D8F
FrenchFRFrench 0000040C #8D7CF2
FRCanadian French 00001009 #633BEC
ArabicARArabic (101) 00000401 #35C6B4
ARArabic (102) AZERTY 00020401 #8BE0C7
BengaliBNBangla - INSCRIPT 00000445 #C67CDA
PortuguesePTPortuguese (Brazil ABNT) 00000416 #46B978
PTPortuguese 00000816 #96C0A1
RussianRURussian 00000419 #FF5A5A
RURussian (Typewriter) 00010419 #FF1313
UrduURUrdu 00000420 #E5A3C7
GermanDEGerman 00000407 #D8D14A
DEGerman (IBM) 00010407 #CED4A5
ItalianITItalian 00000410 #7FB2E5
ITItalian (142) 00010410 #6587B7
UkrainianUKUkrainian 00000422 #5AD86A
UKUkrainian (Enhanced) 00020422 #3FD039
anything elsePL, JA, TR ..any other Windows layout #9AA6B2

The marker beside the caret and on the mouse pointer is drawn translucent, so the text under it stays readable; the tray icon and the I-beam itself stay solid. The same colours are used by the VS Code extension, so a layout looks the same in the editor as it does everywhere else.

Where the layout shows up

SurfaceShown byWhere
Mouse text cursor (I-beam)AppEverywhere you can type
Marker next to the text caretAppClassic Win32 / UI-Automation text fields
Marker at the editor caretExtensionVS Code code editors (precise)
Status-bar indicatorExtensionVS Code, everywhere in the window
Tray iconAppAlways, in the notification area

Inside VS Code, webviews and widgets - the integrated terminal, search boxes, chat panels, the Command Palette - can't host editor decorations, so the caret marker can't appear there. The status-bar indicator, the app's mouse-cursor marker and the app's own caret marker - which does work in those panels - still show the layout.

You never get both markers at once: while you are working in the editor the extension draws the marker and the app hides its own. The extension says so through a file beside layout.txt, and that claim lasts 5 seconds after the last keystroke or click in the editor - which is why the app's marker comes back in the chat panel, the terminal and the search boxes. With the app running and no extension installed, nothing changes.

Troubleshooting