Skip to content

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.