Getting started

Development

Build, lint and test the plugin, the JavaScript package, the example app and this site.
git clone https://github.com/s00d/tauri-plugin-keyring-store
cd tauri-plugin-keyring-store

Rust

cargo fmt --all
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo test --no-default-features

Unit and IPC tests (through tauri::test) run against the in-memory mock store of keyring-core. tests/keyring_live.rs writes, reads and deletes one entry in the real OS store under a unique service name and always cleans up. It skips itself when no store is reachable, unless KEYRING_LIVE_REQUIRED=1 (set in CI).

On a headless Linux machine run the tests inside a D-Bus session with an unlocked keyring:

dbus-run-session -- bash -c 'echo -n pw | gnome-keyring-daemon --unlock --components=secrets; cargo test'

JavaScript

pnpm install
pnpm typecheck
pnpm test    # Vitest, mocks @tauri-apps/api/core
pnpm build   # Vite (ESM + CJS) + d.ts, then publint, attw and an ESM/CJS smoke check

Example app

examples/tauri-app uses the plugin from the repository (desktop, Android and iOS):

cd examples/tauri-app
pnpm install
pnpm tauri dev

CI

GitHub Actions runs the Rust and JavaScript checks on Linux (with gnome-keyring), macOS and Windows, and cross-builds the crate for Android (aarch64-linux-android) and iOS (aarch64-apple-ios).

This site

The site lives in docs/ (Nuxt + Nuxt UI + Nuxt Content). The API reference, command, permission and changelog pages are generated from guest-js/index.ts, src/commands.rs, permissions/ and CHANGELOG.md by docs/scripts/generate.mjs on every build: edit those sources, not the generated pages.

cd docs
pnpm install
pnpm dev        # http://localhost:3000
pnpm generate   # static site in .output/public

The site is deployed to GitHub Pages from main by .github/workflows/docs.yml.