[{"data":1,"prerenderedAt":1721},["ShallowReactive",2],{"navigation":3,"\u002Ffamilies\u002Fto\u002Fchoosing-a-store":927},[4,40,114,446,474,498,596,903],{"title":5,"path":6,"stem":7,"children":8},"Architecture","\u002Farchitecture","architecture",[9,14,28,32,36],{"title":10,"path":6,"stem":11,"access":12,"icon":13},"Overview","architecture\u002Findex","public","i-lucide-network",{"title":10,"path":15,"stem":16,"children":17,"access":12,"icon":19},"\u002Farchitecture\u002Fkernel","architecture\u002F1.kernel\u002Findex",[18,20,24],{"title":10,"path":15,"stem":16,"access":12,"icon":19},"i-lucide-box",{"title":21,"path":22,"stem":23,"access":12},"Enclave","\u002Farchitecture\u002Fkernel\u002Fenclave","architecture\u002F1.kernel\u002Fenclave",{"title":25,"path":26,"stem":27,"access":12},"Forking the enclave","\u002Farchitecture\u002Fkernel\u002Fforking-the-enclave","architecture\u002F1.kernel\u002Fforking-the-enclave",{"title":29,"path":30,"stem":31,"access":12},"Ports","\u002Farchitecture\u002Fports","architecture\u002F2.ports",{"title":33,"path":34,"stem":35,"access":12},"Service layers","\u002Farchitecture\u002Fservice-layers","architecture\u002F3.service-layers",{"title":37,"path":38,"stem":39,"access":12},"Families","\u002Farchitecture\u002Ffamilies","architecture\u002F4.families",{"title":41,"path":42,"stem":43,"children":44},"Core","\u002Fcore","core",[45,47,50,53,56,88,97],{"title":10,"path":42,"stem":46,"access":12,"icon":19},"core\u002Findex",{"title":10,"path":48,"stem":49,"access":12},"\u002Fcore\u002F01-overview","core\u002F01-overview",{"title":10,"path":51,"stem":52,"access":12},"\u002Fcore\u002F05-stores","core\u002F05-stores",{"title":10,"path":54,"stem":55,"access":12},"\u002Fcore\u002F06-permissions-and-keyring","core\u002F06-permissions-and-keyring",{"title":10,"path":57,"stem":58,"children":59,"access":12},"\u002Fcore\u002Fnoydb","core\u002F2.noydb\u002Findex",[60,61,65,68,72,76,80,84],{"title":10,"path":57,"stem":58,"access":12},{"title":62,"path":63,"stem":64,"access":12},"Noydb","\u002Fcore\u002Fnoydb\u002Fmethods","core\u002F2.noydb\u002F1.methods",{"title":21,"path":66,"stem":67,"access":12},"\u002Fcore\u002Fnoydb\u002Fenclave","core\u002F2.noydb\u002F2.enclave",{"title":69,"path":70,"stem":71,"access":12},"Secret & keyring","\u002Fcore\u002Fnoydb\u002Fkeyring","core\u002F2.noydb\u002F3.keyring",{"title":73,"path":74,"stem":75,"access":12},"Authentication","\u002Fcore\u002Fnoydb\u002Fauthentication","core\u002F2.noydb\u002F4.authentication",{"title":77,"path":78,"stem":79,"access":12},"Auth recovery","\u002Fcore\u002Fnoydb\u002Frecovery","core\u002F2.noydb\u002F5.recovery",{"title":81,"path":82,"stem":83,"access":12},"Configuration","\u002Fcore\u002Fnoydb\u002Fconfiguration","core\u002F2.noydb\u002F6.configuration",{"title":85,"path":86,"stem":87,"access":12},"Strategies","\u002Fcore\u002Fnoydb\u002Fstrategies","core\u002F2.noydb\u002F7.strategies",{"title":10,"path":89,"stem":90,"children":91,"access":12},"\u002Fcore\u002Fvault","core\u002F3.vault\u002Findex",[92,93],{"title":10,"path":89,"stem":90,"access":12},{"title":94,"path":95,"stem":96,"access":12},"Vault","\u002Fcore\u002Fvault\u002Fmethods","core\u002F3.vault\u002F1.methods",{"title":10,"path":98,"stem":99,"children":100,"access":12},"\u002Fcore\u002Fcollection","core\u002F4.collection\u002Findex",[101,102,106,110],{"title":10,"path":98,"stem":99,"access":12},{"title":103,"path":104,"stem":105,"access":12},"Collection","\u002Fcore\u002Fcollection\u002Fmethods","core\u002F4.collection\u002F1.methods",{"title":107,"path":108,"stem":109,"access":12},"Querying","\u002Fcore\u002Fcollection\u002Fquerying","core\u002F4.collection\u002F2.querying",{"title":111,"path":112,"stem":113,"access":12},"Schema","\u002Fcore\u002Fcollection\u002Fschema","core\u002F4.collection\u002F3.schema",{"title":37,"path":115,"stem":116,"children":117},"\u002Ffamilies","families",[118,121,168,194,208,212,216,294,340],{"title":10,"path":115,"stem":119,"access":12,"icon":120},"families\u002Findex","i-lucide-plug",{"title":122,"path":123,"stem":124,"children":125,"access":12,"icon":127},"as-Exports","\u002Ffamilies\u002Fas","families\u002Fas\u002Findex",[126,128,132,136,140,144,148,152,156,160,164],{"title":122,"path":123,"stem":124,"access":12,"icon":127},"i-lucide-book-open",{"title":129,"path":130,"stem":131,"access":12},"aws-s3","\u002Ffamilies\u002Fas\u002Faws-s3","families\u002Fas\u002Faws-s3",{"title":133,"path":134,"stem":135,"access":12},"blob","\u002Ffamilies\u002Fas\u002Fblob","families\u002Fas\u002Fblob",{"title":137,"path":138,"stem":139,"access":12},"csv","\u002Ffamilies\u002Fas\u002Fcsv","families\u002Fas\u002Fcsv",{"title":141,"path":142,"stem":143,"access":12},"json","\u002Ffamilies\u002Fas\u002Fjson","families\u002Fas\u002Fjson",{"title":145,"path":146,"stem":147,"access":12},"ndjson","\u002Ffamilies\u002Fas\u002Fndjson","families\u002Fas\u002Fndjson",{"title":149,"path":150,"stem":151,"access":12},"noydb","\u002Ffamilies\u002Fas\u002Fnoydb","families\u002Fas\u002Fnoydb",{"title":153,"path":154,"stem":155,"access":12},"sql","\u002Ffamilies\u002Fas\u002Fsql","families\u002Fas\u002Fsql",{"title":157,"path":158,"stem":159,"access":12},"xlsx","\u002Ffamilies\u002Fas\u002Fxlsx","families\u002Fas\u002Fxlsx",{"title":161,"path":162,"stem":163,"access":12},"xml","\u002Ffamilies\u002Fas\u002Fxml","families\u002Fas\u002Fxml",{"title":165,"path":166,"stem":167,"access":12},"zip","\u002Ffamilies\u002Fas\u002Fzip","families\u002Fas\u002Fzip",{"title":169,"path":170,"stem":171,"children":172,"access":12,"icon":127},"at-Seals","\u002Ffamilies\u002Fat","families\u002Fat\u002Findex",[173,174,178,182,186,190],{"title":169,"path":170,"stem":171,"access":12,"icon":127},{"title":175,"path":176,"stem":177,"access":12},"aws-kms","\u002Ffamilies\u002Fat\u002Faws-kms","families\u002Fat\u002Faws-kms",{"title":179,"path":180,"stem":181,"access":12},"azure-keyvault","\u002Ffamilies\u002Fat\u002Fazure-keyvault","families\u002Fat\u002Fazure-keyvault",{"title":183,"path":184,"stem":185,"access":12},"env","\u002Ffamilies\u002Fat\u002Fenv","families\u002Fat\u002Fenv",{"title":187,"path":188,"stem":189,"access":12},"gcp-kms","\u002Ffamilies\u002Fat\u002Fgcp-kms","families\u002Fat\u002Fgcp-kms",{"title":191,"path":192,"stem":193,"access":12},"macos-keychain","\u002Ffamilies\u002Fat\u002Fmacos-keychain","families\u002Fat\u002Fmacos-keychain",{"title":195,"path":196,"stem":197,"children":198,"access":12,"icon":127},"by-Sessions","\u002Ffamilies\u002Fby","families\u002Fby\u002Findex",[199,200,204],{"title":195,"path":196,"stem":197,"access":12,"icon":127},{"title":201,"path":202,"stem":203,"access":12},"peer","\u002Ffamilies\u002Fby\u002Fpeer","families\u002Fby\u002Fpeer",{"title":205,"path":206,"stem":207,"access":12},"tabs","\u002Ffamilies\u002Fby\u002Ftabs","families\u002Fby\u002Ftabs",{"title":209,"path":210,"stem":211,"access":12},"Classifying a package","\u002Ffamilies\u002Fclassification","families\u002Fclassification",{"title":213,"path":214,"stem":215,"access":12},"Command-line tools","\u002Ffamilies\u002Fcli","families\u002Fcli",{"title":217,"path":218,"stem":219,"children":220,"access":12,"icon":127},"in-Frameworks","\u002Ffamilies\u002Fin","families\u002Fin\u002Findex",[221,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290],{"title":217,"path":218,"stem":219,"access":12,"icon":127},{"title":223,"path":224,"stem":225,"access":12},"ai","\u002Ffamilies\u002Fin\u002Fai","families\u002Fin\u002Fai",{"title":227,"path":228,"stem":229,"access":12},"devtools","\u002Ffamilies\u002Fin\u002Fdevtools","families\u002Fin\u002Fdevtools",{"title":231,"path":232,"stem":233,"access":12},"devtools-tui","\u002Ffamilies\u002Fin\u002Fdevtools-tui","families\u002Fin\u002Fdevtools-tui",{"title":235,"path":236,"stem":237,"access":12},"liff","\u002Ffamilies\u002Fin\u002Fliff","families\u002Fin\u002Fliff",{"title":239,"path":240,"stem":241,"access":12},"nextjs","\u002Ffamilies\u002Fin\u002Fnextjs","families\u002Fin\u002Fnextjs",{"title":243,"path":244,"stem":245,"access":12},"nuxt","\u002Ffamilies\u002Fin\u002Fnuxt","families\u002Fin\u002Fnuxt",{"title":247,"path":248,"stem":249,"access":12},"pinia","\u002Ffamilies\u002Fin\u002Fpinia","families\u002Fin\u002Fpinia",{"title":251,"path":252,"stem":253,"access":12},"pwa","\u002Ffamilies\u002Fin\u002Fpwa","families\u002Fin\u002Fpwa",{"title":255,"path":256,"stem":257,"access":12},"react","\u002Ffamilies\u002Fin\u002Freact","families\u002Fin\u002Freact",{"title":259,"path":260,"stem":261,"access":12},"relay","\u002Ffamilies\u002Fin\u002Frelay","families\u002Fin\u002Frelay",{"title":263,"path":264,"stem":265,"access":12},"rest","\u002Ffamilies\u002Fin\u002Frest","families\u002Fin\u002Frest",{"title":267,"path":268,"stem":269,"access":12},"solid","\u002Ffamilies\u002Fin\u002Fsolid","families\u002Fin\u002Fsolid",{"title":271,"path":272,"stem":273,"access":12},"svelte","\u002Ffamilies\u002Fin\u002Fsvelte","families\u002Fin\u002Fsvelte",{"title":275,"path":276,"stem":277,"access":12},"tanstack-query","\u002Ffamilies\u002Fin\u002Ftanstack-query","families\u002Fin\u002Ftanstack-query",{"title":279,"path":280,"stem":281,"access":12},"tanstack-table","\u002Ffamilies\u002Fin\u002Ftanstack-table","families\u002Fin\u002Ftanstack-table",{"title":283,"path":284,"stem":285,"access":12},"vue","\u002Ffamilies\u002Fin\u002Fvue","families\u002Fin\u002Fvue",{"title":287,"path":288,"stem":289,"access":12},"yjs","\u002Ffamilies\u002Fin\u002Fyjs","families\u002Fin\u002Fyjs",{"title":291,"path":292,"stem":293,"access":12},"zustand","\u002Ffamilies\u002Fin\u002Fzustand","families\u002Fin\u002Fzustand",{"title":295,"path":296,"stem":297,"children":298,"access":12,"icon":127},"on-Auth","\u002Ffamilies\u002Fon","families\u002Fon\u002Findex",[299,300,304,308,312,316,320,324,328,332,336],{"title":295,"path":296,"stem":297,"access":12,"icon":127},{"title":301,"path":302,"stem":303,"access":12},"email-otp","\u002Ffamilies\u002Fon\u002Femail-otp","families\u002Fon\u002Femail-otp",{"title":305,"path":306,"stem":307,"access":12},"magic-link","\u002Ffamilies\u002Fon\u002Fmagic-link","families\u002Fon\u002Fmagic-link",{"title":309,"path":310,"stem":311,"access":12},"oidc","\u002Ffamilies\u002Fon\u002Foidc","families\u002Fon\u002Foidc",{"title":313,"path":314,"stem":315,"access":12},"password","\u002Ffamilies\u002Fon\u002Fpassword","families\u002Fon\u002Fpassword",{"title":317,"path":318,"stem":319,"access":12},"pin","\u002Ffamilies\u002Fon\u002Fpin","families\u002Fon\u002Fpin",{"title":321,"path":322,"stem":323,"access":12},"recovery","\u002Ffamilies\u002Fon\u002Frecovery","families\u002Fon\u002Frecovery",{"title":325,"path":326,"stem":327,"access":12},"shamir","\u002Ffamilies\u002Fon\u002Fshamir","families\u002Fon\u002Fshamir",{"title":329,"path":330,"stem":331,"access":12},"threat","\u002Ffamilies\u002Fon\u002Fthreat","families\u002Fon\u002Fthreat",{"title":333,"path":334,"stem":335,"access":12},"totp","\u002Ffamilies\u002Fon\u002Ftotp","families\u002Fon\u002Ftotp",{"title":337,"path":338,"stem":339,"access":12},"webauthn","\u002Ffamilies\u002Fon\u002Fwebauthn","families\u002Fon\u002Fwebauthn",{"title":341,"path":342,"stem":343,"children":344,"access":12,"icon":127},"to-Stores","\u002Ffamilies\u002Fto","families\u002Fto\u002Findex",[345,346,350,353,357,361,365,370,374,378,382,386,390,394,398,402,406,410,414,417,421,425,429,434,438,442],{"title":341,"path":342,"stem":343,"access":12,"icon":127},{"title":347,"path":348,"stem":349,"access":12},"aws-dynamo","\u002Ffamilies\u002Fto\u002Faws-dynamo","families\u002Fto\u002Faws-dynamo",{"title":129,"path":351,"stem":352,"access":12},"\u002Ffamilies\u002Fto\u002Faws-s3","families\u002Fto\u002Faws-s3",{"title":354,"path":355,"stem":356,"access":12},"browser-fs","\u002Ffamilies\u002Fto\u002Fbrowser-fs","families\u002Fto\u002Fbrowser-fs",{"title":358,"path":359,"stem":360,"access":12},"browser-idb","\u002Ffamilies\u002Fto\u002Fbrowser-idb","families\u002Fto\u002Fbrowser-idb",{"title":362,"path":363,"stem":364,"access":12},"browser-local","\u002Ffamilies\u002Fto\u002Fbrowser-local","families\u002Fto\u002Fbrowser-local",{"title":366,"path":367,"stem":368,"access":12,"icon":369},"Choosing a store","\u002Ffamilies\u002Fto\u002Fchoosing-a-store","families\u002Fto\u002Fchoosing-a-store","i-lucide-split",{"title":371,"path":372,"stem":373,"access":12},"cloudflare-d1","\u002Ffamilies\u002Fto\u002Fcloudflare-d1","families\u002Fto\u002Fcloudflare-d1",{"title":375,"path":376,"stem":377,"access":12},"cloudflare-r2","\u002Ffamilies\u002Fto\u002Fcloudflare-r2","families\u002Fto\u002Fcloudflare-r2",{"title":379,"path":380,"stem":381,"access":12},"drive","\u002Ffamilies\u002Fto\u002Fdrive","families\u002Fto\u002Fdrive",{"title":383,"path":384,"stem":385,"access":12},"file","\u002Ffamilies\u002Fto\u002Ffile","families\u002Fto\u002Ffile",{"title":387,"path":388,"stem":389,"access":12},"icloud","\u002Ffamilies\u002Fto\u002Ficloud","families\u002Fto\u002Ficloud",{"title":391,"path":392,"stem":393,"access":12},"memory","\u002Ffamilies\u002Fto\u002Fmemory","families\u002Fto\u002Fmemory",{"title":395,"path":396,"stem":397,"access":12},"meter","\u002Ffamilies\u002Fto\u002Fmeter","families\u002Fto\u002Fmeter",{"title":399,"path":400,"stem":401,"access":12},"mysql","\u002Ffamilies\u002Fto\u002Fmysql","families\u002Fto\u002Fmysql",{"title":403,"path":404,"stem":405,"access":12},"nfs","\u002Ffamilies\u002Fto\u002Fnfs","families\u002Fto\u002Fnfs",{"title":407,"path":408,"stem":409,"access":12},"postgres","\u002Ffamilies\u002Fto\u002Fpostgres","families\u002Fto\u002Fpostgres",{"title":411,"path":412,"stem":413,"access":12},"probe","\u002Ffamilies\u002Fto\u002Fprobe","families\u002Fto\u002Fprobe",{"title":263,"path":415,"stem":416,"access":12},"\u002Ffamilies\u002Fto\u002Frest","families\u002Fto\u002Frest",{"title":418,"path":419,"stem":420,"access":12},"smb","\u002Ffamilies\u002Fto\u002Fsmb","families\u002Fto\u002Fsmb",{"title":422,"path":423,"stem":424,"access":12},"sqlite","\u002Ffamilies\u002Fto\u002Fsqlite","families\u002Fto\u002Fsqlite",{"title":426,"path":427,"stem":428,"access":12},"ssh","\u002Ffamilies\u002Fto\u002Fssh","families\u002Fto\u002Fssh",{"title":430,"path":431,"stem":432,"access":12,"icon":433},"Store-locator descriptors","\u002Ffamilies\u002Fto\u002Fstore-locator","families\u002Fto\u002Fstore-locator","i-lucide-map-pin",{"title":435,"path":436,"stem":437,"access":12},"supabase","\u002Ffamilies\u002Fto\u002Fsupabase","families\u002Fto\u002Fsupabase",{"title":439,"path":440,"stem":441,"access":12},"turso","\u002Ffamilies\u002Fto\u002Fturso","families\u002Fto\u002Fturso",{"title":443,"path":444,"stem":445,"access":12},"webdav","\u002Ffamilies\u002Fto\u002Fwebdav","families\u002Fto\u002Fwebdav",{"title":447,"path":448,"stem":449,"children":450},"Faq","\u002Ffaq","faq",[451,454,458,462,466,470],{"title":10,"path":448,"stem":452,"access":12,"icon":453},"faq\u002Findex","i-lucide-circle-help",{"title":455,"path":456,"stem":457,"access":12},"Where can noy-db run?","\u002Ffaq\u002Fwhere-can-noy-db-run","faq\u002F1.where-can-noy-db-run",{"title":459,"path":460,"stem":461,"access":12},"Native mobile & PWA","\u002Ffaq\u002Fmobile-and-pwa","faq\u002F2.mobile-and-pwa",{"title":463,"path":464,"stem":465,"access":12},"Threat model","\u002Ffaq\u002Fthreat-model","faq\u002F3.threat-model",{"title":467,"path":468,"stem":469,"access":12},"Community & ecosystem","\u002Ffaq\u002Fcommunity-and-ecosystem","faq\u002F4.community-and-ecosystem",{"title":471,"path":472,"stem":473,"access":12},"Licensing","\u002Ffaq\u002Flicensing","faq\u002F5.licensing",{"title":475,"path":476,"stem":477,"children":478},"Glossary","\u002Fglossary","glossary",[479,482,486,490,494],{"title":10,"path":476,"stem":480,"access":12,"icon":481},"glossary\u002Findex","i-lucide-book-a",{"title":483,"path":484,"stem":485,"access":12},"Core vocabulary","\u002Fglossary\u002Fcore-vocabulary","glossary\u002Fcore-vocabulary",{"title":487,"path":488,"stem":489,"access":12},"Deletion vocabulary","\u002Fglossary\u002Fdeletion","glossary\u002Fdeletion",{"title":491,"path":492,"stem":493,"access":12},"Satellite collection vocabulary","\u002Fglossary\u002Fsatellite-collections","glossary\u002Fsatellite-collections",{"title":495,"path":496,"stem":497,"access":12},"Schema migration vocabulary","\u002Fglossary\u002Fschema-migration","glossary\u002Fschema-migration",{"title":499,"path":500,"stem":501,"children":502},"Recipes","\u002Frecipes","recipes",[503,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,567,571,575,580,584,588,592],{"title":10,"path":500,"stem":504,"access":12,"icon":505},"recipes\u002Findex","i-lucide-play",{"title":507,"path":508,"stem":509,"access":12},"Accounting app","\u002Frecipes\u002Faccounting-app","recipes\u002Faccounting-app",{"title":511,"path":512,"stem":513,"access":12},"Analytics app","\u002Frecipes\u002Fanalytics-app","recipes\u002Fanalytics-app",{"title":515,"path":516,"stem":517,"access":12},"Attestation verifier","\u002Frecipes\u002Fattestation-verifier","recipes\u002Fattestation-verifier",{"title":519,"path":520,"stem":521,"access":12},"AWS-KMS attestation","\u002Frecipes\u002Faws-kms-pdf-attestation","recipes\u002Faws-kms-pdf-attestation",{"title":523,"path":524,"stem":525,"access":12},"Browser durability","\u002Frecipes\u002Fbrowser-durability","recipes\u002Fbrowser-durability",{"title":527,"path":528,"stem":529,"access":12},"Production cloud store","\u002Frecipes\u002Fcloud-store","recipes\u002Fcloud-store",{"title":531,"path":532,"stem":533,"access":12},"Compose your own setup","\u002Frecipes\u002Fcompose-your-own","recipes\u002Fcompose-your-own",{"title":535,"path":536,"stem":537,"access":12},"Confidential HR records","\u002Frecipes\u002Fconfidential-hr","recipes\u002Fconfidential-hr",{"title":539,"path":540,"stem":541,"access":12},"Composing an echo secret","\u002Frecipes\u002Fecho-secret-enrollment","recipes\u002Fecho-secret-enrollment",{"title":543,"path":544,"stem":545,"access":12},"Email archive","\u002Frecipes\u002Femail-archive","recipes\u002Femail-archive",{"title":547,"path":548,"stem":549,"access":12},"Email archive — threads & revisions","\u002Frecipes\u002Femail-archive-threads-revisions","recipes\u002Femail-archive-threads-revisions",{"title":551,"path":552,"stem":553,"access":12},"Export & portability","\u002Frecipes\u002Fexport-portability","recipes\u002Fexport-portability",{"title":555,"path":556,"stem":557,"access":12},"Passwordless OIDC (AWS Cognito)","\u002Frecipes\u002Fpasswordless-oidc","recipes\u002Fpasswordless-oidc",{"title":559,"path":560,"stem":561,"access":12},"Personal notebook","\u002Frecipes\u002Fpersonal-notebook","recipes\u002Fpersonal-notebook",{"title":563,"path":564,"stem":565,"access":12,"icon":566},"Playgrounds","\u002Frecipes\u002Fplaygrounds","recipes\u002Fplaygrounds","i-lucide-gamepad-2",{"title":568,"path":569,"stem":570,"access":12},"React invoice app","\u002Frecipes\u002Freact-invoices","recipes\u002Freact-invoices",{"title":572,"path":573,"stem":574,"access":12},"Collaborative app","\u002Frecipes\u002Frealtime-crdt-app","recipes\u002Frealtime-crdt-app",{"title":576,"path":577,"stem":578,"access":12,"icon":579},"Run the showcases","\u002Frecipes\u002Frun-the-showcases","recipes\u002Frun-the-showcases","i-lucide-flask-conical",{"title":581,"path":582,"stem":583,"access":12},"Search & RAG","\u002Frecipes\u002Fsearch-rag","recipes\u002Fsearch-rag",{"title":585,"path":586,"stem":587,"access":12},"Team vault topology","\u002Frecipes\u002Fteam-vault-topology","recipes\u002Fteam-vault-topology",{"title":589,"path":590,"stem":591,"access":12},"Unlock ceremonies","\u002Frecipes\u002Funlock-ceremonies","recipes\u002Funlock-ceremonies",{"title":593,"path":594,"stem":595,"access":12},"User preferences","\u002Frecipes\u002Fuser-preferences","recipes\u002Fuser-preferences",{"title":597,"path":598,"stem":599,"children":600},"Services","\u002Fservices","services",[601,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,710,714,718,722,726,730,734,738,742,746,750,755,759,763,767,771,775,779,783,787,791,795,799,803,807,811,815,819,823,827,831,835,839,843,847,851,855,859,863,867,871,875,879,883,887,891,895,899],{"title":10,"path":598,"stem":602,"access":12,"icon":603},"services\u002Findex","i-lucide-layers",{"title":605,"path":606,"stem":607,"access":12},"archive","\u002Fservices\u002Farchive","services\u002Farchive",{"title":609,"path":610,"stem":611,"access":12},"attestation","\u002Fservices\u002Fattestation","services\u002Fattestation",{"title":613,"path":614,"stem":615,"access":12},"auth-introspection","\u002Fservices\u002Fauth-introspection","services\u002Fauth-introspection",{"title":617,"path":618,"stem":619,"access":12},"auth-landscape","\u002Fservices\u002Fauth-landscape","services\u002Fauth-landscape",{"title":621,"path":622,"stem":623,"access":12},"blobs","\u002Fservices\u002Fblobs","services\u002Fblobs",{"title":625,"path":626,"stem":627,"access":12},"broker","\u002Fservices\u002Fbroker","services\u002Fbroker",{"title":629,"path":630,"stem":631,"access":12},"bundle","\u002Fservices\u002Fbundle","services\u002Fbundle",{"title":633,"path":634,"stem":635,"access":12},"classified","\u002Fservices\u002Fclassified","services\u002Fclassified",{"title":637,"path":638,"stem":639,"access":12},"computed","\u002Fservices\u002Fcomputed","services\u002Fcomputed",{"title":641,"path":642,"stem":643,"access":12},"consent","\u002Fservices\u002Fconsent","services\u002Fconsent",{"title":645,"path":646,"stem":647,"access":12},"cover","\u002Fservices\u002Fcover","services\u002Fcover",{"title":649,"path":650,"stem":651,"access":12},"coverage","\u002Fservices\u002Fcoverage","services\u002Fcoverage",{"title":653,"path":654,"stem":655,"access":12},"crdt","\u002Fservices\u002Fcrdt","services\u002Fcrdt",{"title":657,"path":658,"stem":659,"access":12},"cross-join","\u002Fservices\u002Fcross-join","services\u002Fcross-join",{"title":661,"path":662,"stem":663,"access":12},"custody","\u002Fservices\u002Fcustody","services\u002Fcustody",{"title":665,"path":666,"stem":667,"access":12},"derivations","\u002Fservices\u002Fderivations","services\u002Fderivations",{"title":669,"path":670,"stem":671,"access":12},"directory","\u002Fservices\u002Fdirectory","services\u002Fdirectory",{"title":673,"path":674,"stem":675,"access":12},"search — AI","\u002Fservices\u002Fembeddings","services\u002Fembeddings",{"title":677,"path":678,"stem":679,"access":12},"Field metadata","\u002Fservices\u002Ffield-metadata","services\u002Ffield-metadata",{"title":681,"path":682,"stem":683,"access":12},"Foreign refs","\u002Fservices\u002Fforeign-refs","services\u002Fforeign-refs",{"title":685,"path":686,"stem":687,"access":12},"forget","\u002Fservices\u002Fforget","services\u002Fforget",{"title":689,"path":690,"stem":691,"access":12},"governance","\u002Fservices\u002Fgovernance","services\u002Fgovernance",{"title":693,"path":694,"stem":695,"access":12},"guards","\u002Fservices\u002Fguards","services\u002Fguards",{"title":697,"path":698,"stem":699,"access":12},"history","\u002Fservices\u002Fhistory","services\u002Fhistory",{"title":701,"path":702,"stem":703,"access":12},"i18n","\u002Fservices\u002Fi18n","services\u002Fi18n",{"title":705,"path":706,"stem":707,"children":708,"access":12},"indexing","\u002Fservices\u002Findexing","services\u002Findexing",[709],{"title":705,"path":706,"stem":707,"access":12},{"title":711,"path":712,"stem":713,"access":12},"introspection","\u002Fservices\u002Fintrospection","services\u002Fintrospection",{"title":715,"path":716,"stem":717,"access":12},"joins","\u002Fservices\u002Fjoins","services\u002Fjoins",{"title":719,"path":720,"stem":721,"access":12},"lazy","\u002Fservices\u002Flazy","services\u002Flazy",{"title":723,"path":724,"stem":725,"access":12},"links","\u002Fservices\u002Flinks","services\u002Flinks",{"title":727,"path":728,"stem":729,"access":12},"live","\u002Fservices\u002Flive","services\u002Flive",{"title":731,"path":732,"stem":733,"access":12},"lookup","\u002Fservices\u002Flookup","services\u002Flookup",{"title":735,"path":736,"stem":737,"access":12},"manifest","\u002Fservices\u002Fmanifest","services\u002Fmanifest",{"title":739,"path":740,"stem":741,"access":12},"materialized-views","\u002Fservices\u002Fmaterialized-views","services\u002Fmaterialized-views",{"title":743,"path":744,"stem":745,"access":12},"Metadata ladder","\u002Fservices\u002Fmetadata-ladder","services\u002Fmetadata-ladder",{"title":747,"path":748,"stem":749,"access":12},"Metadata riders","\u002Fservices\u002Fmetadata-riders","services\u002Fmetadata-riders",{"title":751,"path":752,"stem":753,"access":12,"badge":754},"metrics","\u002Fservices\u002Fmetrics","services\u002Fmetrics","Planned",{"title":756,"path":757,"stem":758,"access":12,"badge":754},"migrations","\u002Fservices\u002Fmigrations","services\u002Fmigrations",{"title":760,"path":761,"stem":762,"access":12},"money","\u002Fservices\u002Fmoney","services\u002Fmoney",{"title":764,"path":765,"stem":766,"access":12},"numbering","\u002Fservices\u002Fnumbering","services\u002Fnumbering",{"title":768,"path":769,"stem":770,"access":12},"overlay-views","\u002Fservices\u002Foverlay-views","services\u002Foverlay-views",{"title":772,"path":773,"stem":774,"access":12,"badge":754},"partitioning","\u002Fservices\u002Fpartitioning","services\u002Fpartitioning",{"title":776,"path":777,"stem":778,"access":12},"periods","\u002Fservices\u002Fperiods","services\u002Fperiods",{"title":780,"path":781,"stem":782,"access":12},"persisted-schemas","\u002Fservices\u002Fpersisted-schemas","services\u002Fpersisted-schemas",{"title":784,"path":785,"stem":786,"access":12},"plaintext-bypass","\u002Fservices\u002Fplaintext-bypass","services\u002Fplaintext-bypass",{"title":788,"path":789,"stem":790,"access":12},"pod-redirect","\u002Fservices\u002Fpod-redirect","services\u002Fpod-redirect",{"title":792,"path":793,"stem":794,"access":12},"pod-signature","\u002Fservices\u002Fpod-signature","services\u002Fpod-signature",{"title":796,"path":797,"stem":798,"access":12},"policy","\u002Fservices\u002Fpolicy","services\u002Fpolicy",{"title":800,"path":801,"stem":802,"access":12},"portability","\u002Fservices\u002Fportability","services\u002Fportability",{"title":804,"path":805,"stem":806,"access":12},"reduce","\u002Fservices\u002Freduce","services\u002Freduce",{"title":808,"path":809,"stem":810,"access":12},"routing","\u002Fservices\u002Frouting","services\u002Frouting",{"title":812,"path":813,"stem":814,"access":12},"satellites","\u002Fservices\u002Fsatellites","services\u002Fsatellites",{"title":816,"path":817,"stem":818,"access":12},"schema-identifiers","\u002Fservices\u002Fschema-identifiers","services\u002Fschema-identifiers",{"title":820,"path":821,"stem":822,"access":12},"schema-update","\u002Fservices\u002Fschema-update","services\u002Fschema-update",{"title":824,"path":825,"stem":826,"access":12},"sealed-record","\u002Fservices\u002Fsealed-record","services\u002Fsealed-record",{"title":828,"path":829,"stem":830,"access":12},"sealing provider id","\u002Fservices\u002Fsealing-pid-stability","services\u002Fsealing-pid-stability",{"title":832,"path":833,"stem":834,"access":12},"search — full-text","\u002Fservices\u002Fsearch","services\u002Fsearch",{"title":836,"path":837,"stem":838,"access":12},"sequence","\u002Fservices\u002Fsequence","services\u002Fsequence",{"title":840,"path":841,"stem":842,"access":12},"session","\u002Fservices\u002Fsession","services\u002Fsession",{"title":844,"path":845,"stem":846,"access":12},"session-tiers","\u002Fservices\u002Fsession-tiers","services\u002Fsession-tiers",{"title":848,"path":849,"stem":850,"access":12},"shadow","\u002Fservices\u002Fshadow","services\u002Fshadow",{"title":852,"path":853,"stem":854,"access":12},"share-link","\u002Fservices\u002Fshare-link","services\u002Fshare-link",{"title":856,"path":857,"stem":858,"access":12},"snapshots","\u002Fservices\u002Fsnapshots","services\u002Fsnapshots",{"title":860,"path":861,"stem":862,"access":12},"store capabilities","\u002Fservices\u002Fstorage-capability-matrix","services\u002Fstorage-capability-matrix",{"title":864,"path":865,"stem":866,"access":12},"sync","\u002Fservices\u002Fsync","services\u002Fsync",{"title":868,"path":869,"stem":870,"access":12},"team","\u002Fservices\u002Fteam","services\u002Fteam",{"title":872,"path":873,"stem":874,"access":12},"tiers","\u002Fservices\u002Ftiers","services\u002Ftiers",{"title":876,"path":877,"stem":878,"access":12},"transactions","\u002Fservices\u002Ftransactions","services\u002Ftransactions",{"title":880,"path":881,"stem":882,"access":12},"partitions","\u002Fservices\u002Ftransferable-partitions","services\u002Ftransferable-partitions",{"title":884,"path":885,"stem":886,"access":12},"user-envelope","\u002Fservices\u002Fuser-envelope","services\u002Fuser-envelope",{"title":888,"path":889,"stem":890,"access":12,"badge":754},"validation","\u002Fservices\u002Fvalidation","services\u002Fvalidation",{"title":892,"path":893,"stem":894,"access":12},"vault-head","\u002Fservices\u002Fvault-head","services\u002Fvault-head",{"title":896,"path":897,"stem":898,"access":12},"via","\u002Fservices\u002Fvia","services\u002Fvia",{"title":900,"path":901,"stem":902,"access":12},"withdrawal","\u002Fservices\u002Fwithdrawal","services\u002Fwithdrawal",{"title":904,"path":905,"stem":906,"children":907},"Start","\u002Fstart","start",[908,911,915,919,923],{"title":10,"path":905,"stem":909,"access":12,"icon":910},"start\u002Findex","i-lucide-flag",{"title":912,"path":913,"stem":914,"access":12},"Install","\u002Fstart\u002Finstall","start\u002F1.install",{"title":916,"path":917,"stem":918,"access":12},"Your first vault","\u002Fstart\u002Ffirst-vault","start\u002F2.first-vault",{"title":920,"path":921,"stem":922,"access":12},"Your first service","\u002Fstart\u002Ffirst-service","start\u002F3.first-service",{"title":924,"path":925,"stem":926,"access":12},"See the ciphertext","\u002Fstart\u002Fsee-the-ciphertext","start\u002F4.see-the-ciphertext",{"id":928,"title":366,"access":12,"apiToc":929,"body":930,"category":1711,"description":1712,"extension":1713,"meta":1714,"navigation":1715,"nest":1716,"path":367,"seo":1717,"sinceVersion":1711,"status":1718,"stem":368,"subtitle":1711,"tier":1719,"tocExternal":1711,"__hash__":1720},"docs\u002Ffamilies\u002Fto\u002Fchoosing-a-store.md",false,{"type":931,"value":932,"toc":1703},"minimark",[933,937,959,964,973,976,979,983,1196,1210,1214,1217,1252,1255,1352,1356,1359,1370,1410,1423,1497,1511,1521,1525,1623,1646,1662,1666,1699],[934,935,366],"h1",{"id":936},"choosing-a-store",[938,939,940,941,945,946,949,950,958],"p",{},"Every ",[942,943,944],"code",{},"to-*"," factory returns the same ",[942,947,948],{},"NoydbStore"," contract, so choosing between them is a plain conditional at construction time. There is ",[951,952,953,954,957],"strong",{},"no ",[942,955,956],{},"pickStore()"," helper",", and that absence is a decision rather than an oversight.",[960,961,963],"h2",{"id":962},"why-there-is-no-helper","Why there is no helper",[938,965,966,967,969,970,972],{},"A ",[942,968,956],{}," in the hub would have to know about the ",[942,971,944],{}," packages in order to choose between them. That means either importing them — which the one-way seam law forbids, since the hub may never import a satellite — or taking them as arguments, at which point it is the conditional you already wrote with a function call wrapped around it.",[938,974,975],{},"It would also be the hub's only API aware of satellite packages, and it would sit on the always-on floor that the bundle-size gate exists to keep small.",[938,977,978],{},"Environment detection is genuinely the app's job. It depends on bundler targets, SSR, React Native, Electron main-versus-renderer, and test environments — things the hub cannot see and should not guess.",[960,980,982],{"id":981},"the-pattern","The pattern",[984,985,990],"pre",{"className":986,"code":987,"language":988,"meta":989,"style":989},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createNoydb } from '@noy-db\u002Fhub'\nimport { toBrowserIdb } from '@noy-db\u002Fto-browser-idb'\nimport { toFile } from '@noy-db\u002Fto-file'\n\nconst store =\n  typeof indexedDB !== 'undefined'\n    ? toBrowserIdb()\n    : toFile({ dir: '.\u002Fdata' })\n\nconst db = await createNoydb({ store, user, secret })\n","ts","",[942,991,992,1025,1046,1067,1074,1087,1106,1118,1152,1157],{"__ignoreMap":989},[993,994,997,1001,1005,1009,1012,1015,1018,1022],"span",{"class":995,"line":996},"line",1,[993,998,1000],{"class":999},"s7zQu","import",[993,1002,1004],{"class":1003},"sMK4o"," {",[993,1006,1008],{"class":1007},"sTEyZ"," createNoydb",[993,1010,1011],{"class":1003}," }",[993,1013,1014],{"class":999}," from",[993,1016,1017],{"class":1003}," '",[993,1019,1021],{"class":1020},"sfazB","@noy-db\u002Fhub",[993,1023,1024],{"class":1003},"'\n",[993,1026,1028,1030,1032,1035,1037,1039,1041,1044],{"class":995,"line":1027},2,[993,1029,1000],{"class":999},[993,1031,1004],{"class":1003},[993,1033,1034],{"class":1007}," toBrowserIdb",[993,1036,1011],{"class":1003},[993,1038,1014],{"class":999},[993,1040,1017],{"class":1003},[993,1042,1043],{"class":1020},"@noy-db\u002Fto-browser-idb",[993,1045,1024],{"class":1003},[993,1047,1049,1051,1053,1056,1058,1060,1062,1065],{"class":995,"line":1048},3,[993,1050,1000],{"class":999},[993,1052,1004],{"class":1003},[993,1054,1055],{"class":1007}," toFile",[993,1057,1011],{"class":1003},[993,1059,1014],{"class":999},[993,1061,1017],{"class":1003},[993,1063,1064],{"class":1020},"@noy-db\u002Fto-file",[993,1066,1024],{"class":1003},[993,1068,1070],{"class":995,"line":1069},4,[993,1071,1073],{"emptyLinePlaceholder":1072},true,"\n",[993,1075,1077,1081,1084],{"class":995,"line":1076},5,[993,1078,1080],{"class":1079},"spNyl","const",[993,1082,1083],{"class":1007}," store ",[993,1085,1086],{"class":1003},"=\n",[993,1088,1090,1093,1096,1099,1101,1104],{"class":995,"line":1089},6,[993,1091,1092],{"class":1003},"  typeof",[993,1094,1095],{"class":1007}," indexedDB ",[993,1097,1098],{"class":1003},"!==",[993,1100,1017],{"class":1003},[993,1102,1103],{"class":1020},"undefined",[993,1105,1024],{"class":1003},[993,1107,1109,1112,1115],{"class":995,"line":1108},7,[993,1110,1111],{"class":1003},"    ?",[993,1113,1034],{"class":1114},"s2Zo4",[993,1116,1117],{"class":1007},"()\n",[993,1119,1121,1124,1126,1129,1132,1136,1139,1141,1144,1147,1149],{"class":995,"line":1120},8,[993,1122,1123],{"class":1003},"    :",[993,1125,1055],{"class":1114},[993,1127,1128],{"class":1007},"(",[993,1130,1131],{"class":1003},"{",[993,1133,1135],{"class":1134},"swJcz"," dir",[993,1137,1138],{"class":1003},":",[993,1140,1017],{"class":1003},[993,1142,1143],{"class":1020},".\u002Fdata",[993,1145,1146],{"class":1003},"'",[993,1148,1011],{"class":1003},[993,1150,1151],{"class":1007},")\n",[993,1153,1155],{"class":995,"line":1154},9,[993,1156,1073],{"emptyLinePlaceholder":1072},[993,1158,1160,1162,1165,1168,1171,1173,1175,1177,1180,1183,1186,1188,1191,1194],{"class":995,"line":1159},10,[993,1161,1080],{"class":1079},[993,1163,1164],{"class":1007}," db ",[993,1166,1167],{"class":1003},"=",[993,1169,1170],{"class":999}," await",[993,1172,1008],{"class":1114},[993,1174,1128],{"class":1007},[993,1176,1131],{"class":1003},[993,1178,1179],{"class":1007}," store",[993,1181,1182],{"class":1003},",",[993,1184,1185],{"class":1007}," user",[993,1187,1182],{"class":1003},[993,1189,1190],{"class":1007}," secret ",[993,1192,1193],{"class":1003},"}",[993,1195,1151],{"class":1007},[938,1197,1198,1201,1202,1205,1206,1209],{},[951,1199,1200],{},"Prefer feature detection over platform sniffing."," ",[942,1203,1204],{},"typeof indexedDB !== 'undefined'"," survives bundling, SSR and test environments; ",[942,1207,1208],{},"process.platform"," does not.",[960,1211,1213],{"id":1212},"multi-store-topologies","Multi-store topologies",[938,1215,1216],{},"Two composition seams, for when one store is not enough:",[1218,1219,1220,1240],"ul",{},[1221,1222,1223,1228,1229,1232,1233,1232,1236,1239],"li",{},[951,1224,1225],{},[942,1226,1227],{},"routeStore()"," multiplexes one handle across many backends by rule — per collection, per vault prefix, blobs to object storage, age-based cold tiering, quota overflow. It returns a real store plus a runtime control surface (",[942,1230,1231],{},"override",", ",[942,1234,1235],{},"suspend",[942,1237,1238],{},"compact","), so routes can be swapped or suspended without rebuilding the instance.",[1221,1241,1242,1247,1248,1251],{},[951,1243,1244],{},[942,1245,1246],{},"withSync({ sync: [...] })"," takes a primary remote, or an array of ",[942,1249,1250],{},"{ store, role }"," targets — so \"local platform store plus cloud replica\" is expressible per platform.",[938,1253,1254],{},"They nest freely. You can meter a routed store, or route to metered stores:",[984,1256,1258],{"className":986,"code":1257,"language":988,"meta":989,"style":989},"const pg = toMeter(toPostgres({ \u002F* … *\u002F }))\nconst s3 = toMeter(toAwsS3({ \u002F* … *\u002F }))\nconst store = routeStore({ default: pg, blobs: s3 })\n",[942,1259,1260,1290,1316],{"__ignoreMap":989},[993,1261,1262,1264,1267,1269,1272,1274,1277,1279,1281,1285,1287],{"class":995,"line":996},[993,1263,1080],{"class":1079},[993,1265,1266],{"class":1007}," pg ",[993,1268,1167],{"class":1003},[993,1270,1271],{"class":1114}," toMeter",[993,1273,1128],{"class":1007},[993,1275,1276],{"class":1114},"toPostgres",[993,1278,1128],{"class":1007},[993,1280,1131],{"class":1003},[993,1282,1284],{"class":1283},"sHwdD"," \u002F* … *\u002F",[993,1286,1011],{"class":1003},[993,1288,1289],{"class":1007},"))\n",[993,1291,1292,1294,1297,1299,1301,1303,1306,1308,1310,1312,1314],{"class":995,"line":1027},[993,1293,1080],{"class":1079},[993,1295,1296],{"class":1007}," s3 ",[993,1298,1167],{"class":1003},[993,1300,1271],{"class":1114},[993,1302,1128],{"class":1007},[993,1304,1305],{"class":1114},"toAwsS3",[993,1307,1128],{"class":1007},[993,1309,1131],{"class":1003},[993,1311,1284],{"class":1283},[993,1313,1011],{"class":1003},[993,1315,1289],{"class":1007},[993,1317,1318,1320,1322,1324,1327,1329,1331,1334,1336,1339,1341,1344,1346,1348,1350],{"class":995,"line":1048},[993,1319,1080],{"class":1079},[993,1321,1083],{"class":1007},[993,1323,1167],{"class":1003},[993,1325,1326],{"class":1114}," routeStore",[993,1328,1128],{"class":1007},[993,1330,1131],{"class":1003},[993,1332,1333],{"class":1134}," default",[993,1335,1138],{"class":1003},[993,1337,1338],{"class":1007}," pg",[993,1340,1182],{"class":1003},[993,1342,1343],{"class":1134}," blobs",[993,1345,1138],{"class":1003},[993,1347,1296],{"class":1007},[993,1349,1193],{"class":1003},[993,1351,1151],{"class":1007},[960,1353,1355],{"id":1354},"a-stores-locality-changes-what-an-unlock-error-means","A store's locality changes what an unlock error MEANS",[938,1357,1358],{},"This is a store-choice consequence, and it is easy to get wrong because the error is identical either way.",[938,1360,1361,1362,1365,1366,1369],{},"When an unlock fails — a ",[942,1363,1364],{},"KeyringTamperedError",", say — many apps translate it into advice. ",[951,1367,1368],{},"That translation is only valid for a local store",", and it must branch on two things, in this order.",[938,1371,1372,1201,1375,1378,1379,1383,1384,1387,1388,1391,1392,1395,1396,1399,1400,1232,1403,1232,1406,1409],{},[951,1373,1374],{},"1. The reason code, not the message.",[942,1376,1377],{},"error.details.reason"," is a discriminated label, and one value is explicitly ",[1380,1381,1382],"em",{},"not"," an attack: ",[942,1385,1386],{},"'format-superseded'"," means the file declares an older keyring format than this build writes — a format transition. Say so, and name ",[942,1389,1390],{},"error.details.format.from"," → ",[942,1393,1394],{},".to",". The ",[1380,1397,1398],{},"absence"," reasons — ",[942,1401,1402],{},"'canary-missing'",[942,1404,1405],{},"'roster-key-missing'",[942,1407,1408],{},"'roster-tag-missing'"," — are genuinely unclassifiable: a store that stripped a field and a file written before the field existed are byte-identical, so they must be presented as neither an upgrade nor an attack.",[938,1411,1412,1415,1416,1232,1419,1422],{},[951,1413,1414],{},"2. Where the store is."," Advice that is correct for a local store (",[942,1417,1418],{},"to-browser-idb",[942,1420,1421],{},"to-file",") can be harmful for a remote one:",[1424,1425,1426,1442],"table",{},[1427,1428,1429],"thead",{},[1430,1431,1432,1436,1439],"tr",{},[1433,1434,1435],"th",{},"store",[1433,1437,1438],{},"the same error can mean",[1433,1440,1441],{},"so \"remove the vault from this device\"",[1443,1444,1445,1462,1482],"tbody",{},[1430,1446,1447,1456,1459],{},[1448,1449,1450,1451,1232,1453,1455],"td",{},"local (",[942,1452,1418],{},[942,1454,1421],{},")",[1448,1457,1458],{},"the device is already compromised",[1448,1460,1461],{},"is reasonable — there is no evidence to preserve",[1430,1463,1464,1474,1479],{},[1448,1465,1466,1467,1232,1470,1473],{},"remote (",[942,1468,1469],{},"by-peer",[942,1471,1472],{},"to-rest",", a LAN daemon)",[1448,1475,1476],{},[951,1477,1478],{},"the store altered your data",[1448,1480,1481],{},"⛔ destroys the only copy of the evidence",[1430,1483,1484,1487,1490],{},[1448,1485,1486],{},"a thin guest holding nothing locally",[1448,1488,1489],{},"same as remote",[1448,1491,1492,1493,1496],{},"⛔ is also ",[1380,1494,1495],{},"meaningless"," — there is nothing to remove",[938,1498,1499,1500,1201,1503,1506,1507,1510],{},"⚠️ ",[951,1501,1502],{},"The remote case is not hypothetical and it does not need a server.",[942,1504,1505],{},"peerStore()"," from ",[942,1508,1509],{},"@noy-db\u002Fby-peer"," routes every store operation to another machine, so a guest opening a vault served by someone else's device is on a remote, separately administered store — with no cloud involved.",[938,1512,1513,1514,1201,1517,1520],{},"⭐ ",[951,1515,1516],{},"In both branches, say what to preserve before removing anything.",[1380,1518,1519],{},"\"Export or copy the raw store contents first, then remove\""," is safe under either premise and no less actionable. The safe advice does not depend on knowing which case you are in — which is the point, because for the absence reasons you cannot know.",[960,1522,1524],{"id":1523},"the-platform-matrix-honestly","The platform matrix, honestly",[1424,1526,1527,1540],{},[1427,1528,1529],{},[1430,1530,1531,1534,1537],{},[1433,1532,1533],{},"Platform",[1433,1535,1536],{},"Store",[1433,1538,1539],{},"Status",[1443,1541,1542,1554,1565,1577,1591,1604],{},[1430,1543,1544,1547,1551],{},[1448,1545,1546],{},"Browser",[1448,1548,1549],{},[942,1550,1043],{},[1448,1552,1553],{},"ships",[1430,1555,1556,1559,1563],{},[1448,1557,1558],{},"Node \u002F Electron main \u002F CLI",[1448,1560,1561],{},[942,1562,1064],{},[1448,1564,1553],{},[1430,1566,1567,1570,1575],{},[1448,1568,1569],{},"Tests, REPL, hot cache",[1448,1571,1572],{},[942,1573,1574],{},"@noy-db\u002Fto-memory",[1448,1576,1553],{},[1430,1578,1579,1582,1589],{},[1448,1580,1581],{},"SQL \u002F cloud \u002F remote filesystems",[1448,1583,1584,1585,1588],{},"the ",[942,1586,1587],{},"noy-db-to"," family",[1448,1590,1553],{},[1430,1592,1593,1596,1601],{},[1448,1594,1595],{},"macOS (Node)",[1448,1597,1598],{},[942,1599,1600],{},"@noy-db\u002Fto-icloud",[1448,1602,1603],{},"ships — with a caveat below",[1430,1605,1606,1611,1618],{},[1448,1607,1608],{},[951,1609,1610],{},"iOS \u002F iPadOS",[1448,1612,1613],{},[951,1614,1615],{},[942,1616,1617],{},"to-cloudkit",[1448,1619,1620],{},[951,1621,1622],{},"not shipped",[938,1624,1625,1201,1628,1631,1632,1639,1640,1642,1643,1645],{},[951,1626,1627],{},"The Apple gap is real, and worth knowing before you design around it.",[942,1629,1630],{},"to-icloud"," is Node-on-macOS only: it reaches the iCloud Drive folder through the filesystem. iOS and iPadOS have no equivalent folder access, so they need CloudKit — which is deferred (",[1633,1634,1638],"a",{"href":1635,"rel":1636},"https:\u002F\u002Fgithub.com\u002Fnoy-db\u002Fto\u002Fissues\u002F16",[1637],"nofollow","noy-db-to#16","). Until it ships, an iOS target has no first-party Apple-native store. Use a cloud store from the ",[942,1641,1587],{}," family, or ",[942,1644,1418],{}," inside a web view.",[938,1647,1648,1649,1651,1652,1655,1656,1661],{},"One further caveat on ",[942,1650,1630],{},": modern macOS evicts to APFS dataless files rather than ",[942,1653,1654],{},".icloud"," stubs, which makes its eviction detection macOS-version-sensitive (",[1633,1657,1660],{"href":1658,"rel":1659},"https:\u002F\u002Fgithub.com\u002Fnoy-db\u002Fto\u002Fissues\u002F15",[1637],"noy-db-to#15",").",[960,1663,1665],{"id":1664},"see-also","See also",[1218,1667,1668,1677,1686,1692],{},[1221,1669,1670,1676],{},[1633,1671,1673,1675],{"href":1672},".\u002F",[942,1674,944],{}," family index"," — the full storage-destination catalog",[1221,1678,1679,1682,1683,1685],{},[1633,1680,808],{"href":1681},"..\u002F..\u002Fservices\u002Frouting"," — ",[942,1684,1227],{}," and its routing axes",[1221,1687,1688,1691],{},[1633,1689,864],{"href":1690},"..\u002F..\u002Fservices\u002Fsync"," — replica topologies",[1221,1693,1694,1698],{},[1633,1695,1697],{"href":1696},"..\u002F..\u002Fservices\u002Fstorage-capability-matrix","storage capability matrix"," — what each backend actually guarantees",[1700,1701,1702],"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 .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);}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":989,"searchDepth":1048,"depth":1048,"links":1704},[1705,1706,1707,1708,1709,1710],{"id":962,"depth":1027,"text":963},{"id":981,"depth":1027,"text":982},{"id":1212,"depth":1027,"text":1213},{"id":1354,"depth":1027,"text":1355},{"id":1523,"depth":1027,"text":1524},{"id":1664,"depth":1027,"text":1665},null,"How to pick a to-* store per platform, why the hub ships no pickStore() helper, and the one real gap in the platform matrix.","md",{},{"title":366,"icon":369},"family",{"title":366,"description":1712},"stable","important","U6nhd4G86yO7B34hczijI4ErYzT3Ues4plS9EXMDLbc",1791896592475]