[{"data":1,"prerenderedAt":914},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fpasswords":116,"\u002Fguides\u002Fpasswords-surround":909},[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":42,"body":118,"description":903,"extension":904,"generated":26,"links":905,"meta":906,"navigation":202,"path":43,"seo":907,"stem":44,"__hash__":908},"docs\u002F2.guides\u002F3.passwords.md",{"type":119,"value":120,"toc":894},"minimark",[121,130,362,433,438,441,473,484,487,519,523,530,644,663,667,674,679,765,772,776,872,883,890],[122,123,124,125,129],"p",{},"The password commands work on ",[126,127,128],"strong",{},"raw account names"," that you choose. Each account is one OS keyring\nentry under your service name, with the secret stored as the UTF-8 text you pass. No session is needed.",[131,132,137],"pre",{"className":133,"code":134,"language":135,"meta":136,"style":136},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { setPasswords, getPasswords, deletePasswords, passwordExists, joinKeyPrefix } from \"tauri-plugin-keyring-store-api\";\n\nconst account = joinKeyPrefix(\"app\", \"api_token\"); \u002F\u002F \"app.api_token\"\n\nawait setPasswords([{ account, secret: \"secret-value\" }]);\nconst values = await getPasswords([account, \"app.missing\"]); \u002F\u002F [\"secret-value\", null]\nconst exists = await passwordExists(account); \u002F\u002F true\nawait deletePasswords([account]);\n","ts","",[138,139,140,197,204,249,254,294,328,350],"code",{"__ignoreMap":136},[141,142,145,149,153,157,160,163,165,168,170,173,175,178,181,184,187,191,194],"span",{"class":143,"line":144},"line",1,[141,146,148],{"class":147},"s7zQu","import",[141,150,152],{"class":151},"sMK4o"," {",[141,154,156],{"class":155},"sTEyZ"," setPasswords",[141,158,159],{"class":151},",",[141,161,162],{"class":155}," getPasswords",[141,164,159],{"class":151},[141,166,167],{"class":155}," deletePasswords",[141,169,159],{"class":151},[141,171,172],{"class":155}," passwordExists",[141,174,159],{"class":151},[141,176,177],{"class":155}," joinKeyPrefix",[141,179,180],{"class":151}," }",[141,182,183],{"class":147}," from",[141,185,186],{"class":151}," \"",[141,188,190],{"class":189},"sfazB","tauri-plugin-keyring-store-api",[141,192,193],{"class":151},"\"",[141,195,196],{"class":151},";\n",[141,198,200],{"class":143,"line":199},2,[141,201,203],{"emptyLinePlaceholder":202},true,"\n",[141,205,207,211,214,217,220,223,225,228,230,232,234,237,239,242,245],{"class":143,"line":206},3,[141,208,210],{"class":209},"spNyl","const",[141,212,213],{"class":155}," account ",[141,215,216],{"class":151},"=",[141,218,177],{"class":219},"s2Zo4",[141,221,222],{"class":155},"(",[141,224,193],{"class":151},[141,226,227],{"class":189},"app",[141,229,193],{"class":151},[141,231,159],{"class":151},[141,233,186],{"class":151},[141,235,236],{"class":189},"api_token",[141,238,193],{"class":151},[141,240,241],{"class":155},")",[141,243,244],{"class":151},";",[141,246,248],{"class":247},"sHwdD"," \u002F\u002F \"app.api_token\"\n",[141,250,252],{"class":143,"line":251},4,[141,253,203],{"emptyLinePlaceholder":202},[141,255,257,260,262,265,268,271,273,277,280,282,285,287,289,292],{"class":143,"line":256},5,[141,258,259],{"class":147},"await",[141,261,156],{"class":219},[141,263,264],{"class":155},"([",[141,266,267],{"class":151},"{",[141,269,270],{"class":155}," account",[141,272,159],{"class":151},[141,274,276],{"class":275},"swJcz"," secret",[141,278,279],{"class":151},":",[141,281,186],{"class":151},[141,283,284],{"class":189},"secret-value",[141,286,193],{"class":151},[141,288,180],{"class":151},[141,290,291],{"class":155},"])",[141,293,196],{"class":151},[141,295,297,299,302,304,307,309,312,314,316,319,321,323,325],{"class":143,"line":296},6,[141,298,210],{"class":209},[141,300,301],{"class":155}," values ",[141,303,216],{"class":151},[141,305,306],{"class":147}," await",[141,308,162],{"class":219},[141,310,311],{"class":155},"([account",[141,313,159],{"class":151},[141,315,186],{"class":151},[141,317,318],{"class":189},"app.missing",[141,320,193],{"class":151},[141,322,291],{"class":155},[141,324,244],{"class":151},[141,326,327],{"class":247}," \u002F\u002F [\"secret-value\", null]\n",[141,329,331,333,336,338,340,342,345,347],{"class":143,"line":330},7,[141,332,210],{"class":209},[141,334,335],{"class":155}," exists ",[141,337,216],{"class":151},[141,339,306],{"class":147},[141,341,172],{"class":219},[141,343,344],{"class":155},"(account)",[141,346,244],{"class":151},[141,348,349],{"class":247}," \u002F\u002F true\n",[141,351,353,355,357,360],{"class":143,"line":352},8,[141,354,259],{"class":147},[141,356,167],{"class":219},[141,358,359],{"class":155},"([account])",[141,361,196],{"class":151},[363,364,365,378],"table",{},[366,367,368],"thead",{},[369,370,371,375],"tr",{},[372,373,374],"th",{},"Function",[372,376,377],{},"Does",[379,380,381,396,410,420],"tbody",{},[369,382,383,389],{},[384,385,386],"td",{},[138,387,388],{},"getPasswords(accounts)",[384,390,391,392,395],{},"Secrets in the input order; ",[138,393,394],{},"null"," for a missing account.",[369,397,398,403],{},[384,399,400],{},[138,401,402],{},"setPasswords(entries)",[384,404,405,406,409],{},"Writes ",[138,407,408],{},"{ account, secret }"," pairs, replacing existing secrets.",[369,411,412,417],{},[384,413,414],{},[138,415,416],{},"deletePasswords(accounts)",[384,418,419],{},"Deletes; a missing account is not an error.",[369,421,422,427],{},[384,423,424],{},[138,425,426],{},"passwordExists(account)",[384,428,429,432],{},[138,430,431],{},"true"," if the account holds a secret that is not empty after trimming.",[434,435,437],"h2",{"id":436},"account-rules","Account rules",[122,439,440],{},"Every account is checked before anything is read or written:",[442,443,444,448,455,461],"ul",{},[445,446,447],"li",{},"Leading and trailing spaces are trimmed; the result must not be empty.",[445,449,450,451,454],{},"At most ",[126,452,453],{},"512 bytes",".",[445,456,450,457,460],{},[126,458,459],{},"256"," accounts or entries per call.",[445,462,463,464,467,468,454],{},"No ",[138,465,466],{},"kp:"," prefix, see ",[469,470,472],"a",{"href":471},"#reserved-accounts","Reserved accounts",[122,474,475,476,479,480,483],{},"A bad account rejects the whole call with ",[138,477,478],{},"naming \u002F validation error: …",", and ",[138,481,482],{},"setPasswords"," writes\nnothing. A keyring error in the middle of a batch (e.g. a Windows size limit) stops at that entry:\nthe earlier entries are already written.",[434,485,472],{"id":486},"reserved-accounts",[122,488,489,490,492,493,496,497,499,500,499,503,506,507,511,512,515,516,518],{},"Accounts that start with ",[138,491,466],{}," in ",[126,494,495],{},"any letter case"," (",[138,498,466],{},", ",[138,501,502],{},"KP:",[138,504,505],{},"Kp:",", …) hold the\n",[469,508,510],{"href":509},"\u002Fguides\u002Fsessions#how-names-become-entries","session store records and vault keys",". The password\ncommands refuse them, so the webview cannot read vault key material with ",[138,513,514],{},"getPasswords"," or overwrite\nit with ",[138,517,482],{},". Letter case is ignored because Windows credential names are case-insensitive.",[434,520,522],{"id":521},"naming","Naming",[122,524,525,526,529],{},"The OS stores cannot list or search entries. A simple convention helps you keep track: ",[138,527,528],{},"prefix.name","\nwith exactly one dot.",[131,531,533],{"className":133,"code":532,"language":135,"meta":136,"style":136},"import { joinKeyPrefix, splitKeyPrefix, KEYRING_PREFIX_SEPARATOR } from \"tauri-plugin-keyring-store-api\";\n\nconst account = joinKeyPrefix(\"billing\", \"stripe_sk\"); \u002F\u002F \"billing.stripe_sk\"\nconst [prefix, name] = splitKeyPrefix(account); \u002F\u002F [\"billing\", \"stripe_sk\"]\nKEYRING_PREFIX_SEPARATOR; \u002F\u002F \".\"\n",[138,534,535,565,569,604,634],{"__ignoreMap":136},[141,536,537,539,541,543,545,548,550,553,555,557,559,561,563],{"class":143,"line":144},[141,538,148],{"class":147},[141,540,152],{"class":151},[141,542,177],{"class":155},[141,544,159],{"class":151},[141,546,547],{"class":155}," splitKeyPrefix",[141,549,159],{"class":151},[141,551,552],{"class":155}," KEYRING_PREFIX_SEPARATOR",[141,554,180],{"class":151},[141,556,183],{"class":147},[141,558,186],{"class":151},[141,560,190],{"class":189},[141,562,193],{"class":151},[141,564,196],{"class":151},[141,566,567],{"class":143,"line":199},[141,568,203],{"emptyLinePlaceholder":202},[141,570,571,573,575,577,579,581,583,586,588,590,592,595,597,599,601],{"class":143,"line":206},[141,572,210],{"class":209},[141,574,213],{"class":155},[141,576,216],{"class":151},[141,578,177],{"class":219},[141,580,222],{"class":155},[141,582,193],{"class":151},[141,584,585],{"class":189},"billing",[141,587,193],{"class":151},[141,589,159],{"class":151},[141,591,186],{"class":151},[141,593,594],{"class":189},"stripe_sk",[141,596,193],{"class":151},[141,598,241],{"class":155},[141,600,244],{"class":151},[141,602,603],{"class":247}," \u002F\u002F \"billing.stripe_sk\"\n",[141,605,606,608,611,614,616,619,622,625,627,629,631],{"class":143,"line":251},[141,607,210],{"class":209},[141,609,610],{"class":151}," [",[141,612,613],{"class":155},"prefix",[141,615,159],{"class":151},[141,617,618],{"class":155}," name",[141,620,621],{"class":151},"]",[141,623,624],{"class":151}," =",[141,626,547],{"class":219},[141,628,344],{"class":155},[141,630,244],{"class":151},[141,632,633],{"class":247}," \u002F\u002F [\"billing\", \"stripe_sk\"]\n",[141,635,636,639,641],{"class":143,"line":256},[141,637,638],{"class":155},"KEYRING_PREFIX_SEPARATOR",[141,640,244],{"class":151},[141,642,643],{"class":247}," \u002F\u002F \".\"\n",[122,645,646,647,499,650,653,654,657,658,662],{},"Both trim their input and throw if a part is empty or contains a dot. Rust has the same helpers:\n",[138,648,649],{},"join_prefix",[138,651,652],{},"split_prefixed"," and ",[138,655,656],{},"PREFIX_SEPARATOR",". The convention is only for your code; the\nplugin accepts any account that follows the ",[469,659,661],{"href":660},"#account-rules","rules",". Keep your own index of accounts if\nyou need to enumerate them.",[434,664,666],{"id":665},"backups","Backups",[122,668,669,670,673],{},"Both formats contain the accounts you list. A missing account is exported with ",[138,671,672],{},"secret: null"," and\nskipped on import. An import is validated as a whole (format version 1, at most 256 rows, every account\nfollows the rules) before the first write, so a bad backup changes nothing.",[675,676,678],"h3",{"id":677},"plain","Plain",[131,680,682],{"className":133,"code":681,"language":135,"meta":136,"style":136},"import { exportPasswordsPlain, importPasswordsPlain } from \"tauri-plugin-keyring-store-api\";\n\nconst backup = await exportPasswordsPlain([\"app.api_token\", \"app.refresh_token\"]);\n\u002F\u002F { formatVersion: 1, entries: [{ account: \"app.api_token\", secret: \"…\" }, …] }\nawait importPasswordsPlain(backup);\n",[138,683,684,710,714,749,754],{"__ignoreMap":136},[141,685,686,688,690,693,695,698,700,702,704,706,708],{"class":143,"line":144},[141,687,148],{"class":147},[141,689,152],{"class":151},[141,691,692],{"class":155}," exportPasswordsPlain",[141,694,159],{"class":151},[141,696,697],{"class":155}," importPasswordsPlain",[141,699,180],{"class":151},[141,701,183],{"class":147},[141,703,186],{"class":151},[141,705,190],{"class":189},[141,707,193],{"class":151},[141,709,196],{"class":151},[141,711,712],{"class":143,"line":199},[141,713,203],{"emptyLinePlaceholder":202},[141,715,716,718,721,723,725,727,729,731,734,736,738,740,743,745,747],{"class":143,"line":206},[141,717,210],{"class":209},[141,719,720],{"class":155}," backup ",[141,722,216],{"class":151},[141,724,306],{"class":147},[141,726,692],{"class":219},[141,728,264],{"class":155},[141,730,193],{"class":151},[141,732,733],{"class":189},"app.api_token",[141,735,193],{"class":151},[141,737,159],{"class":151},[141,739,186],{"class":151},[141,741,742],{"class":189},"app.refresh_token",[141,744,193],{"class":151},[141,746,291],{"class":155},[141,748,196],{"class":151},[141,750,751],{"class":143,"line":251},[141,752,753],{"class":247},"\u002F\u002F { formatVersion: 1, entries: [{ account: \"app.api_token\", secret: \"…\" }, …] }\n",[141,755,756,758,760,763],{"class":143,"line":256},[141,757,259],{"class":147},[141,759,697],{"class":219},[141,761,762],{"class":155},"(backup)",[141,764,196],{"class":151},[122,766,767,768,771],{},"The secrets cross IPC ",[126,769,770],{},"in clear text"," and live in webview memory. Use it only in trusted UI flows, or\nuse the encrypted format.",[675,773,775],{"id":774},"encrypted","Encrypted",[131,777,779],{"className":133,"code":778,"language":135,"meta":136,"style":136},"import { exportPasswordsEncrypted, importPasswordsEncrypted } from \"tauri-plugin-keyring-store-api\";\n\nconst backup = await exportPasswordsEncrypted([\"app.api_token\"], \"user passphrase\");\n\u002F\u002F { formatVersion: 1, salt: \"…\", nonce: \"…\", ciphertext: \"…\" } (Base64)\nawait importPasswordsEncrypted(backup, \"user passphrase\");\n",[138,780,781,807,811,846,851],{"__ignoreMap":136},[141,782,783,785,787,790,792,795,797,799,801,803,805],{"class":143,"line":144},[141,784,148],{"class":147},[141,786,152],{"class":151},[141,788,789],{"class":155}," exportPasswordsEncrypted",[141,791,159],{"class":151},[141,793,794],{"class":155}," importPasswordsEncrypted",[141,796,180],{"class":151},[141,798,183],{"class":147},[141,800,186],{"class":151},[141,802,190],{"class":189},[141,804,193],{"class":151},[141,806,196],{"class":151},[141,808,809],{"class":143,"line":199},[141,810,203],{"emptyLinePlaceholder":202},[141,812,813,815,817,819,821,823,825,827,829,831,833,835,837,840,842,844],{"class":143,"line":206},[141,814,210],{"class":209},[141,816,720],{"class":155},[141,818,216],{"class":151},[141,820,306],{"class":147},[141,822,789],{"class":219},[141,824,264],{"class":155},[141,826,193],{"class":151},[141,828,733],{"class":189},[141,830,193],{"class":151},[141,832,621],{"class":155},[141,834,159],{"class":151},[141,836,186],{"class":151},[141,838,839],{"class":189},"user passphrase",[141,841,193],{"class":151},[141,843,241],{"class":155},[141,845,196],{"class":151},[141,847,848],{"class":143,"line":251},[141,849,850],{"class":247},"\u002F\u002F { formatVersion: 1, salt: \"…\", nonce: \"…\", ciphertext: \"…\" } (Base64)\n",[141,852,853,855,857,860,862,864,866,868,870],{"class":143,"line":256},[141,854,259],{"class":147},[141,856,794],{"class":219},[141,858,859],{"class":155},"(backup",[141,861,159],{"class":151},[141,863,186],{"class":151},[141,865,839],{"class":189},[141,867,193],{"class":151},[141,869,241],{"class":155},[141,871,196],{"class":151},[122,873,874,875,878,879,882],{},"The key is derived from the passphrase with ",[126,876,877],{},"Argon2id"," (19 MiB memory, 3 iterations, 1 lane,\n16-byte random salt) and the plain backup JSON is encrypted with ",[126,880,881],{},"ChaCha20-Poly1305"," (12-byte random\nnonce). Encryption runs in Rust; the webview sees only the envelope. A wrong passphrase or a modified\nenvelope rejects and writes nothing. Backups made by 0.1.x still decrypt.",[122,884,885,886,889],{},"Encrypted backups are always compiled, with or without the ",[138,887,888],{},"crypto"," feature.",[891,892,893],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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":136,"searchDepth":199,"depth":206,"links":895},[896,897,898,899],{"id":436,"depth":199,"text":437},{"id":486,"depth":199,"text":472},{"id":521,"depth":199,"text":522},{"id":665,"depth":199,"text":666,"children":900},[901,902],{"id":677,"depth":206,"text":678},{"id":774,"depth":206,"text":775},"Read and write UTF-8 secrets by account name in bulk, name accounts, and export or import backups.","md",null,{},{"title":42,"description":903},"U1ifikgnzKC2PlsforrpIn5JcVe_unk0IbnzcAdTIXM",[910,912],{"title":38,"path":39,"stem":40,"description":911,"children":-1},"Vault records, locations, and the SLIP10 \u002F BIP39 \u002F Ed25519 procedures that keep private keys in Rust.",{"title":46,"path":47,"stem":48,"description":913,"children":-1},"Use KeyringStore from your own commands, set the service name, plug in another keyring-core store, and read secrets from background tasks.",1794215488501]