[{"data":1,"prerenderedAt":439},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fstronghold":116,"\u002Fguides\u002Fstronghold-surround":434},[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":58,"body":118,"description":427,"extension":428,"generated":26,"links":429,"meta":430,"navigation":431,"path":59,"seo":432,"stem":60,"__hash__":433},"docs\u002F2.guides\u002F7.stronghold.md",{"type":119,"value":120,"toc":423},"minimark",[121,136,243,304,309,382,388,392,395,416,419],[122,123,124,125,135],"p",{},"The JavaScript API has the same shape as\n",[126,127,131],"a",{"href":128,"rel":129},"https:\u002F\u002Fgithub.com\u002Ftauri-apps\u002Fplugins-workspace\u002Ftree\u002Fv2\u002Fplugins\u002Fstronghold",[130],"nofollow",[132,133,134],"code",{},"tauri-plugin-stronghold",".\nMost code changes only its imports and class names.",[137,138,139,152],"table",{},[140,141,142],"thead",{},[143,144,145,149],"tr",{},[146,147,148],"th",{},"Stronghold",[146,150,151],{},"This plugin",[153,154,155,168,180,192,204,218],"tbody",{},[143,156,157,163],{},[158,159,160],"td",{},[132,161,162],{},"Stronghold.load(path, password)",[158,164,165],{},[132,166,167],{},"KeyringSession.load(path, password)",[143,169,170,175],{},[158,171,172],{},[132,173,174],{},"Client",[158,176,177],{},[132,178,179],{},"KeyringClient",[143,181,182,187],{},[158,183,184],{},[132,185,186],{},"Store",[158,188,189],{},[132,190,191],{},"KeyringStoreView",[143,193,194,199],{},[158,195,196],{},[132,197,198],{},"Vault",[158,200,201],{},[132,202,203],{},"KeyringVault",[143,205,206,215],{},[158,207,208,211,212],{},[132,209,210],{},"Location.generic"," \u002F ",[132,213,214],{},"Location.counter",[158,216,217],{},"the same",[143,219,220,241],{},[158,221,222,225,226,225,229,225,232,225,235,225,238],{},[132,223,224],{},"vault.generateSLIP10Seed",", ",[132,227,228],{},"deriveSLIP10",[132,230,231],{},"recoverBIP39",[132,233,234],{},"generateBIP39",[132,236,237],{},"getEd25519PublicKey",[132,239,240],{},"signEd25519",[158,242,217],{},[244,245,250],"pre",{"className":246,"code":247,"language":248,"meta":249,"style":249},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-import { Stronghold } from \"@tauri-apps\u002Fplugin-stronghold\";\n-const stronghold = await Stronghold.load(vaultPath, password);\n+import { KeyringSession } from \"tauri-plugin-keyring-store-api\";\n+const stronghold = await KeyringSession.load(\"\u002Fwallet\u002Fmain\", \"\");\n const client = await stronghold.loadClient(\"main\");\n const store = client.getStore();\n","diff","",[132,251,252,265,273,283,291,298],{"__ignoreMap":249},[253,254,257,261],"span",{"class":255,"line":256},"line",1,[253,258,260],{"class":259},"sMK4o","-",[253,262,264],{"class":263},"swJcz","import { Stronghold } from \"@tauri-apps\u002Fplugin-stronghold\";\n",[253,266,268,270],{"class":255,"line":267},2,[253,269,260],{"class":259},[253,271,272],{"class":263},"const stronghold = await Stronghold.load(vaultPath, password);\n",[253,274,276,279],{"class":255,"line":275},3,[253,277,278],{"class":259},"+",[253,280,282],{"class":281},"sfazB","import { KeyringSession } from \"tauri-plugin-keyring-store-api\";\n",[253,284,286,288],{"class":255,"line":285},4,[253,287,278],{"class":259},[253,289,290],{"class":281},"const stronghold = await KeyringSession.load(\"\u002Fwallet\u002Fmain\", \"\");\n",[253,292,294],{"class":255,"line":293},5,[253,295,297],{"class":296},"sTEyZ"," const client = await stronghold.loadClient(\"main\");\n",[253,299,301],{"class":255,"line":300},6,[253,302,303],{"class":296}," const store = client.getStore();\n",[305,306,308],"h2",{"id":307},"what-behaves-differently","What behaves differently",[137,310,311,319],{},[140,312,313],{},[143,314,315,317],{},[146,316,148],{},[146,318,151],{},[153,320,321,329,342,350,358,368],{},[143,322,323,326],{},[158,324,325],{},"A snapshot file encrypted with a key derived from the password",[158,327,328],{},"No file; each record is an OS keyring entry",[143,330,331,337],{},[158,332,333,336],{},[132,334,335],{},"save()"," writes the snapshot",[158,338,339,341],{},[132,340,335],{}," writes nothing (every write is immediate); it still fails if the session is not loaded",[143,343,344,347],{},[158,345,346],{},"The password decrypts the snapshot",[158,348,349],{},"The password is not verified or used",[143,351,352,355],{},[158,353,354],{},"Procedures run in the Stronghold runtime",[158,356,357],{},"Procedures run in the plugin's Rust code; outputs are stored in the keyring",[143,359,360,363],{},[158,361,362],{},"Record size limited by memory",[158,364,365,366],{},"Platform limits, e.g. about 960 bytes per record on ",[126,367,97],{"href":98},[143,369,370,376],{},[158,371,372,375],{},[132,373,374],{},"insert(key, value, lifetime)"," expires records",[158,377,378,381],{},[132,379,380],{},"lifetime"," is ignored",[122,383,384,385,387],{},"Procedure results match Stronghold: no procedure returns a private key. ",[132,386,234],{}," returns the new\nmnemonic (as UTF-8 bytes) so the user can back it up.",[305,389,391],{"id":390},"moving-existing-data","Moving existing data",[122,393,394],{},"There is no import from a Stronghold snapshot. Read the data with Stronghold once and write it here:",[396,397,398,410],"ul",{},[399,400,401,402,405,406,409],"li",{},"Store records: ",[132,403,404],{},"oldStore.get(key)"," then ",[132,407,408],{},"keyringStore.insert(key, value)"," for every key you know.",[399,411,412,413,415],{},"Wallet keys: if you have the mnemonic, call ",[132,414,231],{}," into the new vault. Stronghold does not\nreturn private keys, so keys without a mnemonic cannot be copied; generate new ones.",[122,417,418],{},"After the move, delete the snapshot file.",[420,421,422],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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);}",{"title":249,"searchDepth":267,"depth":275,"links":424},[425,426],{"id":307,"depth":267,"text":308},{"id":390,"depth":267,"text":391},"How the API maps to tauri-plugin-stronghold, what behaves differently, and how to move existing data.","md",null,{},true,{"title":58,"description":427},"sryEtcPl9uuc8GXDK6dhtxEkYUoeBYPR4DTUS61LoNU",[435,437],{"title":54,"path":55,"stem":56,"description":436,"children":-1},"Allow the plugin's commands in a capability, and give each window only what it needs.",{"title":68,"path":69,"stem":70,"description":438,"children":-1},"Every class, method and function of tauri-plugin-keyring-store-api, generated from guest-js\u002Findex.ts.",1794215488500]