-
Notifications
You must be signed in to change notification settings - Fork 1
Data and File Paths
TypeWhisper for Linux keeps all of its state under your user-local application data directory. This page lists where each kind of data lives so you can find your settings, logs, plugins, and audio, and so you know what to copy when moving to a new machine.
TypeWhisper stores its Linux data under the user-local application data directory exposed by .NET:
- Base path:
~/.local/share/TypeWhisperon typical Linux setups
Everything below is relative to that base path unless otherwise noted.
| Path | Contents |
|---|---|
settings.json |
Your app settings (the JSON document edited through the settings UI). |
Data/typewhisper.db |
The local database, including transcription history. |
Logs/ |
Application log files. |
Plugins/ |
Installed and bundled plugins. See Plugins. |
Audio/ |
Session audio captures (WAV). |
Models/ |
Downloaded local transcription models. Excluded from settings backup (re-downloadable). |
Runtimes/ |
NVIDIA CUDA runtime libraries fetched on demand the first time you use CUDA. Absent until then; re-downloadable, so safe to exclude from backups. The Clear GPU runtime action on the Dictation page deletes this cache to recover from a corrupt runtime. See [[GPU & CUDA |
PluginData/ |
Per-plugin editable collections, stored under PluginData/<plugin-id>/. |
Plugins are loaded from the user plugin directory at ~/.local/share/TypeWhisper/Plugins/ on typical Linux setups. Plugins that own user-editable collections (for example Webhook and Script) keep their entries under PluginData/<plugin-id>/ so those entries survive plugin reinstalls.
The base path and Audio/ are forced to mode 0700 (owner-only) at startup. Directory.CreateDirectory honors your umask, so a 0002 umask would otherwise leave the tree group-writable — and since write access to a parent is what governs renaming its children, that would let a peer account swap out a child directory. Audio/ is clamped separately so recordings stay owner-only even if the base path is loosened later.
If either directory still grants group or other access after that tightening, TypeWhisper refuses to start, naming the path and the chmod that fixes it. The check reads the mode back rather than keying off whether chmod threw, because FAT and some CIFS mounts accept a chmod and silently ignore it.
Every user-data store — settings, dictionary, history, profiles, prompt actions, snippets, plugin settings and secrets, and File Memory — is written atomically, with rollback on failure, so a crash or a full disk part-way through a save cannot leave a truncated file behind.
A load that fails or is canceled is also never treated as "the store is empty": an unreadable file is left intact rather than being overwritten with empty contents on the next save.
Recorder captures and watch-folder exports are written to collision-safe paths and committed atomically; a watch-folder source file is deleted only after its export has committed.
A few integration files live under your XDG config and runtime directories rather than the app data directory:
| Path | Purpose |
|---|---|
~/.config/autostart/typewhisper.desktop |
XDG autostart entry that launches TypeWhisper on login. |
Control socket under $XDG_RUNTIME_DIR
|
Unix socket used for single-instance enforcement. When XDG_RUNTIME_DIR is unavailable, TypeWhisper falls back to a 0700 per-UID directory at /tmp/typewhisper-$UID. A second launch hands its CLI command off to the already-running instance over this socket instead of starting a new window. |
~/.local/share/typewhisper/launcher-backups/ |
Backups of any non-owned user .desktop launcher files that the browser URL-detection integration patches, so the integration can be removed cleanly without losing your customizations. |
~/.config/environment.d/typewhisper-accessibility.conf |
Written by the Enable browser URL detection flow on Wayland; sets MOZ_ENABLE_ACCESSIBILITY=1 and GTK_MODULES=gail:atk-bridge for Firefox-family browsers. |
/etc/udev/rules.d/61-typewhisper-input.rules |
Installed (via pkexec) by the Enable keyboard access flow so the Wayland evdev global-hotkey backend can read keyboard event nodes. Carries an ownership marker; removed cleanly on teardown. See [[Global hotkeys |
Session audio files are cleaned up on startup and shutdown. This means History retains the transcribed text without keeping WAV captures around indefinitely. If you want to keep a recording, use the Recorder page, which can save longer WAV captures (and an optional transcript sidecar text file) deliberately.
- Backup & restore — what to copy to preserve your setup
- Plugins — how plugins are deployed and where their data is stored
- Troubleshooting — where to look when something is not working
| Date | Change |
|---|---|
| 2026-06-17 | Initial version. |
| 2026-06-17 | Added Models/ row (backup-excluded); refined control-socket /tmp fallback to /tmp/typewhisper-$UID. |
| 2026-06-23 | v0.10.0: added the on-demand Runtimes/ CUDA cache and the 61-typewhisper-input.rules keyboard uaccess udev rule. |
| 2026-06-24 | v0.11.0: noted that the Runtimes/ CUDA cache can be cleared in-app via Clear GPU runtime. |
| 2026-07-27 | v0.13.0: documented the enforced 0700 directory permissions (startup fails closed) and atomic, rollback-on-failure writes across every user-data store. |
Home · Repository · Issues · Releases · GPLv3
TypeWhisper for Linux is a community Linux port. Each page lists its own change history in the Changelog section above.
Getting Started
Using TypeWhisper
- Dashboard
- Dictation
- Global Hotkeys
- Text Insertion
- File Transcription
- Recorder
- History
- Dictionary & Term Packs
- Snippets
- Profiles
- Prompts & AI Actions
- Text Cleanup & Formatting
- Long-term Memory
Settings
Plugins
Automation
Platform & Troubleshooting
Project