Data model & storage
The exact shape of settings, history records, and dictionary entries — and where each lives on disk. Everything is local JSON.
Config
electron-store JSON
History
One file per record
Location
app userData directory
Entities
VoiceFlow persists three things: your settings (a single config object), your transcription history (one JSON file per record), and your dictionary (one JSON file per term).
Single config object in the electron-store.
hotkeystringIDXholdToTranscribeHotkeystringlanguagestringenablePolishbooleanpolishProvider"groq"audioInputDeviceId?stringgroqApiKeystringdefaultModedictation|askMODEaskPasteBehaviorenum
One JSON file per transcription, named <id>.json.
idstringPKmodedictation|askMODEoriginal_textstringoptimized_text?stringcommand_text?stringsource_text?stringfinal_textstringapp_context?jsonJSONdetected_language?stringapp_name?stringIDXwindow_title?stringIDXdiagnostics?jsonJSONduration_seconds?numberword_countnumbercreated_atstring
One JSON file per custom vocabulary term.
idstringPKwordstringIDXcreated_atstring
TranscriptionRecordN : 1AppSettings.defaultModemode chosen at record timeDictionaryWordN : NTranscriptionRecordbiases the Whisper prompt
app_context is a serialized CursorContext captured at recording time. optimized_text, command_text, and source_text are populated depending on mode.
Which text fields are set, by mode
| Field | Dictation | Ask |
|---|---|---|
| original_text | always | The raw Whisper transcript in both modes. |
| optimized_text | if polished | Dictation: the polished rewrite (or null on fallback). Ask: the transformed text. |
| command_text | null / instruction | Ask only: the spoken instruction (the raw transcript). |
| source_text | null / selection | Ask only: the selected text that was transformed. |
| final_text | always | What was actually pasted — the source of truth. |
Storage locations
Everything lives under Electron's app.getPath('userData') directory:
<userData>/
├── config.json # electron-store: settings + API key
├── history/
│ ├── <id>.json # one TranscriptionRecord per file
│ └── …
└── dictionary/
├── <id>.json # one DictionaryWord per file
└── …Custom history directory
Your API key is stored in plaintext