{"_id":"@0x330a/tauri-plugin-keystore-api","_rev":"5-30c768c20ad6eec41004d9166fc1b5cb","name":"@0x330a/tauri-plugin-keystore-api","dist-tags":{"latest":"2.1.0-alpha.5"},"versions":{"2.1.0-alpha.1":{"name":"@0x330a/tauri-plugin-keystore-api","version":"2.1.0-alpha.1","author":{"name":"0x330a"},"license":"Apache-2.0","_id":"@0x330a/tauri-plugin-keystore-api@2.1.0-alpha.1","maintainers":[{"name":"0x330a","email":"0x330a@gmail.com"}],"homepage":"https://github.com/0x330a-public/tauri-plugin-keystore#readme","bugs":{"url":"https://github.com/0x330a-public/tauri-plugin-keystore/issues"},"dist":{"shasum":"e36fee120a8cabd3f62e67268d9a562a2d856f69","tarball":"https://registry.npmjs.org/@0x330a/tauri-plugin-keystore-api/-/tauri-plugin-keystore-api-2.1.0-alpha.1.tgz","fileCount":6,"integrity":"sha512-qRrZYjKAvIt1q9jpTtFL3v0ir61t/HxLZ1V4dd+AHY5SM2cIOi5gO0xXjI+XmzIUF+tsyaEIdDY4tYNEezarhw==","signatures":[{"sig":"MEUCIDRrRH7zm+Pldyj5r99BipwR4vcXwoxVAbZGMMfmjJv9AiEArEEzcTma4YEIsnGW/tJJb/twHrAFWq2dS7KBlPt5/ag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21818},"main":"./dist-js/index.cjs","type":"module","types":"./dist-js/index.d.ts","module":"./dist-js/index.js","exports":{"types":"./dist-js/index.d.ts","import":"./dist-js/index.js","require":"./dist-js/index.cjs"},"gitHead":"581ef7795deca33e817e284a03bfa91e9635c424","scripts":{"build":"rollup -c","pretest":"pnpm build","prepublishOnly":"pnpm build"},"_npmUser":{"name":"0x330a","email":"0x330a@gmail.com"},"repository":{"url":"git+https://github.com/0x330a-public/tauri-plugin-keystore.git","type":"git"},"_npmVersion":"10.9.2","description":"Interact with the device-native key storage (Android Keystore, iOS Keychain). perform ecdh operations for generating symmetric keys","directories":{},"_nodeVersion":"23.5.0","dependencies":{"@noble/curves":"^1.9.0","@tauri-apps/api":">=2.0.0-beta.6"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.6.2","rollup":"^4.9.6","typescript":"^5.3.3","@rollup/plugin-typescript":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/tauri-plugin-keystore-api_2.1.0-alpha.1_1748493558200_0.7550481468644581","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-alpha.2":{"name":"@0x330a/tauri-plugin-keystore-api","version":"2.1.0-alpha.2","author":{"name":"0x330a"},"license":"Apache-2.0","_id":"@0x330a/tauri-plugin-keystore-api@2.1.0-alpha.2","maintainers":[{"name":"0x330a","email":"0x330a@gmail.com"}],"homepage":"https://github.com/0x330a-public/tauri-plugin-keystore#readme","bugs":{"url":"https://github.com/0x330a-public/tauri-plugin-keystore/issues"},"dist":{"shasum":"e6fb5d9c8937cb904b6cc8ef5ba9bd99f13af0e2","tarball":"https://registry.npmjs.org/@0x330a/tauri-plugin-keystore-api/-/tauri-plugin-keystore-api-2.1.0-alpha.2.tgz","fileCount":6,"integrity":"sha512-bcdl2MKey244177EXZHQmCFgKuecmA6qh/EKNq5h/Jn6i6mfIaBYfnJ3ISenikVowTNIg6WQRcDJh2Uuji5mIw==","signatures":[{"sig":"MEUCIQCDnO+Uyw2WAuvdBIUfO0PhQTzwQ9iEJ18TW8MHpyaqPAIgcaf9D7awwhPE0lFQh/jB5d0Dh3Wy2fTYmEsbc4rai98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22258},"main":"./dist-js/index.cjs","type":"module","types":"./dist-js/index.d.ts","module":"./dist-js/index.js","exports":{"types":"./dist-js/index.d.ts","import":"./dist-js/index.js","require":"./dist-js/index.cjs"},"gitHead":"576a02193bd45fb0439efb55f7ba20842ce8eedc","scripts":{"build":"rollup -c","pretest":"pnpm build","prepublishOnly":"pnpm build"},"_npmUser":{"name":"0x330a","email":"0x330a@gmail.com"},"repository":{"url":"git+https://github.com/0x330a-public/tauri-plugin-keystore.git","type":"git"},"_npmVersion":"10.9.0","description":"Interact with the device-native key storage (Android Keystore, iOS Keychain). perform ecdh operations for generating symmetric keys","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@noble/curves":"^1.9.0","@tauri-apps/api":">=2.0.0-beta.6"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.6.2","rollup":"^4.9.6","typescript":"^5.3.3","@rollup/plugin-typescript":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/tauri-plugin-keystore-api_2.1.0-alpha.2_1753850417091_0.7488011584137255","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-alpha.3":{"name":"@0x330a/tauri-plugin-keystore-api","version":"2.1.0-alpha.3","author":"0x330a","license":"Apache-2.0","_id":"@0x330a/tauri-plugin-keystore-api@2.1.0-alpha.3","maintainers":[{"name":"0x330a","email":"0x330a@gmail.com"}],"dist":{"shasum":"cc7fa819c45c7c41bef71a498dc5f76f229e30dc","tarball":"https://registry.npmjs.org/@0x330a/tauri-plugin-keystore-api/-/tauri-plugin-keystore-api-2.1.0-alpha.3.tgz","fileCount":6,"integrity":"sha512-vwRGpjT77Bp9D52dB9AjHCaXUpSxj38up8EX75IAN/Sf6uVTQpoxneHNQV17ISaGOYXD8av/azruNV8bjkhAhQ==","signatures":[{"sig":"MEQCIHidekDqRFRuWglPovWwrTpO7uKDihgj+fA7we7r7q6/AiBfT+VvLebDI1h3l4TNCdOMG/ZfzCZrG7Dyhw//4OSURQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22261},"main":"./dist-js/index.cjs","type":"module","types":"./dist-js/index.d.ts","module":"./dist-js/index.js","shasum":"cc7fa819c45c7c41bef71a498dc5f76f229e30dc","exports":{"types":"./dist-js/index.d.ts","import":"./dist-js/index.js","require":"./dist-js/index.cjs"},"scripts":{"build":"rollup -c","pretest":"pnpm build","prepublishOnly":"pnpm build"},"_npmUser":{"name":"0x330a","email":"0x330a@gmail.com"},"_integrity":"sha512-vwRGpjT77Bp9D52dB9AjHCaXUpSxj38up8EX75IAN/Sf6uVTQpoxneHNQV17ISaGOYXD8av/azruNV8bjkhAhQ==","repository":{"url":"git+https://github.com/0x330a-public/tauri-plugin-keystore.git","type":"git"},"_npmVersion":"10.8.3","description":"Interact with the device-native key storage (Android Keystore, iOS Keychain). perform ecdh operations for generating symmetric keys","directories":{},"_nodeVersion":"22.6.0","dependencies":{"@noble/curves":"^1.9.0","@tauri-apps/api":">=2.0.0-beta.6"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.6.2","rollup":"^4.9.6","typescript":"^5.3.3","@rollup/plugin-typescript":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/tauri-plugin-keystore-api_2.1.0-alpha.3_1754024519363_0.950047508174729","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-alpha.4":{"name":"@0x330a/tauri-plugin-keystore-api","version":"2.1.0-alpha.4","author":{"name":"0x330a"},"license":"Apache-2.0","_id":"@0x330a/tauri-plugin-keystore-api@2.1.0-alpha.4","maintainers":[{"name":"0x330a","email":"0x330a@gmail.com"}],"homepage":"https://github.com/0x330a-public/tauri-plugin-keystore#readme","bugs":{"url":"https://github.com/0x330a-public/tauri-plugin-keystore/issues"},"dist":{"shasum":"e9fe65ff779bb13f6ab439a0ba1310fd3e2cd3fa","tarball":"https://registry.npmjs.org/@0x330a/tauri-plugin-keystore-api/-/tauri-plugin-keystore-api-2.1.0-alpha.4.tgz","fileCount":6,"integrity":"sha512-oquuD4hjHN6ksraQLivBl6BhQDCUp21srIo5Gx65bFHMP/uZBe+etSxbnn5T/Bv6FD6G+JAArxA3nEopZ0SLFQ==","signatures":[{"sig":"MEQCIBe2PInWlIdtuAWr9S0IrTp+pRuh+3lRi4LUPkhamJLGAiAMF/j0hen/osEwFIaXEAvlIiqEchn6wjj3AidQslp6CA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22261},"main":"./dist-js/index.cjs","type":"module","types":"./dist-js/index.d.ts","module":"./dist-js/index.js","exports":{"types":"./dist-js/index.d.ts","import":"./dist-js/index.js","require":"./dist-js/index.cjs"},"gitHead":"defa57c034e5a8c0fc235835a98ea0e092e1a22b","scripts":{"build":"rollup -c","pretest":"pnpm build","prepublishOnly":"pnpm build"},"_npmUser":{"name":"0x330a","email":"0x330a@gmail.com"},"repository":{"url":"git+https://github.com/0x330a-public/tauri-plugin-keystore.git","type":"git"},"_npmVersion":"10.9.0","description":"Interact with the device-native key storage (Android Keystore, iOS Keychain). perform ecdh operations for generating symmetric keys","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@noble/curves":"^1.9.0","@tauri-apps/api":">=2.0.0-beta.6"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.6.2","rollup":"^4.9.6","typescript":"^5.3.3","@rollup/plugin-typescript":"^11.1.6"},"_npmOperationalInternal":{"tmp":"tmp/tauri-plugin-keystore-api_2.1.0-alpha.4_1754026378284_0.8165044355803168","host":"s3://npm-registry-packages-npm-production"}},"2.1.0-alpha.5":{"name":"@0x330a/tauri-plugin-keystore-api","version":"2.1.0-alpha.5","author":{"name":"0x330a"},"description":"Interact with the device-native key storage (Android Keystore, iOS Keychain). perform ecdh operations for generating symmetric keys","type":"module","types":"./dist-js/index.d.ts","main":"./dist-js/index.cjs","module":"./dist-js/index.js","exports":{"types":"./dist-js/index.d.ts","import":"./dist-js/index.js","require":"./dist-js/index.cjs"},"scripts":{"build":"rollup -c","prepublishOnly":"pnpm build","pretest":"pnpm build"},"dependencies":{"@noble/curves":"^1.9.0","@tauri-apps/api":">=2.0.0-beta.6"},"devDependencies":{"@rollup/plugin-typescript":"^11.1.6","rollup":"^4.9.6","tslib":"^2.6.2","typescript":"^5.3.3"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/0x330a-public/tauri-plugin-keystore.git"},"_id":"@0x330a/tauri-plugin-keystore-api@2.1.0-alpha.5","gitHead":"defa57c034e5a8c0fc235835a98ea0e092e1a22b","bugs":{"url":"https://github.com/0x330a-public/tauri-plugin-keystore/issues"},"homepage":"https://github.com/0x330a-public/tauri-plugin-keystore#readme","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-6Ia3HVCL7xBs1YdAR0qN0FT5EQXLEVRxnc2BuT638IuHO9Y/rK317zrFS1yPWdpZJD5ZpYnZ8wpeGuIzQsJOUg==","shasum":"82a9075f4c12b3ac17a0abe65d16d1c8ab35aaa4","tarball":"https://registry.npmjs.org/@0x330a/tauri-plugin-keystore-api/-/tauri-plugin-keystore-api-2.1.0-alpha.5.tgz","fileCount":6,"unpackedSize":22261,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDl8EPrvcmeQb8axUmnHJmVRgHpugEdiqIgMqzsAB9V+wIgBbS/fTpIqFdlG1cLu9XrmYry4Z+Uyprkt7VJWOrnfDM="}]},"_npmUser":{"name":"0x330a","email":"0x330a@gmail.com"},"directories":{},"maintainers":[{"name":"0x330a","email":"0x330a@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tauri-plugin-keystore-api_2.1.0-alpha.5_1754026846518_0.7015941578564886"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-29T04:39:18.112Z","modified":"2025-08-01T05:40:46.880Z","2.1.0-alpha.1":"2025-05-29T04:39:18.492Z","2.1.0-alpha.2":"2025-07-30T04:40:17.273Z","2.1.0-alpha.3":"2025-08-01T05:01:59.532Z","2.1.0-alpha.4":"2025-08-01T05:32:58.486Z","2.1.0-alpha.5":"2025-08-01T05:40:46.697Z"},"bugs":{"url":"https://github.com/0x330a-public/tauri-plugin-keystore/issues"},"author":{"name":"0x330a"},"license":"Apache-2.0","homepage":"https://github.com/0x330a-public/tauri-plugin-keystore#readme","repository":{"type":"git","url":"git+https://github.com/0x330a-public/tauri-plugin-keystore.git"},"description":"Interact with the device-native key storage (Android Keystore, iOS Keychain). perform ecdh operations for generating symmetric keys","maintainers":[{"name":"0x330a","email":"0x330a@gmail.com"}],"readme":"# Tauri Plugin Keystore\n\n[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)\n[![Crates.io Version](https://img.shields.io/crates/v/tauri-plugin-keystore)](https://crates.io/crates/tauri-plugin-keystore)\n[![NPM Version](https://img.shields.io/npm/v/%40impierce%2Ftauri-plugin-keystore)](https://www.npmjs.com/package/@impierce/tauri-plugin-keystore)\n\n---\n\nInteract with the device-native key storage (Android Keystore, iOS Keychain).\n\n> [!NOTE]  \n> This plugin is scoped to interact with the device-specific keystore. It assumes that biometrics are set up on the user's device and performs no preflight check before trying to interact with the keystore. You should use the official [biometric plugin](https://github.com/tauri-apps/plugins-workspace/tree/v2/plugins/biometric) to `checkStatus` before, if you want to make sure (see [Usage](#usage) below).\n\n| Platform | Supported |\n| -------- | :-------: |\n| Linux    |    ❌     |\n| Windows  |    ❌     |\n| macOS    |    ❌     |\n| Android  |    ✅     |\n| iOS      |    ✅     |\n\n## Installation\n\nAdd the following to your `src-tauri/Cargo.toml`:\n\n```toml\n[dependencies]\ntauri-plugin-keystore = \"2\"\n```\n\nThen install the JS guest bindings:\n\n```shell\npnpm add @impierce/tauri-plugin-keystore\n```\n\n_This also works for `npm` and `yarn`._\n\n## Requirements\n\n- This plugin requires a **Rust version of 1.77.2 or higher**.\n- The minimum supported Tauri version is **2.0.0**.\n- Android 9 (**API level 28**) and higher are supported.\n\n## Usage\n\nFirst you need to register the plugin with your Tauri app:\n\n`src-tauri/src/lib.rs`\n\n```rust\nfn main() {\n    tauri::Builder::default()\n        .plugin(tauri_plugin_keystore::init())\n        .run(tauri::generate_context!())\n        .expect(\"error while running tauri application\");\n}\n```\n\nAfterwards all the plugin's APIs are available through the JavaScript guest bindings:\n\n```typescript\nimport { remove, retrieve, store } from \"@impierce/tauri-plugin-keystore\";\n\nawait store(\"secr3tPa$$w0rd\");\nconst password = await retrieve();\nawait remove();\n```\n\nThe provided functions will fail if the device has no biometrics set up, so you should check the biometric status with the official `tauri-plugin-biometric` before using them:\n\n```typescript\nimport { checkStatus, type Status } from \"@tauri-apps/plugin-biometric\";\n\nconst biometricsStatus: Status = await checkStatus();\nassert(biometricsStatus.biometryType !== BiometryType.None);\n```\n\n## Release strategy\n\nThis plugin is semantically versioned, but there are some caveats:\n\n- Versioning starts at `v2.0.0` to match the Tauri version it supports _(common practice for Tauri plugins)_.\n- Breaking changes should be avoided as they would make the plugin go out-of-sync with the Tauri major version.\n\n#### Conflicting release approaches\n\nThe next version is determined by `semantic-release` which does [not recommend making commits during the release process](https://semantic-release.gitbook.io/semantic-release/support/faq#making-commits-during-the-release-process-adds-significant-complexity).\nWhen publishing a new npm package to **npmjs.com** this is circumvented by `semantic-release` by pushing the version in the release metadata, so the `version` field in `package.json` is ignored.\nHowever, **crates.io** uses the `version` field from `Cargo.toml` to determine the version. There seems to be no easy way to replace the version number during the publish to **crates.io**.\n\n#### Solution\n\nThis repository provides a workaround for this issue by using a **semi-automated** release process which decouples building a new release from pushing it to the package registries:\n\n1. Run the **release --dry-run** Action to let `semantic-release` determine the next version. Take note of the version it produces.\n\n2. Manually update the `version` fields in the `Cargo.toml` and `package.json` files (omit the `\"v\"`, so just `2.1.0` instead of `v2.1.0`).\n\n3. Commit the changes using the following commit message _(replace the version)_:\n\n```\nbuild: release version v1.1.0-alpha.1\n```\n\n4. Open a pull request with the same title as the commit message.\n\n5. After the PR is merged, the actual **release** Action will run which creates a new release on GitHub and adds a git tag.\n\n6. The **publish** Action then publishes the packages to npm and crates.io.\n\n<!-- TODO: possibly one of the following can solve this problem:\n - `semantic-release-cargo`: https://crates.io/crates/semantic-release-cargo\n - `release-please-action`: https://github.com/googleapis/release-please-action\n -->\n","readmeFilename":"README.md"}