Base
There are two types of base directories: global and vault.
Global
- Shared between
stableandnightlybuilds (staginganddevbuilds use different folders). - On macOS:
~/Library/Application Support/hyprnote/ - On Linux:
~/.local/share/hyprnote/
Contents:
models/stt/— downloaded speech-to-text model filesstore.json— app state (onboarding status, pinned tabs, recently opened sessions, dismissed toasts, analytics preference, auth tokens)hyprnote.json— vault configuration (custom vault path if set)search/— full-text search index (Tantivy)
Vault
- Customizable, defaults to be the same as
globalbase for backward compatibility. - You can change the vault location in Settings > General.
Contents:
sessions/— one subdirectory per session, each containing:_meta.json— session metadata (title, created date, participants)memo.md— raw notes in Markdown with YAML frontmattertranscript.json— transcription data (words, timestamps, speakers)*.md— AI-generated enhanced notes (summaries, action items)attachments/— file attachments- Audio
.wavfiles — recorded audio
humans/— contact and participant dataorganizations/— organization datachats/— chat conversation dataprompts/— custom prompt templatessettings.json— app settings
Here is how Char loads session content from disk — this shows exactly what files are read per session:
10 | pub fn load_session_content(session_id: &str, session_dir: &std::path::Path) -> SessionContentData { |
11 | let mut content = SessionContentData { |
12 | session_id: session_id.to_string(), |
13 | meta: None, |
14 | raw_memo_tiptap_json: None, |
15 | transcript: None, |
16 | notes: vec![], |
17 | }; |
18 | |
19 | let entries = match std::fs::read_dir(session_dir) { |
The transcript data structure stores word-level timestamps and speaker information:
83 | #[derive(Debug, Clone, Serialize, Deserialize, Type)] |
84 | #[serde(rename_all = "camelCase")] |
85 | pub struct TranscriptWord { |
86 | pub id: Option<String>, |
87 | pub text: String, |
88 | pub start_ms: i64, |
89 | pub end_ms: i64, |
90 | pub channel: i64, |
91 | } |
92 |
The app state persisted in store.json is defined by this enum — nothing else is stored there:
4 | pub enum StoreKey { |
5 | OnboardingNeeded2, |
6 | DismissedToasts, |
7 | OnboardingLocal, |
8 | TinybaseValues, |
9 | PinnedTabs, |
10 | RecentlyOpenedSessions, |
11 | } |
Logs
Application logs are stored in the system app log directory as rotating files (app.log, app.log.1, etc.).
For details on what data leaves your device, see AI Models & Data Privacy.