v0.5.0
🚀 0.5.0 Release Notes
Major release focused on removing SQLite, hardening security, and adding automated publishing.
⚠️ Breaking Changes
- Removed the legacy
SqliteProviderand all SQLite backend support. Use a file-based provider (JsonProvider,YmlProvider,TomlProvider, orBinaryProvider) instead. configurate:allow-unlockis no longer included inconfigurate:default. Grantconfigurate:allow-unlockexplicitly when using.unlock()orloadAll().unlock().changeTargetIdnow uses a simplified five-field format (dbName/tableNameremoved).- IPC
baseDiris restricted to app-scoped directories by default (AppConfig,AppData, etc.). UseBuilder::allowed_base_directoriesorallow_any_base_directoryforHome,Desktop, and other paths.
✨ Features
- Added configurable read size limit via
Builder::max_read_bytesortauri.conf.json→plugins.configurate.maxReadBytes(default: 16 MiB). - Added
Builderfor plugin initialization;init()delegates toBuilder::default(). - Added
Builder::allowed_base_directoriesandBuilder::allow_any_base_directoryforBaseDirectoryaccess control. - Added tag-triggered release workflow: tests,
cargo publish, npm Trusted Publishing, and GitHub Release (body from this file). - README aligned with Tauri community plugin conventions (platform table, badges, configuration).
🔒 Security
configurate:allow-unlockis excluded from default permissions; keyring unlock goes only through theunlockcommand —load/load_allrejectwithUnlockcombined with keyring fields.- Keyring read operations reject entries with a non-empty
valuefield;idanddotpathare validated on the Rust side. - Dot paths are capped at 64 segments and array indices at 10,000 to prevent memory exhaustion via IPC payloads.
- Batch commands (
load_all,save_all,patch_all) accept at most 128 entries per request. - Config file reads and import content are capped by
maxReadBytes;read_file_boundedopens the file before reading metadata, compares sizes asu64, and useschecked_addfor read limits. - Binary
encryptionKeyis omitted from IPC payloads for operations that do not read or write encrypted data (includingdeleteandexists). - File writes use
tempfile::persistfor atomic replace on Windows (avoidsremove_file+renameTOCTOU). BaseDirectoryallowlist limits config paths to app-scoped directories unless the builder opts out.- Keyring secrets are always inlined as JSON strings (no implicit JSON parsing).
encryption_keyin normalized payloads is held inZeroizing<String>;configDiff/deepEqualcap nesting depth at 64.
📦 Install
tauri-plugin-configurate = "0.5.0"npm add tauri-plugin-configurate-api@0.5.0