Skip to main content
tauri-plugin-configurate consists of two packages: a Rust crate that runs in the Tauri backend, and a TypeScript package that you use in your frontend. Both must be installed and the Rust plugin must be registered before you can use any configuration APIs.
The fastest path is the Tauri CLI method — it installs both packages and wires up the Rust side automatically. Use the manual steps if you prefer explicit control over each dependency.

Using the Tauri CLI

Run one command to add both the Rust crate and the npm package at once:
npm run tauri add configurate
After the command completes, skip to Register the plugin to finish setup.

Manual installation

1

Add the Rust crate

Open src-tauri/Cargo.toml and add the crate to your dependencies. Pin to an exact version in production to avoid unexpected breaking changes (the plugin is pre-1.0 software).
src-tauri/Cargo.toml
[dependencies]
tauri-plugin-configurate = "0.4.1"
Run cargo search tauri-plugin-configurate to find the latest published version.
2

Install the TypeScript package

Add tauri-plugin-configurate-api to your frontend project:
npm install tauri-plugin-configurate-api
The package requires @tauri-apps/api v2 as a peer dependency, which is already present in any Tauri v2 project.
3

Register the plugin in lib.rs

Open src-tauri/src/lib.rs and call tauri_plugin_configurate::init() in the Tauri builder chain:
src-tauri/src/lib.rs
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_configurate::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
The plugin registers all IPC command handlers and sets up the file watcher, keyring access, and backup registry automatically.
4

Grant permissions

Tauri v2 requires you to explicitly grant permissions to any plugin command. Add the configurate:default permission set to your capability file:
src-tauri/capabilities/default.json
{
  "permissions": ["configurate:default"]
}
configurate:default expands to the following individual permissions:
PermissionOperation
configurate:allow-createCreate a new config file
configurate:allow-loadRead a config file
configurate:allow-saveWrite or update a config file
configurate:allow-patchPartially update a config file
configurate:allow-deleteDelete a config file
configurate:allow-existsCheck whether a config exists
configurate:allow-load-allBatch load
configurate:allow-save-allBatch save
configurate:allow-patch-allBatch patch
configurate:allow-unlockInline keyring decryption
configurate:allow-watch-fileWatch a config file for external changes
configurate:allow-unwatch-fileStop watching a config file
configurate:allow-list-configsList config files in the storage directory
configurate:allow-resetReset a config to default values
configurate:allow-export-configExport config data to a string
configurate:allow-import-configImport config data from a string
If your app only needs a subset of operations, you can list individual permissions instead of configurate:default. See Permissions overview for guidance.

Verify the installation

After completing setup, add a quick smoke test to confirm the plugin is wired up correctly. If the Rust plugin is not registered or permissions are missing, the invoke call will throw an error with a descriptive message.
import { Configurate, JsonProvider, BaseDirectory, defineConfig } from "tauri-plugin-configurate-api";

const schema = defineConfig({ ready: Boolean });

const probe = new Configurate({
  schema,
  fileName: "probe.json",
  baseDir: BaseDirectory.AppConfig,
  provider: JsonProvider(),
});

// Should resolve without throwing if the plugin is installed correctly
const exists = await probe.exists();
console.log("Plugin ready:", exists !== undefined);

Runtime requirements

RequirementMinimum version
Tauri2.10.3
Rust1.77.2
@tauri-apps/api2.0.0
The plugin targets desktop platforms (Windows, macOS, Linux). Mobile targets are not supported.

Next steps

Quickstart

Write and read your first typed config with a copy-paste example

Core concepts: Providers

Choose between JSON, YAML, TOML, Binary, and SQLite backends

Build docs developers (and LLMs) love