Configuration¶
Stratum stores its configuration in .pkm/config.toml inside your vault directory.
Quick Access¶
You can edit most settings through the Settings panel ( in the sidebar). The configuration file is also directly editable — Stratum auto-reloads on changes.
Configuration File Reference¶
# Path to the vault root directory
vault_path = "~/StratumVault"
# UI language (ISO 639-1 code). Default: "en".
# Supported: en, de, it, fr, es, zh, ja, el
locale = "en"
[sync]
# Sync mode: Manual, AutoCommit, AutoSync
mode = "AutoCommit"
# Git remote URL
remote_url = "git@github.com:user/vault.git"
# Git branch
branch = "main"
# Auto-commit interval (seconds)
auto_commit_interval_secs = 300
# Auto-sync interval (seconds)
auto_sync_interval_secs = 1800
[theme]
# Enable dark mode
dark_mode = true
# Primary accent color (hex)
primary_color = "#f97316"
# Secondary color (hex)
secondary_color = "#6b7280"
# Base font size (pixels)
font_size = 16
[ai]
# LLM provider: ollama, openai, anthropic, google, zai, custom
provider = "ollama"
# API endpoint URL (for ollama, custom, zai)
endpoint = "http://localhost:11434"
# API key (for openai, anthropic, google)
api_key = ""
# Default chat model
model = "llama3.2"
# List of models and their capabilities
models = [
{ name = "llama3.2", capabilities = ["chat"] },
{ name = "nomic-embed-text", capabilities = ["embedding"] },
]
# Enable RAG (Retrieval-Augmented Generation)
rag_enabled = true
# Number of chunks to include in RAG context
rag_chunk_count = 5
# Reuse the main LLM gateway endpoint and auth for RAG
# (no-op today — embeddings always use the AI configuration)
use_llm_gateway_and_auth = false
[stt]
# Base URL of the transcription endpoint. Empty = disabled.
endpoint = ""
# Optional bearer token for protected endpoints.
api_key = ""
# Transcription model name (e.g. "whisper-1")
model = "whisper-1"
# Diarization model name (e.g. "pyannote-diarization")
diarize_model = "pyannote-diarization"
# Language hint (e.g. "en"). Empty = auto-detect.
# language = "en"
# Run speaker diarization after transcription
diarize = true
# Generate an LLM summary of the transcript
auto_summarize = true
# Match speakers against the enrolled voice registry
auto_identify = true
# Reuse the main LLM gateway endpoint and auth for transcription
use_llm_gateway_and_auth = false
[tts]
# Override endpoint for text-to-speech. Empty = use the AI endpoint above.
endpoint = ""
# Optional bearer token for protected TTS endpoints.
api_key = ""
# Voice name
voice = "alloy"
# Output audio format (mp3, opus, aac, flac, wav)
format = "mp3"
# Playback speed multiplier (0.25–4.0)
speed = 1.0
# Reuse the main LLM gateway endpoint and auth for synthesis.
# When true, the AI endpoint/key are used exclusively and any TTS
# endpoint/api_key above is ignored.
use_llm_gateway_and_auth = false
[research]
# SearXNG endpoint for web research
searxng_endpoint = "http://localhost:8888"
# Max search results per query
max_results = 3
# Research depth (search-read cycles)
max_depth = 2
[watcher]
# Enable file system watcher
enabled = true
# Debounce interval (milliseconds)
debounce_ms = 500
[graph]
# Show connected components
show_connected = true
# Show orphaned notes
show_orphaned = true
# Show tag nodes
show_tags = true
# Force-directed layout: charge strength (negative = repulsion)
charge_strength = -30
# Force-directed layout: link distance
link_distance = 100
# Force-directed layout: alpha decay rate
alpha_decay = 0.02
# Force-directed layout: velocity decay rate
velocity_decay = 0.4
# Render the graph in 3D on mobile (opt-in; desktop always renders 3D regardless
# of this flag). On constrained devices Stratum falls back to 2D automatically.
use_3d = false
[tray]
# Show a system tray icon (desktop only)
enabled = true
# Hide the window to tray on close instead of quitting (desktop only)
close_to_tray = true
# Global shortcut that opens Quick Capture
quick_capture_shortcut = "CmdOrCtrl+Shift+Space"
# Where quick-captured blocks are written: "journal" or "inbox"
capture_target = "journal"
# Vault-relative path of the inbox page (when capture_target = "inbox")
inbox_path = "Inbox.md"
[reminders]
# Enable the block-reminder scheduler + notifications
enabled = true
# Play a sound when a reminder becomes due
sound = true
Settings Panel Reference¶
Vault Tab¶
| Setting | Description |
|---|---|
| Vault Path | Absolute path to your vault directory. Click Browse to pick a folder. |
Export¶
The Export subsection (under the Vault Tab / Vault section) provides four export actions, each with an output path, a Browse button, and an Open folder button on success:
| Action | Description | Output |
|---|---|---|
| Export HTML | Static HTML snapshot of the vault | chosen directory (export.html/mirrored files) |
| Export JSON | Structured JSON data | chosen directory (<page>.json files) |
| Export page as PDF | The currently open page (disabled when no page is open) | export-<slug>.pdf in the vault |
| Export vault as ZIP | Portable vault archive | export.zip in the vault |
PDF runtime dependency
PDF export requires a headless Chromium binary on the system. Set the
STRATUM_CHROMIUM environment variable to an explicit path if the
auto-detection does not find one. See
Export → PDF Export for details.
Theme Tab¶
| Setting | Description |
|---|---|
| Dark Mode | Toggle dark/light theme |
| Primary Color | Accent color for buttons, links, active elements |
| Secondary Color | Color for backgrounds, borders, UI chrome |
| Font Size | Base editor font size (12–28px) |
The theme controls are built on the shared settings primitives in
src/components/ui/settings/ so the desktop and mobile theme sections stay
visually and behaviorally consistent across platforms.
AI Tab¶
The AI tab is organized into subsections (provider configuration, voice dictation, text-to-speech, voice-capture button) with consistent styling shared across all settings tabs.
| Setting | Description |
|---|---|
| Provider | LLM backend: Ollama (local), OpenAI, Anthropic, Google AI, Z.AI, Custom |
| API Endpoint | URL for Ollama/custom providers |
| API Key | API key for cloud providers |
| Default Chat Model | Model name for chat/transform operations |
| Fetch Models | Query the provider for available models |
| Model Capabilities | Assign capabilities to each model: chat, embedding, tts |
| Enable RAG | Toggle retrieval-augmented generation |
| RAG Chunk Count | Number of context chunks (1–20) |
| Use gateway and auth from LLM (RAG) | Reuse the main LLM endpoint + key for RAG. No effect on endpoint selection today — embeddings always use the AI configuration. Disabled by default. |
| Use gateway and auth from LLM (STT) | Reuse the main LLM endpoint + key for voice dictation instead of a separate STT endpoint/key. Disabled by default. |
| TTS Endpoint | Override endpoint for text-to-speech (empty = uses AI endpoint) |
| TTS Voice | Voice name used for synthesis (e.g. alloy, onyx) |
| TTS Format | Output audio format (mp3, opus, aac, flac, wav) |
| TTS Speed | Playback speed multiplier (0.25–4.0) |
| Use gateway and auth from LLM (TTS) | Reuse the main LLM endpoint + key for synthesis exclusively; any TTS endpoint/key is ignored. Disabled by default. |
| Test / Play voice | Synthesizes a sample sentence through the configured endpoint and plays it |
See AI Features → Reusing the LLM gateway and auth
for the full behavior of the use_llm_gateway_and_auth settings.
AI settings availability
The AI, Speech & Audio (STT/TTS), and model-capability settings are available on both the desktop and mobile settings screens. On mobile these appear inside the single collapsible AI accordion (provider, STT/TTS and voice capture), mirroring the desktop AI tab one-to-one.
All desktop settings tabs share the same section/toggle-row primitives
(src/components/ui/settings/) and consistent spacing and typography.
Research Tab¶
| Setting | Description |
|---|---|
| SearXNG Endpoint | URL of your SearXNG instance |
| Max Results | Max search results per query (1–10) |
| Research Depth | Search-read cycles per research session (1–5) |
Sync Tab¶
| Setting | Description |
|---|---|
| Sync Mode | Manual, Auto-Commit, Auto-Sync, or Background |
| Remote URL | Git remote (e.g. git@github.com:user/vault.git) |
| Branch | Git branch to work on (default main) |
| SSH Key Path | Path to an SSH private key; leave empty to use the SSH agent |
| Commit Interval | How often (seconds) auto-commit mode stages and commits changes |
| Commit Message Template | Template for generated commit messages (supports {datetime}, {editedfiles}, {newfiles}, {deletedfiles}, {count} placeholders) |
| Pull/Push Interval | How often (seconds) auto-sync mode performs a pull/push cycle |
| Sync Now | Manually trigger a pull, merge, and push |
| Start Scheduler | Start the background auto-commit/auto-sync timer |
| Recent Commits | Expandable history of recent git commits |
| Sync Status | Shows current status, branch, ahead/behind counts, and conflict count |
Sync availability on mobile
Sync configuration is available on mobile under the Sync section of the settings screen — including mode selector, remote/branch, SSH key, commit template with placeholder insertion, sync-now/scheduler controls, and the commit log.
Developer Tab¶
| Setting | Description |
|---|---|
| Reindex All | Re-sync all pages from disk into the SQLite database. Idempotent. Useful after importing notes or recovering from corruption. Refreshes the running page list automatically. |
| Repair DB from disk | First-class stale-database repair: re-syncs every .md whose on-disk modification time is newer than its database record (true drift), plus missing or empty pages, and prunes database entries with no file on disk. Use this when a page or the journal shows stale/empty content. Refreshes the running page list automatically. |
| Normalize All Files | Parse every .md file through the block parser and re-serialize to normalize indentation, block syntax, and frontmatter |
| Reindex Progress | Live progress bar shown during reindex operations |
Tray Tab¶
| Setting | Description |
|---|---|
| Enable tray icon | Show or hide the system tray icon (desktop only) |
| Close to tray | Hide the window to the tray on close instead of quitting (desktop only) |
| Quick capture shortcut | Global keyboard shortcut that opens Quick Capture |
| Quick capture target | Where quick captures are written: journal (today's daily note) or inbox (a configured page) |
| Inbox page path | Vault-relative path of the inbox page — shown only when the target is inbox |
Tray availability
The tray icon and close-to-tray behavior remain desktop-only. On mobile there is no tray icon and closing the app quits it. However, mobile now exposes the tray settings (quick-capture shortcut, capture target, inbox page path) in a collapsible Tray section, so the configuration is reachable on a touch device even though the runtime behavior is desktop-only.
See Quick Capture for usage and troubleshooting.
Notifications Tab¶
The Notifications tab controls block reminders (see the Reminders
guide). These settings are stored in the vault config under [reminders]:
| Setting | Description |
|---|---|
| Enable reminders | Turn the reminder scheduler + notifications on or off. Reminders already set are kept; they just stop notifying until re-enabled. |
| Notification sound | Play a sound when a reminder becomes due. |
Mobile accessibility
On mobile, reindex progress is displayed live under the Developer section. The mobile settings screen mirrors the desktop settings surface; each desktop tab has a corresponding section on the mobile screen. Every mobile settings section (Vault, Theme, AI, Research, Developer, Sync, Tray, Notifications) — one accordion per desktop tab, in the same order — is a collapsible accordion: tap the "Configure …" summary to expand it and "Hide … configuration" to collapse it again. Tray now has a mobile equivalent as well. The Vault accordion is expanded by default; all other accordions start collapsed.
File Structure¶
your-vault/
├── note-a.md
├── note-b.md
├── journals/
│ └── 2026-06-22.md
├── whiteboards/ # Excalidraw data
├── templates/ # Reusable templates
└── .pkm/ # Cache (rebuildable)
├── blocks.db # SQLite block storage
├── search.idx # Tantivy full-text index
└── config.toml # This configuration file
The .pkm/ cache is rebuildable
You can safely delete .pkm/ — Stratum rebuilds it from your .md files.
No data loss.