SayWrite is a desktop dictation tool that converts spoken English into text on the local computer. It captures microphone audio, transcribes complete utterances, and inserts the result at the cursor in another application. The program runs on macOS, Windows, and Linux, and it does not require accounts, API keys, or transcription servers. An optional grammar cleanup step uses a local model to improve the recognized text, and a conservative filter rejects large rewrites or changes to numbers and negation. Local profiles store microphone choice, automatic-copy preference, and grammar-cleanup preference. Drafts and settings are plaintext files protected by the operating system account. The default speech engine is an English model with punctuation and capitalization, running through native CPU inference.
The global shortcut starts and finishes dictation from another application and opens a compact floating recorder. The main editor remains read-only while recording so the insertion point stays stable. Long recordings are split at a pause after sixty seconds or at a hard limit of ninety seconds, and all chunks are joined at the end. Automatic copy is optional because it replaces the clipboard. Grammar cleanup is opt-in, and the original transcription can be restored after a correction. The source export command creates a versioned ZIP archive with a checksum manifest, and local packaging commands create an unpacked application, a DMG, an NSIS installer, or an AppImage. Nothing is published to a hosting service.
SayWrite is version 0.1.0 and is written in JavaScript and TypeScript with Node.js, Electron, and a browser-based renderer. Native engine packages are available for macOS arm64 and x64, Windows x64, and Linux arm64 and x64. Windows ARM64 is not a native target in this version. Linux Wayland shortcut availability depends on desktop and portal support. The speech engine uses the sherpa-onnx runtime with an INT8 conversion of an English model, and the grammar step uses a local Qwen2.5 0.5B Instruct model. English is the only supported language, with no translation or cloud fallback.
| Real-time microphone input conversion to written English | Transcribe spoken words without network connectivity required |
| System-level hotkey triggers recording from any foreground window | Toggle dictation capture across multiple concurrent applications |
| Minimal overlay interface displays active recording state | Compact window allows text entry while multitasking elsewhere |
| Text injection at current caret position in target program | Replace highlighted content with recognized speech output |
| Configuration sets store microphone and behavioral preferences | Switch audio input devices without restarting the application |
| Clipboard population after each completed transcription session | Transfer recognized text to external programs via paste buffer |
| Local language model corrects punctuation and casing errors | Post-processing refinement removes disfluencies from raw output |
| Revert mechanism restores pre-correction transcription version | Undo grammar adjustments to recover original recognition result |
| Audio stream partitioned at temporal thresholds for memory | Segmented processing maintains sentence continuity during pauses |
| Application state persisted in user-scoped directory structure | Plaintext configuration files stored per operating system account |
| Archival utility generates compressed source distribution package | Build pipeline produces platform-specific installer artifacts |
| Test suite validates engine, grammar, and desktop integration | Quality gates verify type safety and lint compliance |