[{"data":1,"prerenderedAt":484},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started\u002Fdevelopment":116,"\u002Fgetting-started\u002Fdevelopment-surround":479},[4,27,61,82,112],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":23,"path":24,"stem":25},"Development","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F4.development",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Guides","i-lucide-book-open","\u002Fguides","2.guides",[33,37,41,45,49,53,57],{"title":34,"path":35,"stem":36},"Sessions and store","\u002Fguides\u002Fsessions","2.guides\u002F1.sessions",{"title":38,"path":39,"stem":40},"Vault and procedures","\u002Fguides\u002Fvault","2.guides\u002F2.vault",{"title":42,"path":43,"stem":44},"Password accounts","\u002Fguides\u002Fpasswords","2.guides\u002F3.passwords",{"title":46,"path":47,"stem":48},"Rust backend","\u002Fguides\u002Frust","2.guides\u002F4.rust",{"title":50,"path":51,"stem":52},"Security notes","\u002Fguides\u002Fsecurity","2.guides\u002F5.security",{"title":54,"path":55,"stem":56},"Permissions","\u002Fguides\u002Fpermissions","2.guides\u002F6.permissions",{"title":58,"path":59,"stem":60},"Coming from Stronghold","\u002Fguides\u002Fstronghold","2.guides\u002F7.stronghold",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":26},"API reference","i-lucide-file-code","\u002Freference","3.reference",[67,71,75,79],{"title":68,"path":69,"stem":70},"JavaScript API","\u002Freference\u002Fjavascript-api","3.reference\u002F1.javascript-api",{"title":72,"path":73,"stem":74},"Types","\u002Freference\u002Ftypes","3.reference\u002F2.types",{"title":76,"path":77,"stem":78},"Tauri commands","\u002Freference\u002Fcommands","3.reference\u002F3.commands",{"title":54,"path":80,"stem":81},"\u002Freference\u002Fpermissions","3.reference\u002F4.permissions",{"title":83,"icon":84,"path":85,"stem":86,"children":87,"page":26},"Platforms","i-lucide-monitor-smartphone","\u002Fplatforms","4.platforms",[88,92,96,100,104,108],{"title":89,"path":90,"stem":91},"Overview","\u002Fplatforms\u002Foverview","4.platforms\u002F1.overview",{"title":93,"path":94,"stem":95},"macOS","\u002Fplatforms\u002Fmacos","4.platforms\u002F2.macos",{"title":97,"path":98,"stem":99},"Windows","\u002Fplatforms\u002Fwindows","4.platforms\u002F3.windows",{"title":101,"path":102,"stem":103},"Linux","\u002Fplatforms\u002Flinux","4.platforms\u002F4.linux",{"title":105,"path":106,"stem":107},"Android","\u002Fplatforms\u002Fandroid","4.platforms\u002F5.android",{"title":109,"path":110,"stem":111},"iOS","\u002Fplatforms\u002Fios","4.platforms\u002F6.ios",{"title":113,"path":114,"stem":115},"Changelog","\u002Fchangelog","9.changelog",{"id":117,"title":23,"body":118,"description":472,"extension":473,"generated":26,"links":474,"meta":475,"navigation":476,"path":24,"seo":477,"stem":25,"__hash__":478},"docs\u002F1.getting-started\u002F4.development.md",{"type":119,"value":120,"toc":465},"minimark",[121,157,162,219,244,247,275,279,319,323,335,363,367,378,382,412,450,461],[122,123,128],"pre",{"className":124,"code":125,"language":126,"meta":127,"style":127},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fs00d\u002Ftauri-plugin-keyring-store\ncd tauri-plugin-keyring-store\n","bash","",[129,130,131,147],"code",{"__ignoreMap":127},[132,133,136,140,144],"span",{"class":134,"line":135},"line",1,[132,137,139],{"class":138},"sBMFI","git",[132,141,143],{"class":142},"sfazB"," clone",[132,145,146],{"class":142}," https:\u002F\u002Fgithub.com\u002Fs00d\u002Ftauri-plugin-keyring-store\n",[132,148,150,154],{"class":134,"line":149},2,[132,151,153],{"class":152},"s2Zo4","cd",[132,155,156],{"class":142}," tauri-plugin-keyring-store\n",[158,159,161],"h2",{"id":160},"rust","Rust",[122,163,165],{"className":124,"code":164,"language":126,"meta":127,"style":127},"cargo fmt --all\ncargo clippy --all-targets --all-features -- -D warnings\ncargo test\ncargo test --no-default-features\n",[129,166,167,178,200,208],{"__ignoreMap":127},[132,168,169,172,175],{"class":134,"line":135},[132,170,171],{"class":138},"cargo",[132,173,174],{"class":142}," fmt",[132,176,177],{"class":142}," --all\n",[132,179,180,182,185,188,191,194,197],{"class":134,"line":149},[132,181,171],{"class":138},[132,183,184],{"class":142}," clippy",[132,186,187],{"class":142}," --all-targets",[132,189,190],{"class":142}," --all-features",[132,192,193],{"class":142}," --",[132,195,196],{"class":142}," -D",[132,198,199],{"class":142}," warnings\n",[132,201,203,205],{"class":134,"line":202},3,[132,204,171],{"class":138},[132,206,207],{"class":142}," test\n",[132,209,211,213,216],{"class":134,"line":210},4,[132,212,171],{"class":138},[132,214,215],{"class":142}," test",[132,217,218],{"class":142}," --no-default-features\n",[220,221,222,223,226,227,230,231,234,235,239,240,243],"p",{},"Unit and IPC tests (through ",[129,224,225],{},"tauri::test",") run against the in-memory mock store of ",[129,228,229],{},"keyring-core",".\n",[129,232,233],{},"tests\u002Fkeyring_live.rs"," writes, reads and deletes one entry in the ",[236,237,238],"strong",{},"real"," OS store under a unique\nservice name and always cleans up. It skips itself when no store is reachable, unless\n",[129,241,242],{},"KEYRING_LIVE_REQUIRED=1"," (set in CI).",[220,245,246],{},"On a headless Linux machine run the tests inside a D-Bus session with an unlocked keyring:",[122,248,250],{"className":124,"code":249,"language":126,"meta":127,"style":127},"dbus-run-session -- bash -c 'echo -n pw | gnome-keyring-daemon --unlock --components=secrets; cargo test'\n",[129,251,252],{"__ignoreMap":127},[132,253,254,257,259,262,265,269,272],{"class":134,"line":135},[132,255,256],{"class":138},"dbus-run-session",[132,258,193],{"class":142},[132,260,261],{"class":142}," bash",[132,263,264],{"class":142}," -c",[132,266,268],{"class":267},"sMK4o"," '",[132,270,271],{"class":142},"echo -n pw | gnome-keyring-daemon --unlock --components=secrets; cargo test",[132,273,274],{"class":267},"'\n",[158,276,278],{"id":277},"javascript","JavaScript",[122,280,282],{"className":124,"code":281,"language":126,"meta":127,"style":127},"pnpm install\npnpm typecheck\npnpm test    # Vitest, mocks @tauri-apps\u002Fapi\u002Fcore\npnpm build   # Vite (ESM + CJS) + d.ts, then publint, attw and an ESM\u002FCJS smoke check\n",[129,283,284,292,299,309],{"__ignoreMap":127},[132,285,286,289],{"class":134,"line":135},[132,287,288],{"class":138},"pnpm",[132,290,291],{"class":142}," install\n",[132,293,294,296],{"class":134,"line":149},[132,295,288],{"class":138},[132,297,298],{"class":142}," typecheck\n",[132,300,301,303,305],{"class":134,"line":202},[132,302,288],{"class":138},[132,304,215],{"class":142},[132,306,308],{"class":307},"sHwdD","    # Vitest, mocks @tauri-apps\u002Fapi\u002Fcore\n",[132,310,311,313,316],{"class":134,"line":210},[132,312,288],{"class":138},[132,314,315],{"class":142}," build",[132,317,318],{"class":307},"   # Vite (ESM + CJS) + d.ts, then publint, attw and an ESM\u002FCJS smoke check\n",[158,320,322],{"id":321},"example-app","Example app",[220,324,325,334],{},[326,327,331],"a",{"href":328,"rel":329},"https:\u002F\u002Fgithub.com\u002Fs00d\u002Ftauri-plugin-keyring-store\u002Ftree\u002Fmain\u002Fexamples\u002Ftauri-app",[330],"nofollow",[129,332,333],{},"examples\u002Ftauri-app","\nuses the plugin from the repository (desktop, Android and iOS):",[122,336,338],{"className":124,"code":337,"language":126,"meta":127,"style":127},"cd examples\u002Ftauri-app\npnpm install\npnpm tauri dev\n",[129,339,340,347,353],{"__ignoreMap":127},[132,341,342,344],{"class":134,"line":135},[132,343,153],{"class":152},[132,345,346],{"class":142}," examples\u002Ftauri-app\n",[132,348,349,351],{"class":134,"line":149},[132,350,288],{"class":138},[132,352,291],{"class":142},[132,354,355,357,360],{"class":134,"line":202},[132,356,288],{"class":138},[132,358,359],{"class":142}," tauri",[132,361,362],{"class":142}," dev\n",[158,364,366],{"id":365},"ci","CI",[220,368,369,370,373,374,377],{},"GitHub Actions runs the Rust and JavaScript checks on Linux (with gnome-keyring), macOS and Windows, and\ncross-builds the crate for Android (",[129,371,372],{},"aarch64-linux-android",") and iOS (",[129,375,376],{},"aarch64-apple-ios",").",[158,379,381],{"id":380},"this-site","This site",[220,383,384,385,392,393,396,397,396,400,403,404,407,408,411],{},"The site lives in ",[326,386,389],{"href":387,"rel":388},"https:\u002F\u002Fgithub.com\u002Fs00d\u002Ftauri-plugin-keyring-store\u002Ftree\u002Fmain\u002Fdocs",[330],[129,390,391],{},"docs\u002F","\n(Nuxt + Nuxt UI + Nuxt Content). The API reference, command, permission and changelog pages are\ngenerated from ",[129,394,395],{},"guest-js\u002Findex.ts",", ",[129,398,399],{},"src\u002Fcommands.rs",[129,401,402],{},"permissions\u002F"," and ",[129,405,406],{},"CHANGELOG.md"," by\n",[129,409,410],{},"docs\u002Fscripts\u002Fgenerate.mjs"," on every build: edit those sources, not the generated pages.",[122,413,415],{"className":124,"code":414,"language":126,"meta":127,"style":127},"cd docs\npnpm install\npnpm dev        # http:\u002F\u002Flocalhost:3000\npnpm generate   # static site in .output\u002Fpublic\n",[129,416,417,424,430,440],{"__ignoreMap":127},[132,418,419,421],{"class":134,"line":135},[132,420,153],{"class":152},[132,422,423],{"class":142}," docs\n",[132,425,426,428],{"class":134,"line":149},[132,427,288],{"class":138},[132,429,291],{"class":142},[132,431,432,434,437],{"class":134,"line":202},[132,433,288],{"class":138},[132,435,436],{"class":142}," dev",[132,438,439],{"class":307},"        # http:\u002F\u002Flocalhost:3000\n",[132,441,442,444,447],{"class":134,"line":210},[132,443,288],{"class":138},[132,445,446],{"class":142}," generate",[132,448,449],{"class":307},"   # static site in .output\u002Fpublic\n",[220,451,452,453,456,457,460],{},"The site is deployed to GitHub Pages from ",[129,454,455],{},"main"," by ",[129,458,459],{},".github\u002Fworkflows\u002Fdocs.yml",".",[462,463,464],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":127,"searchDepth":149,"depth":202,"links":466},[467,468,469,470,471],{"id":160,"depth":149,"text":161},{"id":277,"depth":149,"text":278},{"id":321,"depth":149,"text":322},{"id":365,"depth":149,"text":366},{"id":380,"depth":149,"text":381},"Build, lint and test the plugin, the JavaScript package, the example app and this site.","md",null,{},true,{"title":23,"description":472},"ERJbrEL25Q0s9ofNliAZhc2q7a4nYI81TEx_QKGUnkM",[480,482],{"title":19,"path":20,"stem":21,"description":481,"children":-1},"Store a token, use a session store and keep a wallet key in the vault, from JavaScript and from Rust.",{"title":34,"path":35,"stem":36,"description":483,"children":-1},"KeyringSession, clients and the key-value byte store, and how their names map to OS keyring entries.",1794215489437]