Last updated: November 4, 2026. This policy describes Rust Switcher, published by QQRM, including its portable Windows release. It covers the application itself; GitHub, package managers, Windows, and applications in which you type have their own data handling practices.
Your keyboard input stays on your device. Rust Switcher performs conversion and language scoring locally and does not collect telemetry or usage analytics. The application does not send typed text, selections, input history, or preferences to QQRM or third parties. There is no server-side collection of your input by the application. It can download fixed language-model files for additional installed languages, as described below.
The keyboard hook and temporary input journal exist to convert text on your computer. The local memory and settings described below do not upload data or create a remote record of your activity.
Rust Switcher processes text locally to recognize hotkeys, track recently typed text, and convert keyboard layouts configured in Windows. While the release application is running, a global keyboard hook receives keyboard events from other applications. It uses key codes, modifier state, keyboard layout, and characters derived from those events. Window, process, thread, focus, mouse, and caret information help track the editing context and target conversions.
Selection conversion reads text from the focused control using Windows UI Automation or native Edit/RichEdit control messages. A conversion accepts at most 512 characters and rejects multiline selections. The native control path can temporarily read the control's entire text, up to 1,048,576 UTF-16 code units, to extract the selected part. The 512-character conversion limit is therefore not a limit on all text accessed during selection detection.
Converted text is sent back to the focused application using simulated keyboard input. That application may store or transmit it according to its own settings and policies. Rust Switcher does not guarantee that sensitive fields, including password fields, are excluded from keyboard processing.
- The active input journal keeps up to 4,096 Unicode characters, together with layout and editing context. Older text is dropped as the journal reaches its limit. The active journal has no two-minute expiry timer.
- When the editing focus changes, the application may cache a copy of that context's journal so recent text can be restored when you return. Each cached journal has the same 4,096-character limit; multiple contexts can retain more than 4,096 characters in total.
- Cached entries expire after two minutes from caching. Expiry is checked when the application processes a relevant focus change, not by a background deletion timer. Expired entries may therefore remain in memory until that check or process exit, but are removed before cache restoration.
- Selection buffers and selection metadata are separate from the journal. UI Automation selection references can remain until a later probe replaces them or the process exits.
The application does not save these journals or selections to a history file or its settings file. Exiting ends their live process storage. Rust Switcher does not securely overwrite freed memory or control copies made by Windows, such as paging, crash dumps, or backups.
Rust Switcher does not read, write, clear, or restore the Windows clipboard. Selection conversion uses the Windows text interfaces described above and simulated input; it has no clipboard fallback and does not send Ctrl+C or Ctrl+V to perform conversion.
English and Russian language models are included with the application. Other
models are requested in the background for languages corresponding to the
installed Windows layouts. These requests are HTTPS downloads of fixed Lingua
model files from raw.githubusercontent.com, using pinned resource versions.
The request includes a model resource path and the Rust Switcher version in
its user agent. GitHub and network intermediaries can observe ordinary connection
metadata, such as the requesting IP address, and the requested language model.
No typed text, selected text, journal contents, or scoring candidates are included.
Each model is checked against an expected byte length and SHA-256 before use.
Verified models are cached at
%LOCALAPPDATA%\RustSwitcher\models\<model-hash>\<language>.fst and can then
be used offline. Cache files contain public model data, not a history of your
input. Models already loaded into memory remain available until process exit.
To remove downloaded models, exit the application and delete
%LOCALAPPDATA%\RustSwitcher\models. Models needed by installed layouts may
be downloaded again on a later launch or conversion. Removing a Windows layout
stops it from being a conversion target; it does not delete previously cached
model files. Download failures leave explicit conversion with its deterministic
layout fallback, while automatic correction requires sufficient local evidence.
Check for updates in the tray menu contacts GitHub over HTTPS to read the
latest stable release metadata and, when a newer release exists, downloads its
Windows executable. The download is verified against the SHA-256 digest and
size in GitHub's release metadata before installation. An isolated PowerShell
helper updates the existing executable after Rust Switcher exits and restarts it.
The update log is stored in
%LOCALAPPDATA%\RustSwitcher\updater.log and contains only update events
and errors, not typed text or input history. Update checks are user-initiated.
Preferences such as hotkeys, conversion options, timing, theme, and startup
window behavior are stored in a plain text settings file at
%APPDATA%\RustSwitcher\config.json. Development builds use
%APPDATA%\RustSwitcherDebug\config.json. These files contain preferences,
not a record of typed text. Saving uses a temporary file in the same folder.
Enabling Start on startup stores the executable path and --autostart
argument in the current user's Windows registry, in the RustSwitcher value
under HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run.
Older installations may have a RustSwitcher Autostart.lnk shortcut in the
user's Startup folder; the application migrates or removes that shortcut.
Autostart is separate from the settings file.
To remove saved preferences and stop future automatic launches:
- Clear Start on startup in the application.
- Right-click the tray icon and choose Exit.
- Delete
%APPDATA%\RustSwitcher\config.json(or the dedicated%APPDATA%\RustSwitcherfolder). If you used development builds, remove their separate settings folder too.
Launching again recreates default preferences. Deleting only the executable or settings file does not remove the autostart registration. Logs you chose to capture during development must be deleted from wherever you saved them.
The runtime AutoConvert toggle starts paused. You can toggle it through AutoConvert in the tray menu, by double-clicking the tray icon, or with the configured hotkey (double Right Ctrl by default), when the feature is enabled. To disable automatic conversion across launches, clear Enable AutoConvert in Settings and apply the change. To remove an individual hotkey binding, focus its field, press Backspace or Delete, and apply the change.
Pausing or disabling AutoConvert stops automatic conversion; it does not uninstall the keyboard hook, stop the input journal, clear every cache, or disable other configured hotkeys. To stop all processing by Rust Switcher, choose Exit from the tray menu. Closing or minimizing the settings window hides it and leaves the application running. Exit before entering sensitive text if you do not want Rust Switcher to process that input.
The published release does not enable tracing output. Debug builds with the
debug-tracing feature can write diagnostics to standard error, controlled
by RUST_LOG. These diagnostics may include original and converted text,
keyboard layouts, and window or caret information. A terminal, development
tool, or redirection configured by the developer may retain that output.
Avoid sensitive input during such sessions and remove captured logs when
they are no longer needed.
The application performs conversion on the device. It has no telemetry, analytics, automatic crash uploads, or network transmission of typed text, selections, journals, or preferences to QQRM or other recipients. The model downloads described above contact GitHub for public resources. Downloading or updating the application through GitHub or a package manager involves those services separately. Information you choose to submit in a support report is also separate from application processing.
Text in memory and saved preferences are not encrypted by Rust Switcher. They rely on Windows account and process protections. The application checks the focused editing context before replacing text and bounds journal size and selection operations, but these measures do not provide secure erasure or protection against software with access to your account or process.
For questions about this policy, use the project issue tracker. Issues are public: do not include passwords, private text, or unreviewed diagnostic logs. Changes to this policy will be published in this file with an updated date and remain visible in the repository history.