Skip to main content
Tauri v2’s capability system controls which plugin commands your frontend is allowed to invoke. You declare the permissions your app needs in a capability JSON file, and Tauri enforces them at the IPC boundary — commands not listed in your capability file are rejected before they reach the plugin.

Default permissions: configurate:default

The configurate:default permission set covers all standard configuration operations. Add it to your capability file to enable the full CRUD surface, batch operations, file watching, and import/export:
{
  "permissions": ["configurate:default"]
}
configurate:default grants the following individual permissions:
PermissionCommand
allow-createCreate a new config file
allow-loadLoad an existing config file
allow-saveOverwrite a config file
allow-patchPartially update a config file
allow-deleteDelete a config file
allow-existsCheck whether a config file exists
allow-load-allBatch load multiple configs
allow-save-allBatch save multiple configs
allow-patch-allBatch patch multiple configs
allow-watch-fileWatch a config file for external changes
allow-unwatch-fileStop watching a config file
allow-list-configsList config files in a directory
allow-resetDelete and re-create a config file
allow-export-configExport a config as a formatted string
allow-import-configImport a config from a formatted string

Keyring unlock: configurate:allow-unlock

The allow-unlock permission gates the keyring retrieval command that populates keyring fields when you call .unlock(). It is not included in configurate:default and must be added separately.
If your schema uses keyring() fields and you call .unlock() or loadAll().unlock() without adding configurate:allow-unlock to your capability file, the IPC call will be rejected with a permission error at runtime.
Add it alongside the default set:
{
  "permissions": ["configurate:default", "configurate:allow-unlock"]
}

BaseDirectory restrictions

By default, the plugin only allows config files to be stored in app-scoped base directories. IPC payloads that reference any other directory are rejected before the command executes. The permitted directories are:
  • AppConfig
  • AppData
  • AppLocalData
  • AppCache
  • AppLog
  • Resource
  • Temp
This restriction exists to prevent frontend code from reading or writing config files anywhere on the filesystem.
Using a BaseDirectory value outside this allowlist — such as Home, Desktop, or Document — requires explicit configuration in the Rust plugin builder. Without it, the plugin will reject the request at runtime.

Expanding allowed directories

To permit additional base directories, configure the plugin builder in Rust before registering it with Tauri:
tauri_plugin_configurate::Builder::default()
    .allowed_base_directories([
        tauri::path::BaseDirectory::AppConfig,
        tauri::path::BaseDirectory::Document,
    ])
    .build()
To disable the restriction entirely and allow any base directory:
tauri_plugin_configurate::Builder::default()
    .allow_any_base_directory()
    .build()
Register the configured builder as your plugin:
fn main() {
    tauri::Builder::default()
        .plugin(
            tauri_plugin_configurate::Builder::default()
                .allowed_base_directories([
                    tauri::path::BaseDirectory::AppConfig,
                    tauri::path::BaseDirectory::Document,
                ])
                .build(),
        )
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
Only expand the allowed directories when your app genuinely needs to store configuration outside the default app-scoped paths. Permitting broad filesystem access increases the attack surface if your frontend is ever compromised.