-
Notifications
You must be signed in to change notification settings - Fork 0
systems settings and path access
Douwe de Vries edited this page Jul 1, 2026
·
1 revision
Active contributors: Douwe de Vries
The settings and path access system keeps desktop preferences durable while limiting file operations to paths granted through dialogs or explicit confirmation. It protects the Tauri command shell from reading or writing arbitrary paths without user involvement.
| Path | Role |
|---|---|
src-tauri/src/settings/model.rs |
Defines AppSettings, schema version, defaults, and sanitization. |
src-tauri/src/settings/store.rs |
Loads and saves settings JSON at the platform config path with atomic replacement. |
src-tauri/src/path_access.rs |
Tracks granted input files and output files with canonicalized or normalized paths. |
src-tauri/src/commands/files.rs |
File picker commands, output picker command, and open-output-location command. |
src-tauri/src/commands/settings_commands.rs |
Tauri commands for loading and saving settings. |
frontend/src/hooks/usePersistentSettings.ts |
React hook for loading, optimistic saving, and reconciling settings. |
-
AppSettingsstores theme, overwrite behavior, sample counts, output suffix, remembered directories, and Local AI model preferences. -
SETTINGS_SCHEMA_VERSIONforces loaded settings onto the current schema and handles legacy suffix migration. -
SettingsStoreabstracts the settings file path and returns sanitized settings after save. -
PathAccessstores granted input and output files in process-local sets protected by a mutex. - Input grants use canonical existing files; output grants normalize by canonical parent and reject unsafe existing leaves such as symlinks.
-
usePersistentSettingskeeps optimistic UI settings while guarding against stale async save responses.
sequenceDiagram
participant UI as React settings and file controls
participant Settings as usePersistentSettings
participant Tauri as Tauri commands
participant Store as SettingsStore
participant Access as PathAccess
UI->>Settings: mount
Settings->>Tauri: load_settings
Tauri->>Store: load_settings()
Store-->>Settings: sanitized AppSettings
UI->>Tauri: pick_input_csv(initialDirectory)
Tauri->>Access: grant_input_file(pickedPath)
Access-->>UI: canonical input path
UI->>Settings: update setting
Settings->>Tauri: save_settings(settings)
Tauri->>Store: save_settings()
Store-->>Settings: authoritative AppSettings
The frontend loads settings on mount and applies updates optimistically. Backend sanitization clamps sample counts, normalizes Local AI model names, keeps the current schema version, and supplies defaults when the settings file is missing. File picker commands add grants to PathAccess; commands that receive manual paths either require existing grants or ask for confirmation through shared dialog helpers.
- Frontend workflow state consumes settings for sample counts, preview counts, output suffixes, last directories, overwrite behavior, and Local AI request shape.
-
Tauri command shell manages
PathAccessandSettingsStoreinsrc-tauri/src/main.rs. - Background jobs uses output grants before starting retained anonymization.
- Release tooling validates config and metadata but does not persist runtime settings.
-
frontend/src/defaults.tsmust remain aligned withsrc-tauri/src/settings/model.rs.
- Add a new persisted setting in
src-tauri/src/settings/model.rs,frontend/src/types.ts, andfrontend/src/defaults.ts. - Change settings migration or on-disk behavior in
src-tauri/src/settings/store.rs. - Change file grant rules, symlink rejection, or path normalization in
src-tauri/src/path_access.rs. - Change picker behavior or output-location opening in
src-tauri/src/commands/files.rs. - Change optimistic save reconciliation in
frontend/src/hooks/usePersistentSettings.ts.
src-tauri/src/settings/model.rssrc-tauri/src/settings/store.rssrc-tauri/src/path_access.rssrc-tauri/src/commands/files.rssrc-tauri/src/commands/settings_commands.rsfrontend/src/hooks/usePersistentSettings.ts