Voice-to-text dictation for Linux and macOS with GPU acceleration
Pure Rust daemon with VAD-triggered auto-transcription, sub-second latency, and complete privacy.
sudo apt install xdotoolsudo apt install ydotool && sudo usermod -aG input $USER (then logout/login)sudo apt install wtypepip3 install -r requirements-qt-tray.txt (PySide6 6.8+), or
from your distro: apt install python3-pyside6 / dnf install python3-pyside6 /
pacman -S pyside6. Everything else — daemon, VAD, STT, injection — stays pure Rust,
and GNOME/KDE/X11 users need no Python at all.📖 Full macOS Setup Guide - Step-by-step install, permissions, and verification
# Linux (x64)
npm install -g swictation --foreground-scripts
# macOS (Apple Silicon) — uses platform-specific optional package
npm install -g swictation --foreground-scripts
# Postinstall automatically (with retry and progress reporting):
# - Detects platform and GPU, downloads optimized libraries (~1.5GB)
# - Recommends and test-loads AI model (30-60s)
# - Installs services (systemd on Linux, launchd on macOS)
# - Shows platform-specific setup instructions
# Start
swictation start
If postinstall was interrupted or you skipped it, the same work is reachable manually:
swictation doctor # what, if anything, is missing or broken
swictation setup --repair # run only the steps that are not healthy
swictation start
swictation setup with no flags runs the whole install (config, GPU libraries, models,
services) and is still fine to use; --repair is the faster path once something is
merely broken rather than absent. See Troubleshooting.
Installs are tamper-evident. Every model file is pinned to an immutable upstream
revision and verified against a SHA-256 recorded in models.manifest.json before it
takes its final name, so a truncated transfer, a proxy-injected error page, or an
upstream force-push fails the download instead of surfacing later as an opaque daemon
crash. A file that fails verification is never left in place: it is re-fetched on the
next run, and swictation doctor --deep re-checks the whole tree on demand (ADR-036).
$mod+Shift+d (Super+Shift+d)Ctrl+Shift+D[You speak] → VAD detects pause (0.8s) → STT transcribes → Text injected
Components:
Performance:
Say punctuation and formatting commands naturally:
YOU SAY: "hello comma world period"
SWICTATION TYPES: Hello, world.
YOU SAY: "number forty two items"
SWICTATION TYPES: 42 items
60+ commands: punctuation, quotes, brackets, symbols, numbers, formatting, capitalization
📖 Full Secretary Mode Guide - Complete command reference and examples
Learn personalized corrections from your editing:
YOU SAY: "arkon"
SWICTATION TYPES: arkon [you edit to "Archon"]
↓
LEARNED: "arkon" → "Archon" (fuzzy match, force uppercase)
FOREVER: All future "arkon" → "Archon" automatically
Features:
corrections.toml in the config directory — ~/.config/swictation/ on Linux, ~/Library/Application Support/swictation/ on macOS)Perfect for:
Configure phonetic sensitivity in Settings UI (0.0 = exact only, 1.0 = very fuzzy, default: 0.3).
swictation doctor # Check every install step, print a repair command per failure
swictation download-models # Download AI models (alias: download-model)
swictation setup # Run the install steps (config, models, services)
swictation start [--ui] # Start the daemon (and optionally the tray UI)
swictation stop # Stop the daemon
swictation status # Service, socket, and platform status
swictation toggle # Toggle recording on/off (what the hotkey calls)
swictation help # Full usage
swictation --version # Version info for every component
doctor and setup are the install-repair pair and are covered in
Troubleshooting. status answers a different question — whether the
daemon is running right now — and needs a working install to be meaningful.
download-models fetches the Silero VAD model plus one or more STT models into the
platform data directory. With no arguments it downloads the platform default set. Pass
--model= (or a bare positional, e.g. swictation download-model 1.1b-gpu) to pick one,
and --force to re-download over existing files.
| Platform | --model= values | Size |
|---|---|---|
| Linux | 0.6b (aliases 0.6b-gpu, 0.6b-cpu, cpu-only) | 2.55 GB |
| Linux | 1.1b (alias 1.1b-gpu) | 6.96 GB |
| Linux | both — default: VAD + 0.6B + 1.1B | ~9.5 GB |
| macOS | 1.1b-coreml (alias coreml-native) | 1.9 GB |
| macOS | 0.6b-coreml | 2.67 GB |
| macOS | both — default: VAD + CoreML 1.1B | 1.9 GB |
CoreML bundles are macOS-only and are rejected on Linux. Silero VAD (629 KB) is always included.
Linux (systemd):
systemctl --user status swictation-daemon
systemctl --user {start|stop|restart} swictation-daemon
journalctl --user -u swictation-daemon -f
macOS (launchd):
launchctl list | grep com.swictation.daemon # status
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.swictation.daemon.plist
launchctl start com.swictation.daemon
launchctl stop com.swictation.daemon
launchctl bootout gui/$(id -u)/com.swictation.daemon # unload
tail -f ~/Library/Logs/swictation/daemon.log # logs
swictation start / stop / status wrap the right one for your platform, so prefer
those unless you are debugging the service itself.
Edit the config file — Linux: ~/.config/swictation/config.toml,
macOS: ~/Library/Application Support/swictation/config.toml:
vad_threshold = 0.25 # 0.0-1.0 (lower = more sensitive)
vad_min_silence = 0.8 # Seconds before transcription
vad_min_speech = 0.25 # Minimum speech length
vad_max_speech = 30.0 # Force transcription after this many seconds
stt_model_override = "auto" # auto, 0.6b-cpu, 0.6b-gpu, 1.1b-gpu
# macOS also: 1.1b-coreml (alias coreml-native)
num_threads = 4 # ONNX Runtime thread count
phonetic_threshold = 0.3 # Learned-correction fuzziness (0.0-1.0)
[hotkeys]
toggle = "Super+Shift+D" # macOS: Ctrl+Shift+D
push_to_talk = "Super+Space" # macOS: Ctrl+Space
Every key is optional — each has a compiled-in default, so a partial or empty config file is valid and unset keys fall back to the values above (ADR-034).
swictation doctorWhatever the symptom, run this first. doctor evaluates every install step against what
is actually on disk and prints one line per step, with a repair command under each
failure. It executes no install work and writes nothing, so it is safe to run on an
install that is mid-failure — and it works even when the binaries themselves are missing.
swictation doctor # health table for every install step
swictation doctor --deep # ...and verify file contents by hash, not just size
swictation doctor --json # machine-readable report (schemaVersion 1)
Exit codes: 0 nothing unhealthy, 1 at least one step unhealthy or blocked, 2 doctor itself failed to run. The last one is deliberately distinct so a crashed diagnostic is never mistaken for a broken install.
A normal run compares sizes. --deep streams a SHA-256 of every model file, GPU library
and platform binary and compares it against what was recorded when they were installed —
minutes of I/O on a multi-gigabyte model tree, which is why it is opt-in rather than the
default. Use it when a file is the right size but the daemon still misbehaves.
swictation setup --repair--repair re-runs only the steps whose check is currently failing, so a mangled service
unit no longer costs you a 9 GB model re-download — and reinstalling the whole package
stops being the first thing to reach for. Every step derives its state from disk and is
idempotent, so running one twice is harmless.
swictation setup --repair # run only the steps that are not healthy
swictation setup --list # list the install steps, their ids and what gates them
swictation setup --<id> # run exactly one step, e.g. --services
Step ids: platform, binaries, config-reset, gpu-libs, models, config-heal,
services, integration, verify. (cleanup exists but runs only during npm install;
naming it here is rejected rather than silently ignored, as is any unrecognized flag.)
--repair, --list and --<id> are non-interactive — they never stop to ask about
auto-start — so they are safe to script.
| Linux | macOS | |
|---|---|---|
| Config | ~/.config/swictation/ | ~/Library/Application Support/swictation/ |
| Data + models | ~/.local/share/swictation/ | ~/Library/Application Support/swictation/ |
| Install log | ~/.local/share/swictation/install.log | ~/Library/Logs/swictation/install.log |
| Daemon logs | journalctl --user -u swictation-daemon | ~/Library/Logs/swictation/daemon.log, daemon-error.log |
| Sockets | $XDG_RUNTIME_DIR (fallback: data dir) | ~/Library/Application Support/swictation/ |
swictation status prints the resolved socket paths for your machine.
Installation issues: run swictation doctor — its header prints the resolved install
log path for your machine, along with the platform, target user, and selected model it
resolved.
Daemon won't start:
# Linux
journalctl --user -u swictation-daemon -n 50
# macOS
tail -n 50 ~/Library/Logs/swictation/daemon-error.log
tail -n 20 ~/Library/Logs/swictation/launcher.log # library/binary resolution
log show --predicate 'processImagePath CONTAINS "swictation"' --last 5m
No text appears:
# Linux — test the injection tool and check the display server
echo "test" | wtype - # or xdotool type -
echo $XDG_SESSION_TYPE # x11 or wayland; picks which tool is used
On macOS text injection uses the Accessibility API, so there is no injection tool or display-server variable to check. Instead grant permissions: System Settings > Privacy & Security > Accessibility > enable Swictation, then restart the daemon.
Low accuracy / no detection:
vad_threshold in config (try 0.15)CoreML model not loading:
~/Library/Application Support/swictation/models/.mlmodelc directory is present for CoreML inferenceuname -m should show arm64swictation download-models --model=1.1b-coreml --forceWrong microphone selected:
📖 More help: macOS Setup Guide · Window Manager Configs
Pure Rust core - no Python in the transcription pipeline. The sole exception is the optional tray icon on Linux wlroots compositors (Sway/Hyprland/River), which uses a Python/Qt fallback; see Prerequisites. Dictation works without it.
Audio (cpal) → VAD (Silero v6) → STT (Parakeet-TDT) →
Transform (MidStream) → Platform-specific text injection
Platform-specific components:
Crates:
swictation-daemon - Main binary (tokio async)swictation-audio - Audio captureswictation-vad - Voice activity detectionswictation-stt - Speech-to-text (ONNX Runtime + native CoreML backends)swictation-metrics - Performance trackingswictation-broadcaster - Real-time metricsswictation-paths - Platform-aware path resolutionswictation-context-learning - Context-aware meta-learningswictation-wasm-utils - WASM utility bindingsexternal/midstream/text-transform - Secretary Mode (submodule)coreml-native - Native CoreML inference for macOS (external repo)Audio Configuration:
Auto-detects NVIDIA architecture (Maxwell through Blackwell):
| Generation | GPUs | Package |
|---|---|---|
| sm_50-70 | GTX 750-1080, Quadro M/P | ~1.5GB |
| sm_75-86 | RTX 20/30 series, A-series | ~1.5GB |
| sm_89-120 | RTX 40/50 series, H100 | ~1.5GB |
CPU fallback for older/unsupported GPUs.
Auto-detects Apple Silicon and unified memory, then reports the 35% GPU share:
| Mac | Unified memory | GPU share | Model |
|---|---|---|---|
| Any Apple Silicon | under ~16GB | — | Install refused |
| M1 (16GB) | 16GB | ~5.6GB | 1.1B CoreML |
| M1 Pro/Max and later | 32GB+ | ~11GB+ | 1.1B CoreML |
Every supported Mac runs the same native CoreML 1.1B bundle (1.9GB) with full Apple Neural Engine acceleration — there is no per-machine model downgrade, because machines too small for it are rejected at install time.
📖 Architecture Details (includes GPU model selection)
Real-time monitoring via Unix socket (platform-specific path, see swictation-paths crate):
~/Library/Application Support/swictation/swictation_metrics.sock$XDG_RUNTIME_DIR/swictation_metrics.sock (fallback: ~/.local/share/swictation/swictation_metrics.sock)metrics.db in the data directory — macOS: ~/Library/Application Support/swictation/metrics.db, Linux: ~/.local/share/swictation/metrics.dbVoice-control keyboard shortcuts:
YOU SAY: "press control c"
SWICTATION TYPES: [sends Ctrl+C keypress]
Configure in config.toml.
# 1. Stop the services FIRST (see note below)
swictation stop
# Linux
systemctl --user disable swictation-daemon
# macOS
launchctl bootout gui/$(id -u)/com.swictation.daemon
# 2. Remove the package
npm uninstall -g swictation
Stop the services first — npm will not do it for you. The package ships a
preuninstall.js cleanup script, but npm 7 and later do not execute uninstall lifecycle
scripts at all, so on any modern npm it never runs and you are left with a service unit
pointing at deleted binaries (ADR-034). You can still invoke it by hand from the package
directory before removing it: node preuninstall.js --force.
User data and models are deliberately preserved. Uninstalling never deletes your config, learned corrections, metrics database, or the downloaded models (up to ~9.5GB on Linux). Remove them explicitly when you actually want them gone:
# Linux
rm -rf ~/.config/swictation ~/.local/share/swictation
# macOS
rm -rf ~/Library/Application\ Support/swictation ~/Library/Logs/swictation
Priority areas:
Apache 2.0 - See LICENSE
NVIDIA (Parakeet-TDT) • Silero Team (VAD v6) • ort Contributors (Rust ONNX) • parakeet-rs • Rust Community
685 commits
Makefile
53.9%
Rust
20.7%
JavaScript
15.0%
Shell
5.6%
Python
2.3%
TypeScript
2.3%
Voice-to-text dictation for Linux and macOS with GPU acceleration
Pure Rust daemon with VAD-triggered auto-transcription, sub-second latency, and complete privacy.
sudo apt install xdotoolsudo apt install ydotool && sudo usermod -aG input $USER (then logout/login)sudo apt install wtypepip3 install -r requirements-qt-tray.txt (PySide6 6.8+), or
from your distro: apt install python3-pyside6 / dnf install python3-pyside6 /
pacman -S pyside6. Everything else — daemon, VAD, STT, injection — stays pure Rust,
and GNOME/KDE/X11 users need no Python at all.📖 Full macOS Setup Guide - Step-by-step install, permissions, and verification
# Linux (x64)
npm install -g swictation --foreground-scripts
# macOS (Apple Silicon) — uses platform-specific optional package
npm install -g swictation --foreground-scripts
# Postinstall automatically (with retry and progress reporting):
# - Detects platform and GPU, downloads optimized libraries (~1.5GB)
# - Recommends and test-loads AI model (30-60s)
# - Installs services (systemd on Linux, launchd on macOS)
# - Shows platform-specific setup instructions
# Start
swictation start
If postinstall was interrupted or you skipped it, the same work is reachable manually:
swictation doctor # what, if anything, is missing or broken
swictation setup --repair # run only the steps that are not healthy
swictation start
swictation setup with no flags runs the whole install (config, GPU libraries, models,
services) and is still fine to use; --repair is the faster path once something is
merely broken rather than absent. See Troubleshooting.
Installs are tamper-evident. Every model file is pinned to an immutable upstream
revision and verified against a SHA-256 recorded in models.manifest.json before it
takes its final name, so a truncated transfer, a proxy-injected error page, or an
upstream force-push fails the download instead of surfacing later as an opaque daemon
crash. A file that fails verification is never left in place: it is re-fetched on the
next run, and swictation doctor --deep re-checks the whole tree on demand (ADR-036).
$mod+Shift+d (Super+Shift+d)Ctrl+Shift+D[You speak] → VAD detects pause (0.8s) → STT transcribes → Text injected
Components:
Performance:
Say punctuation and formatting commands naturally:
YOU SAY: "hello comma world period"
SWICTATION TYPES: Hello, world.
YOU SAY: "number forty two items"
SWICTATION TYPES: 42 items
60+ commands: punctuation, quotes, brackets, symbols, numbers, formatting, capitalization
📖 Full Secretary Mode Guide - Complete command reference and examples
Learn personalized corrections from your editing:
YOU SAY: "arkon"
SWICTATION TYPES: arkon [you edit to "Archon"]
↓
LEARNED: "arkon" → "Archon" (fuzzy match, force uppercase)
FOREVER: All future "arkon" → "Archon" automatically
Features:
corrections.toml in the config directory — ~/.config/swictation/ on Linux, ~/Library/Application Support/swictation/ on macOS)Perfect for:
Configure phonetic sensitivity in Settings UI (0.0 = exact only, 1.0 = very fuzzy, default: 0.3).
swictation doctor # Check every install step, print a repair command per failure
swictation download-models # Download AI models (alias: download-model)
swictation setup # Run the install steps (config, models, services)
swictation start [--ui] # Start the daemon (and optionally the tray UI)
swictation stop # Stop the daemon
swictation status # Service, socket, and platform status
swictation toggle # Toggle recording on/off (what the hotkey calls)
swictation help # Full usage
swictation --version # Version info for every component
doctor and setup are the install-repair pair and are covered in
Troubleshooting. status answers a different question — whether the
daemon is running right now — and needs a working install to be meaningful.
download-models fetches the Silero VAD model plus one or more STT models into the
platform data directory. With no arguments it downloads the platform default set. Pass
--model= (or a bare positional, e.g. swictation download-model 1.1b-gpu) to pick one,
and --force to re-download over existing files.
| Platform | --model= values | Size |
|---|---|---|
| Linux | 0.6b (aliases 0.6b-gpu, 0.6b-cpu, cpu-only) | 2.55 GB |
| Linux | 1.1b (alias 1.1b-gpu) | 6.96 GB |
| Linux | both — default: VAD + 0.6B + 1.1B | ~9.5 GB |
| macOS | 1.1b-coreml (alias coreml-native) | 1.9 GB |
| macOS | 0.6b-coreml | 2.67 GB |
| macOS | both — default: VAD + CoreML 1.1B | 1.9 GB |
CoreML bundles are macOS-only and are rejected on Linux. Silero VAD (629 KB) is always included.
Linux (systemd):
systemctl --user status swictation-daemon
systemctl --user {start|stop|restart} swictation-daemon
journalctl --user -u swictation-daemon -f
macOS (launchd):
launchctl list | grep com.swictation.daemon # status
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.swictation.daemon.plist
launchctl start com.swictation.daemon
launchctl stop com.swictation.daemon
launchctl bootout gui/$(id -u)/com.swictation.daemon # unload
tail -f ~/Library/Logs/swictation/daemon.log # logs
swictation start / stop / status wrap the right one for your platform, so prefer
those unless you are debugging the service itself.
Edit the config file — Linux: ~/.config/swictation/config.toml,
macOS: ~/Library/Application Support/swictation/config.toml:
vad_threshold = 0.25 # 0.0-1.0 (lower = more sensitive)
vad_min_silence = 0.8 # Seconds before transcription
vad_min_speech = 0.25 # Minimum speech length
vad_max_speech = 30.0 # Force transcription after this many seconds
stt_model_override = "auto" # auto, 0.6b-cpu, 0.6b-gpu, 1.1b-gpu
# macOS also: 1.1b-coreml (alias coreml-native)
num_threads = 4 # ONNX Runtime thread count
phonetic_threshold = 0.3 # Learned-correction fuzziness (0.0-1.0)
[hotkeys]
toggle = "Super+Shift+D" # macOS: Ctrl+Shift+D
push_to_talk = "Super+Space" # macOS: Ctrl+Space
Every key is optional — each has a compiled-in default, so a partial or empty config file is valid and unset keys fall back to the values above (ADR-034).
swictation doctorWhatever the symptom, run this first. doctor evaluates every install step against what
is actually on disk and prints one line per step, with a repair command under each
failure. It executes no install work and writes nothing, so it is safe to run on an
install that is mid-failure — and it works even when the binaries themselves are missing.
swictation doctor # health table for every install step
swictation doctor --deep # ...and verify file contents by hash, not just size
swictation doctor --json # machine-readable report (schemaVersion 1)
Exit codes: 0 nothing unhealthy, 1 at least one step unhealthy or blocked, 2 doctor itself failed to run. The last one is deliberately distinct so a crashed diagnostic is never mistaken for a broken install.
A normal run compares sizes. --deep streams a SHA-256 of every model file, GPU library
and platform binary and compares it against what was recorded when they were installed —
minutes of I/O on a multi-gigabyte model tree, which is why it is opt-in rather than the
default. Use it when a file is the right size but the daemon still misbehaves.
swictation setup --repair--repair re-runs only the steps whose check is currently failing, so a mangled service
unit no longer costs you a 9 GB model re-download — and reinstalling the whole package
stops being the first thing to reach for. Every step derives its state from disk and is
idempotent, so running one twice is harmless.
swictation setup --repair # run only the steps that are not healthy
swictation setup --list # list the install steps, their ids and what gates them
swictation setup --<id> # run exactly one step, e.g. --services
Step ids: platform, binaries, config-reset, gpu-libs, models, config-heal,
services, integration, verify. (cleanup exists but runs only during npm install;
naming it here is rejected rather than silently ignored, as is any unrecognized flag.)
--repair, --list and --<id> are non-interactive — they never stop to ask about
auto-start — so they are safe to script.
| Linux | macOS | |
|---|---|---|
| Config | ~/.config/swictation/ | ~/Library/Application Support/swictation/ |
| Data + models | ~/.local/share/swictation/ | ~/Library/Application Support/swictation/ |
| Install log | ~/.local/share/swictation/install.log | ~/Library/Logs/swictation/install.log |
| Daemon logs | journalctl --user -u swictation-daemon | ~/Library/Logs/swictation/daemon.log, daemon-error.log |
| Sockets | $XDG_RUNTIME_DIR (fallback: data dir) | ~/Library/Application Support/swictation/ |
swictation status prints the resolved socket paths for your machine.
Installation issues: run swictation doctor — its header prints the resolved install
log path for your machine, along with the platform, target user, and selected model it
resolved.
Daemon won't start:
# Linux
journalctl --user -u swictation-daemon -n 50
# macOS
tail -n 50 ~/Library/Logs/swictation/daemon-error.log
tail -n 20 ~/Library/Logs/swictation/launcher.log # library/binary resolution
log show --predicate 'processImagePath CONTAINS "swictation"' --last 5m
No text appears:
# Linux — test the injection tool and check the display server
echo "test" | wtype - # or xdotool type -
echo $XDG_SESSION_TYPE # x11 or wayland; picks which tool is used
On macOS text injection uses the Accessibility API, so there is no injection tool or display-server variable to check. Instead grant permissions: System Settings > Privacy & Security > Accessibility > enable Swictation, then restart the daemon.
Low accuracy / no detection:
vad_threshold in config (try 0.15)CoreML model not loading:
~/Library/Application Support/swictation/models/.mlmodelc directory is present for CoreML inferenceuname -m should show arm64swictation download-models --model=1.1b-coreml --forceWrong microphone selected:
📖 More help: macOS Setup Guide · Window Manager Configs
Pure Rust core - no Python in the transcription pipeline. The sole exception is the optional tray icon on Linux wlroots compositors (Sway/Hyprland/River), which uses a Python/Qt fallback; see Prerequisites. Dictation works without it.
Audio (cpal) → VAD (Silero v6) → STT (Parakeet-TDT) →
Transform (MidStream) → Platform-specific text injection
Platform-specific components:
Crates:
swictation-daemon - Main binary (tokio async)swictation-audio - Audio captureswictation-vad - Voice activity detectionswictation-stt - Speech-to-text (ONNX Runtime + native CoreML backends)swictation-metrics - Performance trackingswictation-broadcaster - Real-time metricsswictation-paths - Platform-aware path resolutionswictation-context-learning - Context-aware meta-learningswictation-wasm-utils - WASM utility bindingsexternal/midstream/text-transform - Secretary Mode (submodule)coreml-native - Native CoreML inference for macOS (external repo)Audio Configuration:
Auto-detects NVIDIA architecture (Maxwell through Blackwell):
| Generation | GPUs | Package |
|---|---|---|
| sm_50-70 | GTX 750-1080, Quadro M/P | ~1.5GB |
| sm_75-86 | RTX 20/30 series, A-series | ~1.5GB |
| sm_89-120 | RTX 40/50 series, H100 | ~1.5GB |
CPU fallback for older/unsupported GPUs.
Auto-detects Apple Silicon and unified memory, then reports the 35% GPU share:
| Mac | Unified memory | GPU share | Model |
|---|---|---|---|
| Any Apple Silicon | under ~16GB | — | Install refused |
| M1 (16GB) | 16GB | ~5.6GB | 1.1B CoreML |
| M1 Pro/Max and later | 32GB+ | ~11GB+ | 1.1B CoreML |
Every supported Mac runs the same native CoreML 1.1B bundle (1.9GB) with full Apple Neural Engine acceleration — there is no per-machine model downgrade, because machines too small for it are rejected at install time.
📖 Architecture Details (includes GPU model selection)
Real-time monitoring via Unix socket (platform-specific path, see swictation-paths crate):
~/Library/Application Support/swictation/swictation_metrics.sock$XDG_RUNTIME_DIR/swictation_metrics.sock (fallback: ~/.local/share/swictation/swictation_metrics.sock)metrics.db in the data directory — macOS: ~/Library/Application Support/swictation/metrics.db, Linux: ~/.local/share/swictation/metrics.dbVoice-control keyboard shortcuts:
YOU SAY: "press control c"
SWICTATION TYPES: [sends Ctrl+C keypress]
Configure in config.toml.
# 1. Stop the services FIRST (see note below)
swictation stop
# Linux
systemctl --user disable swictation-daemon
# macOS
launchctl bootout gui/$(id -u)/com.swictation.daemon
# 2. Remove the package
npm uninstall -g swictation
Stop the services first — npm will not do it for you. The package ships a
preuninstall.js cleanup script, but npm 7 and later do not execute uninstall lifecycle
scripts at all, so on any modern npm it never runs and you are left with a service unit
pointing at deleted binaries (ADR-034). You can still invoke it by hand from the package
directory before removing it: node preuninstall.js --force.
User data and models are deliberately preserved. Uninstalling never deletes your config, learned corrections, metrics database, or the downloaded models (up to ~9.5GB on Linux). Remove them explicitly when you actually want them gone:
# Linux
rm -rf ~/.config/swictation ~/.local/share/swictation
# macOS
rm -rf ~/Library/Application\ Support/swictation ~/Library/Logs/swictation
Priority areas:
Apache 2.0 - See LICENSE
NVIDIA (Parakeet-TDT) • Silero Team (VAD v6) • ort Contributors (Rust ONNX) • parakeet-rs • Rust Community
685 commits
Makefile
53.9%
Rust
20.7%
JavaScript
15.0%
Shell
5.6%
Python
2.3%
TypeScript
2.3%