[{"data":1,"prerenderedAt":3042},["ShallowReactive",2],{"navigation":3,"\u002Fservices\u002Fcover":927,"mdc-8bt02u-key":2967,"mdc-rqjrkm-key":2984,"mdc--agbig8-key":3006},[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":645,"access":12,"apiToc":929,"body":930,"category":2958,"description":2959,"extension":2960,"meta":2961,"navigation":2958,"nest":2962,"path":646,"seo":2963,"sinceVersion":2958,"status":2964,"stem":647,"subtitle":2958,"tier":2965,"tocExternal":2958,"__hash__":2966},"docs\u002Fservices\u002Fcover.md",false,{"type":931,"value":932,"toc":2934},"minimark",[933,936,940,945,971,986,989,993,996,1148,1166,1170,1173,1191,1195,1385,1412,1416,1421,1659,1674,1678,1688,1768,1774,1783,1939,1968,2226,2230,2238,2328,2341,2362,2382,2389,2393,2398,2404,2459,2465,2484,2488,2579,2583,2649,2653,2724,2728,2795,2817,2820,2825,2900,2904,2930],[934,935,645],"h1",{"id":645},[937,938],"service-meta",{":rows":939},"[{\"label\":\"Subpath\",\"value\":\"`@noy-db\u002Fhub` (root export)\"},{\"label\":\"Type\",\"value\":\"Core feature — enabled with the `cover` option on `NoydbOptions`.\"},{\"label\":\"Cross-cuts\",\"value\":\"`@noy-db\u002Fhub` core (vault storage + `.noydb` bundle header format), every storage adapter (reads go through the plain `get`\u002F`put` contract, no adapter-specific code)\"}]",[941,942,944],"h2",{"id":943},"what-it-is","What it is",[946,947,948,949,953,954,958,959,966,967,970],"p",{},"noy-db's core guarantee is that storage backends only ever see ciphertext: every record — and by default every label on a ",[950,951,952],"strong",{},"vault"," (noy-db's unit of encrypted storage; see ",[955,956,957],"a",{"href":48},"vaults and collections",") — is encrypted under a key the owner must first supply. That is great for confidentiality, but it means a ",[955,960,961,965],{"href":629},[962,963,964],"code",{},".noydb"," bundle"," dropped on a USB stick, or a list of vaults in a multi-tenant picker, has nothing readable at all: no name, no icon, not even a timestamp. See ",[955,968,21],{"href":969},"..\u002Fcore\u002Fnoydb\u002Fenclave"," for the key model this sits below.",[946,972,973,975,976,979,980,982,983,985],{},[962,974,645],{}," closes that specific gap with a small, deliberately narrow plaintext label. The developer opts a vault into the feature via ",[962,977,978],{},"NoydbOptions","; the vault's owner then sets a handful of fields — name, description, icon, locale — that stay readable without unlocking the vault or decrypting a ",[962,981,964],{}," bundle (see ",[955,984,629],{"href":629}," for the container format). Everything else about the vault stays exactly as encrypted as before: the envelope is a label, not a window into the data.",[946,987,988],{},"Every published field is one the owner explicitly chose to publish. The envelope deliberately excludes anything an attacker could use to infer activity over time — record counts, user counts, last-accessed timestamps — so opting in never turns into an unintended audit surface.",[941,990,992],{"id":991},"whats-in-scope","What's in scope",[946,994,995],{},"Owner-curated, static fields:",[997,998,999,1015],"table",{},[1000,1001,1002],"thead",{},[1003,1004,1005,1009,1012],"tr",{},[1006,1007,1008],"th",{},"Field",[1006,1010,1011],{},"Type",[1006,1013,1014],{},"Notes",[1016,1017,1018,1038,1055,1082,1099,1114,1129],"tbody",{},[1003,1019,1020,1026,1031],{},[1021,1022,1023],"td",{},[962,1024,1025],{},"name",[1021,1027,1028],{},[962,1029,1030],{},"string | Record\u003Cstring, string>",[1021,1032,1033,1034,1037],{},"Vault display name. Pass a plain string for a single-locale label, or a locale → string map (",[962,1035,1036],{},"{ en: '…', th: '…' }",") for multi-locale.",[1003,1039,1040,1045,1049],{},[1021,1041,1042],{},[962,1043,1044],{},"description",[1021,1046,1047],{},[962,1048,1030],{},[1021,1050,1051,1052,1054],{},"Free-form one or two sentences. Same single-string \u002F locale-map shape as ",[962,1053,1025],{},".",[1003,1056,1057,1062,1067],{},[1021,1058,1059],{},[962,1060,1061],{},"icon",[1021,1063,1064],{},[962,1065,1066],{},"string",[1021,1068,1069,1070,1073,1074,1077,1078,1081],{},"Inline ",[962,1071,1072],{},"data:"," URL (",[962,1075,1076],{},"data:image\u002Fpng;base64,…"," or ",[962,1079,1080],{},"data:image\u002Fsvg+xml;base64,…","). External URLs are not accepted. Capped at 256 KB of encoded data-URL string length by default. PNG and SVG only.",[1003,1083,1084,1089,1092],{},[1021,1085,1086],{},[962,1087,1088],{},"createdAt",[1021,1090,1091],{},"ISO-8601 string",[1021,1093,1094,1095,1098],{},"Set on the first ",[962,1096,1097],{},"setCover"," write; immutable thereafter — the developer\u002Fowner cannot set it directly.",[1003,1100,1101,1106,1108],{},[1021,1102,1103],{},[962,1104,1105],{},"updatedAt",[1021,1107,1091],{},[1021,1109,1110,1111,1113],{},"Refreshed on every ",[962,1112,1097],{}," call.",[1003,1115,1116,1121,1126],{},[1021,1117,1118],{},[962,1119,1120],{},"version",[1021,1122,1123],{},[962,1124,1125],{},"number",[1021,1127,1128],{},"Monotonic counter starting at 1; increments on every successful write. Useful as a cheap cache-invalidation signal.",[1003,1130,1131,1136,1139],{},[1021,1132,1133],{},[962,1134,1135],{},"defaultLocale",[1021,1137,1138],{},"BCP-47 string",[1021,1140,1141,1142,1144,1145,1147],{},"Fallback locale a reader falls back to when the requested locale isn't in a ",[962,1143,1025],{},"\u002F",[962,1146,1044],{}," map.",[946,1149,1150,1152,1153,1155,1156,1158,1159,1161,1162,1165],{},[962,1151,1088],{},", ",[962,1154,1105],{},", and ",[962,1157,1120],{}," are hub-managed — the owner cannot set them through ",[962,1160,1097],{},"; including them in a schema's ",[962,1163,1164],{},"fields"," list is a no-op.",[941,1167,1169],{"id":1168},"whats-out-of-scope","What's out of scope",[946,1171,1172],{},"These are deliberately absent from the envelope — they would make it an audit surface rather than a label:",[1174,1175,1176,1180,1183],"ul",{},[1177,1178,1179],"li",{},"Record counts, per-collection record counts, user counts, user lists.",[1177,1181,1182],{},"Any field that updates on every read or write (last-accessed-at) — that pattern leaks activity over time to anyone who can list the bundle or vault.",[1177,1184,1185,1186,1190],{},"A signature or HMAC over the envelope (see ",[955,1187,1189],{"href":1188},"#limits-gotchas","Limits & gotchas"," below — v1 is a plaintext, untrusted hint, not a signed claim).",[941,1192,1194],{"id":1193},"setup","Setup",[1196,1197,1202],"pre",{"className":1198,"code":1199,"language":1200,"meta":1201,"style":1201},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createNoydb } from '@noy-db\u002Fhub'\nimport { toMemory } from '@noy-db\u002Fto-memory'\n\nconst db = await createNoydb({\n  store: toMemory(),\n  user: 'alice',\n  secret: 'a-strong-secret',\n  \u002F\u002F shorthand — every field above, default caps:\n  cover: true,\n  \u002F\u002F or narrow what the owner is allowed to set:\n  \u002F\u002F cover: { fields: ['name', 'icon'], maxIconBytes: 64 * 1024 },\n})\n","ts","",[962,1203,1204,1237,1258,1265,1290,1308,1326,1343,1350,1364,1370,1376],{"__ignoreMap":1201},[1205,1206,1209,1213,1217,1221,1224,1227,1230,1234],"span",{"class":1207,"line":1208},"line",1,[1205,1210,1212],{"class":1211},"s7zQu","import",[1205,1214,1216],{"class":1215},"sMK4o"," {",[1205,1218,1220],{"class":1219},"sTEyZ"," createNoydb",[1205,1222,1223],{"class":1215}," }",[1205,1225,1226],{"class":1211}," from",[1205,1228,1229],{"class":1215}," '",[1205,1231,1233],{"class":1232},"sfazB","@noy-db\u002Fhub",[1205,1235,1236],{"class":1215},"'\n",[1205,1238,1240,1242,1244,1247,1249,1251,1253,1256],{"class":1207,"line":1239},2,[1205,1241,1212],{"class":1211},[1205,1243,1216],{"class":1215},[1205,1245,1246],{"class":1219}," toMemory",[1205,1248,1223],{"class":1215},[1205,1250,1226],{"class":1211},[1205,1252,1229],{"class":1215},[1205,1254,1255],{"class":1232},"@noy-db\u002Fto-memory",[1205,1257,1236],{"class":1215},[1205,1259,1261],{"class":1207,"line":1260},3,[1205,1262,1264],{"emptyLinePlaceholder":1263},true,"\n",[1205,1266,1268,1272,1275,1278,1281,1284,1287],{"class":1207,"line":1267},4,[1205,1269,1271],{"class":1270},"spNyl","const",[1205,1273,1274],{"class":1219}," db ",[1205,1276,1277],{"class":1215},"=",[1205,1279,1280],{"class":1211}," await",[1205,1282,1220],{"class":1283},"s2Zo4",[1205,1285,1286],{"class":1219},"(",[1205,1288,1289],{"class":1215},"{\n",[1205,1291,1293,1297,1300,1302,1305],{"class":1207,"line":1292},5,[1205,1294,1296],{"class":1295},"swJcz","  store",[1205,1298,1299],{"class":1215},":",[1205,1301,1246],{"class":1283},[1205,1303,1304],{"class":1219},"()",[1205,1306,1307],{"class":1215},",\n",[1205,1309,1311,1314,1316,1318,1321,1324],{"class":1207,"line":1310},6,[1205,1312,1313],{"class":1295},"  user",[1205,1315,1299],{"class":1215},[1205,1317,1229],{"class":1215},[1205,1319,1320],{"class":1232},"alice",[1205,1322,1323],{"class":1215},"'",[1205,1325,1307],{"class":1215},[1205,1327,1329,1332,1334,1336,1339,1341],{"class":1207,"line":1328},7,[1205,1330,1331],{"class":1295},"  secret",[1205,1333,1299],{"class":1215},[1205,1335,1229],{"class":1215},[1205,1337,1338],{"class":1232},"a-strong-secret",[1205,1340,1323],{"class":1215},[1205,1342,1307],{"class":1215},[1205,1344,1346],{"class":1207,"line":1345},8,[1205,1347,1349],{"class":1348},"sHwdD","  \u002F\u002F shorthand — every field above, default caps:\n",[1205,1351,1353,1356,1358,1362],{"class":1207,"line":1352},9,[1205,1354,1355],{"class":1295},"  cover",[1205,1357,1299],{"class":1215},[1205,1359,1361],{"class":1360},"sfNiH"," true",[1205,1363,1307],{"class":1215},[1205,1365,1367],{"class":1207,"line":1366},10,[1205,1368,1369],{"class":1348},"  \u002F\u002F or narrow what the owner is allowed to set:\n",[1205,1371,1373],{"class":1207,"line":1372},11,[1205,1374,1375],{"class":1348},"  \u002F\u002F cover: { fields: ['name', 'icon'], maxIconBytes: 64 * 1024 },\n",[1205,1377,1379,1382],{"class":1207,"line":1378},12,[1205,1380,1381],{"class":1215},"}",[1205,1383,1384],{"class":1219},")\n",[946,1386,1387,1388,1390,1391,1144,1394,1397,1398,1401,1402,1404,1405,1408,1409,1411],{},"Off by default. A vault written by a hub without ",[962,1389,645],{}," set carries no envelope: ",[962,1392,1393],{},"getCover",[962,1395,1396],{},"readCover"," on it return ",[962,1399,1400],{},"undefined",", and calling ",[962,1403,1097],{}," throws ",[962,1406,1407],{},"ValidationError"," (importable from ",[962,1410,1233],{},").",[941,1413,1415],{"id":1414},"usage","Usage",[1417,1418,1420],"h3",{"id":1419},"owner-sets-the-label-a-caller-reads-it-back","Owner sets the label, a caller reads it back",[1196,1422,1424],{"className":1198,"code":1423,"language":1200,"meta":1201,"style":1201},"await db.openVault('acme')\n\nconst envelope = await db.setCover('acme', {\n  name: { en: 'Acme 2026 Tax Records', th: 'บันทึกภาษี Acme 2026' },\n  description: 'Q1–Q4 invoices, audit-ready.',\n  icon: 'data:image\u002Fsvg+xml;base64,PHN2ZyB4bWxucz0i…',\n  defaultLocale: 'en',\n})\n\u002F\u002F → { _noydb_public: 1, version: 1, name: { en: '…', th: '…' },\n\u002F\u002F     description: '…', icon: '…', defaultLocale: 'en',\n\u002F\u002F     createdAt: '2026-07-08T12:00:00.000Z', updatedAt: '2026-07-08T12:00:00.000Z' }\n\nconst label = await db.getCover('acme', { locale: 'th' })\n\u002F\u002F → { _noydb_public: 1, version: 1, name: 'บันทึกภาษี Acme 2026',\n\u002F\u002F     description: 'Q1–Q4 invoices, audit-ready.', icon: '…',\n\u002F\u002F     defaultLocale: 'en', createdAt: '…', updatedAt: '…' }\n",[962,1425,1426,1450,1454,1485,1523,1539,1555,1571,1577,1582,1587,1592,1596,1641,1647,1653],{"__ignoreMap":1201},[1205,1427,1428,1431,1434,1436,1439,1441,1443,1446,1448],{"class":1207,"line":1208},[1205,1429,1430],{"class":1211},"await",[1205,1432,1433],{"class":1219}," db",[1205,1435,1054],{"class":1215},[1205,1437,1438],{"class":1283},"openVault",[1205,1440,1286],{"class":1219},[1205,1442,1323],{"class":1215},[1205,1444,1445],{"class":1232},"acme",[1205,1447,1323],{"class":1215},[1205,1449,1384],{"class":1219},[1205,1451,1452],{"class":1207,"line":1239},[1205,1453,1264],{"emptyLinePlaceholder":1263},[1205,1455,1456,1458,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1482],{"class":1207,"line":1260},[1205,1457,1271],{"class":1270},[1205,1459,1460],{"class":1219}," envelope ",[1205,1462,1277],{"class":1215},[1205,1464,1280],{"class":1211},[1205,1466,1433],{"class":1219},[1205,1468,1054],{"class":1215},[1205,1470,1097],{"class":1283},[1205,1472,1286],{"class":1219},[1205,1474,1323],{"class":1215},[1205,1476,1445],{"class":1232},[1205,1478,1323],{"class":1215},[1205,1480,1481],{"class":1215},",",[1205,1483,1484],{"class":1215}," {\n",[1205,1486,1487,1490,1492,1494,1497,1499,1501,1504,1506,1508,1511,1513,1515,1518,1520],{"class":1207,"line":1267},[1205,1488,1489],{"class":1295},"  name",[1205,1491,1299],{"class":1215},[1205,1493,1216],{"class":1215},[1205,1495,1496],{"class":1295}," en",[1205,1498,1299],{"class":1215},[1205,1500,1229],{"class":1215},[1205,1502,1503],{"class":1232},"Acme 2026 Tax Records",[1205,1505,1323],{"class":1215},[1205,1507,1481],{"class":1215},[1205,1509,1510],{"class":1295}," th",[1205,1512,1299],{"class":1215},[1205,1514,1229],{"class":1215},[1205,1516,1517],{"class":1232},"บันทึกภาษี Acme 2026",[1205,1519,1323],{"class":1215},[1205,1521,1522],{"class":1215}," },\n",[1205,1524,1525,1528,1530,1532,1535,1537],{"class":1207,"line":1292},[1205,1526,1527],{"class":1295},"  description",[1205,1529,1299],{"class":1215},[1205,1531,1229],{"class":1215},[1205,1533,1534],{"class":1232},"Q1–Q4 invoices, audit-ready.",[1205,1536,1323],{"class":1215},[1205,1538,1307],{"class":1215},[1205,1540,1541,1544,1546,1548,1551,1553],{"class":1207,"line":1310},[1205,1542,1543],{"class":1295},"  icon",[1205,1545,1299],{"class":1215},[1205,1547,1229],{"class":1215},[1205,1549,1550],{"class":1232},"data:image\u002Fsvg+xml;base64,PHN2ZyB4bWxucz0i…",[1205,1552,1323],{"class":1215},[1205,1554,1307],{"class":1215},[1205,1556,1557,1560,1562,1564,1567,1569],{"class":1207,"line":1328},[1205,1558,1559],{"class":1295},"  defaultLocale",[1205,1561,1299],{"class":1215},[1205,1563,1229],{"class":1215},[1205,1565,1566],{"class":1232},"en",[1205,1568,1323],{"class":1215},[1205,1570,1307],{"class":1215},[1205,1572,1573,1575],{"class":1207,"line":1345},[1205,1574,1381],{"class":1215},[1205,1576,1384],{"class":1219},[1205,1578,1579],{"class":1207,"line":1352},[1205,1580,1581],{"class":1348},"\u002F\u002F → { _noydb_public: 1, version: 1, name: { en: '…', th: '…' },\n",[1205,1583,1584],{"class":1207,"line":1366},[1205,1585,1586],{"class":1348},"\u002F\u002F     description: '…', icon: '…', defaultLocale: 'en',\n",[1205,1588,1589],{"class":1207,"line":1372},[1205,1590,1591],{"class":1348},"\u002F\u002F     createdAt: '2026-07-08T12:00:00.000Z', updatedAt: '2026-07-08T12:00:00.000Z' }\n",[1205,1593,1594],{"class":1207,"line":1378},[1205,1595,1264],{"emptyLinePlaceholder":1263},[1205,1597,1599,1601,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1629,1631,1633,1635,1637,1639],{"class":1207,"line":1598},13,[1205,1600,1271],{"class":1270},[1205,1602,1603],{"class":1219}," label ",[1205,1605,1277],{"class":1215},[1205,1607,1280],{"class":1211},[1205,1609,1433],{"class":1219},[1205,1611,1054],{"class":1215},[1205,1613,1393],{"class":1283},[1205,1615,1286],{"class":1219},[1205,1617,1323],{"class":1215},[1205,1619,1445],{"class":1232},[1205,1621,1323],{"class":1215},[1205,1623,1481],{"class":1215},[1205,1625,1216],{"class":1215},[1205,1627,1628],{"class":1295}," locale",[1205,1630,1299],{"class":1215},[1205,1632,1229],{"class":1215},[1205,1634,1006],{"class":1232},[1205,1636,1323],{"class":1215},[1205,1638,1223],{"class":1215},[1205,1640,1384],{"class":1219},[1205,1642,1644],{"class":1207,"line":1643},14,[1205,1645,1646],{"class":1348},"\u002F\u002F → { _noydb_public: 1, version: 1, name: 'บันทึกภาษี Acme 2026',\n",[1205,1648,1650],{"class":1207,"line":1649},15,[1205,1651,1652],{"class":1348},"\u002F\u002F     description: 'Q1–Q4 invoices, audit-ready.', icon: '…',\n",[1205,1654,1656],{"class":1207,"line":1655},16,[1205,1657,1658],{"class":1348},"\u002F\u002F     defaultLocale: 'en', createdAt: '…', updatedAt: '…' }\n",[946,1660,1661,1662,1665,1666,1144,1668,1670,1671,1673],{},"Passing ",[962,1663,1664],{},"locale"," resolves ",[962,1667,1025],{},[962,1669,1044],{}," to plain strings for that locale; omitting ",[962,1672,1664],{}," returns the raw map so a multilingual picker can render every translation itself.",[1417,1675,1677],{"id":1676},"reading-without-unlocking-the-vault","Reading without unlocking the vault",[946,1679,1680,1681,1683,1684,1687],{},"The whole point of the envelope is that it works without a secret or an open ",[962,1682,62],{}," session — pass the same ",[962,1685,1686],{},"store"," adapter directly:",[1196,1689,1691],{"className":1198,"code":1690,"language":1200,"meta":1201,"style":1201},"import { readCover } from '@noy-db\u002Fhub\u002Fcover'\n\nconst label = await readCover(store, 'acme', { locale: 'en' })\n\u002F\u002F → { name: 'Acme 2026 Tax Records', description: 'Q1–Q4 invoices, audit-ready.', … }\n\u002F\u002F or `undefined` if the vault has no envelope written\n",[962,1692,1693,1713,1717,1758,1763],{"__ignoreMap":1201},[1205,1694,1695,1697,1699,1702,1704,1706,1708,1711],{"class":1207,"line":1208},[1205,1696,1212],{"class":1211},[1205,1698,1216],{"class":1215},[1205,1700,1701],{"class":1219}," readCover",[1205,1703,1223],{"class":1215},[1205,1705,1226],{"class":1211},[1205,1707,1229],{"class":1215},[1205,1709,1710],{"class":1232},"@noy-db\u002Fhub\u002Fcover",[1205,1712,1236],{"class":1215},[1205,1714,1715],{"class":1207,"line":1239},[1205,1716,1264],{"emptyLinePlaceholder":1263},[1205,1718,1719,1721,1723,1725,1727,1729,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756],{"class":1207,"line":1260},[1205,1720,1271],{"class":1270},[1205,1722,1603],{"class":1219},[1205,1724,1277],{"class":1215},[1205,1726,1280],{"class":1211},[1205,1728,1701],{"class":1283},[1205,1730,1731],{"class":1219},"(store",[1205,1733,1481],{"class":1215},[1205,1735,1229],{"class":1215},[1205,1737,1445],{"class":1232},[1205,1739,1323],{"class":1215},[1205,1741,1481],{"class":1215},[1205,1743,1216],{"class":1215},[1205,1745,1628],{"class":1295},[1205,1747,1299],{"class":1215},[1205,1749,1229],{"class":1215},[1205,1751,1566],{"class":1232},[1205,1753,1323],{"class":1215},[1205,1755,1223],{"class":1215},[1205,1757,1384],{"class":1219},[1205,1759,1760],{"class":1207,"line":1267},[1205,1761,1762],{"class":1348},"\u002F\u002F → { name: 'Acme 2026 Tax Records', description: 'Q1–Q4 invoices, audit-ready.', … }\n",[1205,1764,1765],{"class":1207,"line":1292},[1205,1766,1767],{"class":1348},"\u002F\u002F or `undefined` if the vault has no envelope written\n",[1417,1769,1771,1772,965],{"id":1770},"snapshotting-into-a-noydb-bundle","Snapshotting into a ",[962,1773,964],{},[946,1775,1776,1779,1780,1782],{},[962,1777,1778],{},"writePod()"," (see ",[955,1781,629],{"href":629},") automatically snapshots the source vault's current envelope into the bundle's plaintext header, so a recipient can read the label before decrypting anything:",[1196,1784,1786],{"className":1198,"code":1785,"language":1200,"meta":1201,"style":1201},"import { writePod, readPod, readPodHeader } from '@noy-db\u002Fhub\u002Fpod'\nimport { readPodCover } from '@noy-db\u002Fhub'\n\nconst bytes = await writePod(vault)\n\n\u002F\u002F Pre-decompression, pre-decryption read — cheap, synchronous:\nconst header = readPodHeader(bytes)\nheader.publicEnvelope\n\u002F\u002F → { name: '…', description: '…', … } or undefined\n\u002F\u002F The field keeps its frozen wire name `publicEnvelope` (#799), not `cover`.\n\n\u002F\u002F Equivalent helper when you only care about the label:\nreadPodCover(bytes, { locale: 'en' })\n\u002F\u002F → { name: 'Acme 2026 Tax Records', description: 'Q1–Q4 invoices, audit-ready.', … }\n",[962,1787,1788,1818,1837,1841,1857,1861,1866,1880,1890,1895,1900,1904,1909,1935],{"__ignoreMap":1201},[1205,1789,1790,1792,1794,1797,1799,1802,1804,1807,1809,1811,1813,1816],{"class":1207,"line":1208},[1205,1791,1212],{"class":1211},[1205,1793,1216],{"class":1215},[1205,1795,1796],{"class":1219}," writePod",[1205,1798,1481],{"class":1215},[1205,1800,1801],{"class":1219}," readPod",[1205,1803,1481],{"class":1215},[1205,1805,1806],{"class":1219}," readPodHeader",[1205,1808,1223],{"class":1215},[1205,1810,1226],{"class":1211},[1205,1812,1229],{"class":1215},[1205,1814,1815],{"class":1232},"@noy-db\u002Fhub\u002Fpod",[1205,1817,1236],{"class":1215},[1205,1819,1820,1822,1824,1827,1829,1831,1833,1835],{"class":1207,"line":1239},[1205,1821,1212],{"class":1211},[1205,1823,1216],{"class":1215},[1205,1825,1826],{"class":1219}," readPodCover",[1205,1828,1223],{"class":1215},[1205,1830,1226],{"class":1211},[1205,1832,1229],{"class":1215},[1205,1834,1233],{"class":1232},[1205,1836,1236],{"class":1215},[1205,1838,1839],{"class":1207,"line":1260},[1205,1840,1264],{"emptyLinePlaceholder":1263},[1205,1842,1843,1845,1848,1850,1852,1854],{"class":1207,"line":1267},[1205,1844,1271],{"class":1270},[1205,1846,1847],{"class":1219}," bytes ",[1205,1849,1277],{"class":1215},[1205,1851,1280],{"class":1211},[1205,1853,1796],{"class":1283},[1205,1855,1856],{"class":1219},"(vault)\n",[1205,1858,1859],{"class":1207,"line":1292},[1205,1860,1264],{"emptyLinePlaceholder":1263},[1205,1862,1863],{"class":1207,"line":1310},[1205,1864,1865],{"class":1348},"\u002F\u002F Pre-decompression, pre-decryption read — cheap, synchronous:\n",[1205,1867,1868,1870,1873,1875,1877],{"class":1207,"line":1328},[1205,1869,1271],{"class":1270},[1205,1871,1872],{"class":1219}," header ",[1205,1874,1277],{"class":1215},[1205,1876,1806],{"class":1283},[1205,1878,1879],{"class":1219},"(bytes)\n",[1205,1881,1882,1885,1887],{"class":1207,"line":1345},[1205,1883,1884],{"class":1219},"header",[1205,1886,1054],{"class":1215},[1205,1888,1889],{"class":1219},"publicEnvelope\n",[1205,1891,1892],{"class":1207,"line":1352},[1205,1893,1894],{"class":1348},"\u002F\u002F → { name: '…', description: '…', … } or undefined\n",[1205,1896,1897],{"class":1207,"line":1366},[1205,1898,1899],{"class":1348},"\u002F\u002F The field keeps its frozen wire name `publicEnvelope` (#799), not `cover`.\n",[1205,1901,1902],{"class":1207,"line":1372},[1205,1903,1264],{"emptyLinePlaceholder":1263},[1205,1905,1906],{"class":1207,"line":1378},[1205,1907,1908],{"class":1348},"\u002F\u002F Equivalent helper when you only care about the label:\n",[1205,1910,1911,1914,1917,1919,1921,1923,1925,1927,1929,1931,1933],{"class":1207,"line":1598},[1205,1912,1913],{"class":1283},"readPodCover",[1205,1915,1916],{"class":1219},"(bytes",[1205,1918,1481],{"class":1215},[1205,1920,1216],{"class":1215},[1205,1922,1628],{"class":1295},[1205,1924,1299],{"class":1215},[1205,1926,1229],{"class":1215},[1205,1928,1566],{"class":1232},[1205,1930,1323],{"class":1215},[1205,1932,1223],{"class":1215},[1205,1934,1384],{"class":1219},[1205,1936,1937],{"class":1207,"line":1643},[1205,1938,1762],{"class":1348},[946,1940,1941,1942,1945,1946,1949,1950,1953,1954,1957,1958,1961,1962,1964,1965,1967],{},"Whether ",[962,1943,1944],{},"_meta\u002Fcover"," survives ",[962,1947,1948],{},"vault.load(dumpJson)"," on the destination vault is ",[950,1951,1952],{},"store-dependent"," — ",[962,1955,1956],{},"vault.dump()"," reads through ",[962,1959,1960],{},"adapter.loadAll(name)",", and individual store adapters choose whether to include underscore-prefixed internal collections in that bulk read. The bundle header snapshot is the portable path: after loading, re-attach the label explicitly from the header (the destination vault needs ",[962,1963,645],{}," enabled in its own ",[962,1966,978],{}," for this to succeed):",[1196,1969,1971],{"className":1198,"code":1970,"language":1200,"meta":1201,"style":1201},"const result = await readPod(bytes)\nawait vault.load(result.dumpJson)\n\nif (result.header.publicEnvelope) {\n  const { name, description, icon, defaultLocale } = result.header.publicEnvelope\n  await db.setCover(vault.name, {\n    ...(name !== undefined ? { name } : {}),\n    ...(description !== undefined ? { description } : {}),\n    ...(icon !== undefined ? { icon } : {}),\n    ...(defaultLocale !== undefined ? { defaultLocale } : {}),\n  })\n}\n",[962,1972,1973,1988,2008,2012,2031,2072,2095,2130,2158,2186,2214,2221],{"__ignoreMap":1201},[1205,1974,1975,1977,1980,1982,1984,1986],{"class":1207,"line":1208},[1205,1976,1271],{"class":1270},[1205,1978,1979],{"class":1219}," result ",[1205,1981,1277],{"class":1215},[1205,1983,1280],{"class":1211},[1205,1985,1801],{"class":1283},[1205,1987,1879],{"class":1219},[1205,1989,1990,1992,1995,1997,2000,2003,2005],{"class":1207,"line":1239},[1205,1991,1430],{"class":1211},[1205,1993,1994],{"class":1219}," vault",[1205,1996,1054],{"class":1215},[1205,1998,1999],{"class":1283},"load",[1205,2001,2002],{"class":1219},"(result",[1205,2004,1054],{"class":1215},[1205,2006,2007],{"class":1219},"dumpJson)\n",[1205,2009,2010],{"class":1207,"line":1260},[1205,2011,1264],{"emptyLinePlaceholder":1263},[1205,2013,2014,2017,2020,2022,2024,2026,2029],{"class":1207,"line":1267},[1205,2015,2016],{"class":1211},"if",[1205,2018,2019],{"class":1219}," (result",[1205,2021,1054],{"class":1215},[1205,2023,1884],{"class":1219},[1205,2025,1054],{"class":1215},[1205,2027,2028],{"class":1219},"publicEnvelope) ",[1205,2030,1289],{"class":1215},[1205,2032,2033,2036,2038,2041,2043,2046,2048,2051,2053,2056,2058,2061,2064,2066,2068,2070],{"class":1207,"line":1292},[1205,2034,2035],{"class":1270},"  const",[1205,2037,1216],{"class":1215},[1205,2039,2040],{"class":1219}," name",[1205,2042,1481],{"class":1215},[1205,2044,2045],{"class":1219}," description",[1205,2047,1481],{"class":1215},[1205,2049,2050],{"class":1219}," icon",[1205,2052,1481],{"class":1215},[1205,2054,2055],{"class":1219}," defaultLocale",[1205,2057,1223],{"class":1215},[1205,2059,2060],{"class":1215}," =",[1205,2062,2063],{"class":1219}," result",[1205,2065,1054],{"class":1215},[1205,2067,1884],{"class":1219},[1205,2069,1054],{"class":1215},[1205,2071,1889],{"class":1219},[1205,2073,2074,2077,2079,2081,2083,2085,2087,2089,2091,2093],{"class":1207,"line":1310},[1205,2075,2076],{"class":1211},"  await",[1205,2078,1433],{"class":1219},[1205,2080,1054],{"class":1215},[1205,2082,1097],{"class":1283},[1205,2084,1286],{"class":1295},[1205,2086,952],{"class":1219},[1205,2088,1054],{"class":1215},[1205,2090,1025],{"class":1219},[1205,2092,1481],{"class":1215},[1205,2094,1484],{"class":1215},[1205,2096,2097,2100,2102,2104,2107,2110,2113,2115,2117,2119,2122,2125,2128],{"class":1207,"line":1328},[1205,2098,2099],{"class":1215},"    ...",[1205,2101,1286],{"class":1295},[1205,2103,1025],{"class":1219},[1205,2105,2106],{"class":1215}," !==",[1205,2108,2109],{"class":1215}," undefined",[1205,2111,2112],{"class":1215}," ?",[1205,2114,1216],{"class":1215},[1205,2116,2040],{"class":1219},[1205,2118,1223],{"class":1215},[1205,2120,2121],{"class":1215}," :",[1205,2123,2124],{"class":1215}," {}",[1205,2126,2127],{"class":1295},")",[1205,2129,1307],{"class":1215},[1205,2131,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156],{"class":1207,"line":1345},[1205,2133,2099],{"class":1215},[1205,2135,1286],{"class":1295},[1205,2137,1044],{"class":1219},[1205,2139,2106],{"class":1215},[1205,2141,2109],{"class":1215},[1205,2143,2112],{"class":1215},[1205,2145,1216],{"class":1215},[1205,2147,2045],{"class":1219},[1205,2149,1223],{"class":1215},[1205,2151,2121],{"class":1215},[1205,2153,2124],{"class":1215},[1205,2155,2127],{"class":1295},[1205,2157,1307],{"class":1215},[1205,2159,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184],{"class":1207,"line":1352},[1205,2161,2099],{"class":1215},[1205,2163,1286],{"class":1295},[1205,2165,1061],{"class":1219},[1205,2167,2106],{"class":1215},[1205,2169,2109],{"class":1215},[1205,2171,2112],{"class":1215},[1205,2173,1216],{"class":1215},[1205,2175,2050],{"class":1219},[1205,2177,1223],{"class":1215},[1205,2179,2121],{"class":1215},[1205,2181,2124],{"class":1215},[1205,2183,2127],{"class":1295},[1205,2185,1307],{"class":1215},[1205,2187,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212],{"class":1207,"line":1366},[1205,2189,2099],{"class":1215},[1205,2191,1286],{"class":1295},[1205,2193,1135],{"class":1219},[1205,2195,2106],{"class":1215},[1205,2197,2109],{"class":1215},[1205,2199,2112],{"class":1215},[1205,2201,1216],{"class":1215},[1205,2203,2055],{"class":1219},[1205,2205,1223],{"class":1215},[1205,2207,2121],{"class":1215},[1205,2209,2124],{"class":1215},[1205,2211,2127],{"class":1295},[1205,2213,1307],{"class":1215},[1205,2215,2216,2219],{"class":1207,"line":1372},[1205,2217,2218],{"class":1215},"  }",[1205,2220,1384],{"class":1295},[1205,2222,2223],{"class":1207,"line":1378},[1205,2224,2225],{"class":1215},"}\n",[941,2227,2229],{"id":2228},"i18n-integration","i18n integration",[946,2231,2232,2234,2235,2237],{},[962,2233,1025],{}," and ",[962,2236,1044],{}," accept either a plain string (single-locale) or a locale → string map:",[1196,2239,2241],{"className":1198,"code":2240,"language":1200,"meta":1201,"style":1201},"\u002F\u002F Single-locale\n{ name: 'Acme 2026' }\n\n\u002F\u002F Multi-locale\n{ name: { en: 'Acme 2026', th: 'Acme 2026 (TH)', de: 'Acme 2026 (DE)' } }\n",[962,2242,2243,2248,2268,2272,2277],{"__ignoreMap":1201},[1205,2244,2245],{"class":1207,"line":1208},[1205,2246,2247],{"class":1348},"\u002F\u002F Single-locale\n",[1205,2249,2250,2253,2256,2258,2260,2263,2265],{"class":1207,"line":1239},[1205,2251,2252],{"class":1215},"{",[1205,2254,2040],{"class":2255},"sBMFI",[1205,2257,1299],{"class":1215},[1205,2259,1229],{"class":1215},[1205,2261,2262],{"class":1232},"Acme 2026",[1205,2264,1323],{"class":1215},[1205,2266,2267],{"class":1215}," }\n",[1205,2269,2270],{"class":1207,"line":1260},[1205,2271,1264],{"emptyLinePlaceholder":1263},[1205,2273,2274],{"class":1207,"line":1267},[1205,2275,2276],{"class":1348},"\u002F\u002F Multi-locale\n",[1205,2278,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2305,2308,2310,2312,2315,2317,2319,2322,2324,2326],{"class":1207,"line":1292},[1205,2280,2252],{"class":1215},[1205,2282,2040],{"class":2255},[1205,2284,1299],{"class":1215},[1205,2286,1216],{"class":1215},[1205,2288,1496],{"class":2255},[1205,2290,1299],{"class":1215},[1205,2292,1229],{"class":1215},[1205,2294,2262],{"class":1232},[1205,2296,1323],{"class":1215},[1205,2298,1481],{"class":1215},[1205,2300,1510],{"class":2255},[1205,2302,1299],{"class":1215},[1205,2304,1229],{"class":1215},[1205,2306,2307],{"class":1232},"Acme 2026 (TH)",[1205,2309,1323],{"class":1215},[1205,2311,1481],{"class":1215},[1205,2313,2314],{"class":2255}," de",[1205,2316,1299],{"class":1215},[1205,2318,1229],{"class":1215},[1205,2320,2321],{"class":1232},"Acme 2026 (DE)",[1205,2323,1323],{"class":1215},[1205,2325,1223],{"class":1215},[1205,2327,2267],{"class":1215},[946,2329,2330,2331,1144,2333,1144,2335,2337,2338,2340],{},"On the read path, ",[962,2332,1396],{},[962,2334,1393],{},[962,2336,1913],{}," all accept a ",[962,2339,1664],{}," option and resolve through the envelope's own fallback chain:",[2342,2343,2344,2350,2356,2359],"ol",{},[1177,2345,2346,2347,2349],{},"Exact ",[962,2348,1664],{}," match.",[1177,2351,2352,2353,2355],{},"The envelope's ",[962,2354,1135],{}," (when set).",[1177,2357,2358],{},"First non-empty translation in the map.",[1177,2360,2361],{},"Empty string (only if every translation is empty).",[946,2363,2364,2365,2370,2371,1404,2373,2376,2377,2381],{},"This is a narrower, purpose-built resolver — not the hub's general-purpose ",[955,2366,2367],{"href":701},[962,2368,2369],{},"resolveI18nText"," used for record fields. ",[962,2372,2369],{},[962,2374,2375],{},"LocaleNotSpecifiedError"," when no translation matches, because a missing record value is treated as a programming error worth surfacing. Label semantics are looser: a vault picker prefers showing ",[2378,2379,2380],"em",{},"something"," identifiable over a thrown error, so the envelope's resolver never throws.",[946,2383,2384,2385,2388],{},"The schema's ",[962,2386,2387],{},"maxStringChars"," cap (default 200) applies per resolved locale — each translation in a map is bounded independently, not the JSON-stringified union.",[941,2390,2392],{"id":2391},"api-reference","API reference",[946,2394,2395,2396,1054],{},"All names below are exported from ",[962,2397,1233],{},[1417,2399,2401,2403],{"id":2400},"noydb-methods",[962,2402,62],{}," methods",[1174,2405,2406,2440],{},[1177,2407,2408,2411,2412,2415,2416,2419,2420,2422,2423,1144,2425,2427,2428,2430,2431,2433,2434,2436,2437,2439],{},[962,2409,2410],{},"db.setCover(vault, input)"," → ",[962,2413,2414],{},"Promise\u003CCover>"," — validate ",[962,2417,2418],{},"input"," against the vault's resolved schema and persist it, merging onto any existing envelope (",[962,2421,1088],{}," preserved, ",[962,2424,1105],{},[962,2426,1120],{}," bumped). Throws ",[962,2429,1407],{}," if ",[962,2432,645],{}," isn't enabled in ",[962,2435,978],{},", or if ",[962,2438,2418],{}," violates the schema (unknown field, oversize icon\u002Fstring, disallowed MIME type).",[1177,2441,2442,2411,2445,2448,2449,2451,2452,2454,2455,2458],{},[962,2443,2444],{},"db.getCover(vault, opts?)",[962,2446,2447],{},"Promise\u003CCover | undefined>"," — read the envelope. Works even when ",[962,2450,645],{}," is not enabled on this hub instance (reads are passive); returns ",[962,2453,1400],{}," when nothing has been written. ",[962,2456,2457],{},"opts.locale"," resolves locale-map fields to plain strings.",[1417,2460,2462],{"id":2461},"vaultgetcoveropts",[962,2463,2464],{},"vault.getCover(opts?)",[1174,2466,2467],{},[1177,2468,2469,2411,2471,2473,2474,2477,2478,2480,2481,2483],{},[962,2470,2464],{},[962,2472,2447],{}," — same read as ",[962,2475,2476],{},"db.getCover(vault.name, opts)",", scoped to an already-open ",[962,2479,94],{}," instance. This is what ",[962,2482,1778],{}," calls internally to snapshot the envelope into a bundle header.",[1417,2485,2487],{"id":2486},"standalone-functions-no-unlock-required","Standalone functions (no unlock required)",[1174,2489,2490,2509,2526,2549,2564],{},[1177,2491,2492,2411,2495,2497,2498,1144,2500,2502,2503,2505,2506,1054],{},[962,2493,2494],{},"readCover(store, vault, opts?)",[962,2496,2447],{}," — read directly from a store adapter, no ",[962,2499,62],{},[962,2501,94],{}," instance needed. Resolves ",[962,2504,2457],{}," when given; built on top of ",[962,2507,2508],{},"loadCover",[1177,2510,2511,2411,2514,2516,2517,2519,2520,2522,2523,2525],{},[962,2512,2513],{},"loadCover(store, vault)",[962,2515,2447],{}," — the lower-level read ",[962,2518,1396],{}," is built on: fetches ",[962,2521,1944],{}," from the store and parses it, with no locale resolution. Returns ",[962,2524,1400],{}," for a fresh vault or a corrupted document.",[1177,2527,2528,2411,2531,2534,2535,1144,2538,2541,2542,2545,2546,2548],{},[962,2529,2530],{},"saveCover(store, vault, envelope)",[962,2532,2533],{},"Promise\u003Cvoid>"," — the lower-level write ",[962,2536,2537],{},"db.setCover",[962,2539,2540],{},"vault.getCover","'s write path is built on: persists a full ",[962,2543,2544],{},"Cover"," record to ",[962,2547,1944],{}," directly, with no schema validation or field merging.",[1177,2550,2551,2411,2554,2557,2558,2560,2561,2563],{},[962,2552,2553],{},"readPodCover(bytes, opts?)",[962,2555,2556],{},"Cover | undefined"," — read the envelope out of raw ",[962,2559,964],{}," bundle bytes, without parsing the body. ",[962,2562,2457],{}," behaves the same as above.",[1177,2565,2566,2411,2569,2572,2573,2234,2576,2578],{},[962,2567,2568],{},"isCover(x)",[962,2570,2571],{},"boolean"," — runtime shape check (",[962,2574,2575],{},"_noydb_public === 1",[962,2577,1120],{}," is a number).",[1417,2580,2582],{"id":2581},"schema-helpers","Schema helpers",[1174,2584,2585,2609,2624,2642],{},[1177,2586,2587,2411,2590,2593,2594,2597,2598,2601,2602,2605,2606,2608],{},[962,2588,2589],{},"resolveCoverSchema(schema)",[962,2591,2592],{},"ResolvedCoverSchema | undefined"," — merge a developer-supplied ",[962,2595,2596],{},"CoverSchema"," (or the ",[962,2599,2600],{},"true"," shorthand) onto ",[962,2603,2604],{},"DEFAULT_COVER_SCHEMA",". Returns ",[962,2607,1400],{}," when the feature is off.",[1177,2610,2611,2411,2614,2617,2618,2620,2621,2623],{},[962,2612,2613],{},"validateCoverInput(input, schema)",[962,2615,2616],{},"void"," — the validator ",[962,2619,1097],{}," runs internally; throws ",[962,2622,1407],{}," on the first violation.",[1177,2625,2626,2629,2630,1152,2632,1152,2634,1152,2636,1152,2638,1152,2640,1054],{},[962,2627,2628],{},"COVER_FIELDS"," — the full list of settable field names: ",[962,2631,1025],{},[962,2633,1044],{},[962,2635,1061],{},[962,2637,1088],{},[962,2639,1105],{},[962,2641,1135],{},[1177,2643,2644,1953,2646,1054],{},[962,2645,2604],{},[962,2647,2648],{},"{ fields: COVER_FIELDS, maxIconBytes: 256 * 1024, iconMimeTypes: ['image\u002Fpng', 'image\u002Fsvg+xml'], maxStringChars: 200 }",[1417,2650,2652],{"id":2651},"types","Types",[1174,2654,2655,2666,2678,2687,2707],{},[1177,2656,2657,2659,2660,1152,2663,2665],{},[962,2658,2544],{}," — the persisted shape (",[962,2661,2662],{},"_noydb_public: 1",[962,2664,1120],{},", plus the optional fields from the table above).",[1177,2667,2668,1953,2671,2673,2674,1144,2676,1054],{},[962,2669,2670],{},"CoverText",[962,2672,1030],{},", the type of ",[962,2675,1025],{},[962,2677,1044],{},[1177,2679,2680,2682,2683,2686],{},[962,2681,2596],{}," \u002F ",[962,2684,2685],{},"ResolvedCoverSchema"," — the developer-supplied and resolved-with-defaults schema shapes.",[1177,2688,2689,2692,2693,2695,2696,2698,2699,1152,2701,1152,2703,1152,2705,1411],{},[962,2690,2691],{},"SetCoverInput"," — the subset of ",[962,2694,2544],{}," an owner can pass to ",[962,2697,1097],{}," (",[962,2700,1025],{},[962,2702,1044],{},[962,2704,1061],{},[962,2706,1135],{},[1177,2708,2709,2712,2713,2716,2717,2720,2721,1054],{},[962,2710,2711],{},"CoverField"," — the union of settable field names (",[962,2714,2715],{},"typeof COVER_FIELDS[number]","): ",[962,2718,2719],{},"'name' | 'description' | 'icon' | 'createdAt' | 'updatedAt' | 'defaultLocale'",". This is the element type of ",[962,2722,2723],{},"CoverSchema.fields",[1417,2725,2727],{"id":2726},"storage-layout","Storage layout",[997,2729,2730,2743],{},[1000,2731,2732],{},[1003,2733,2734,2737,2740],{},[1006,2735,2736],{},"Layer",[1006,2738,2739],{},"Path",[1006,2741,2742],{},"Format",[1016,2744,2745,2780],{},[1003,2746,2747,2750,2761],{},[1021,2748,2749],{},"Vault, on the store",[1021,2751,2752,2754,2755,1152,2758,2127],{},[962,2753,1944],{}," (the record id is exported as ",[962,2756,2757],{},"COVER_RECORD_ID",[962,2759,2760],{},"'cover'",[1021,2762,2763,2764,1152,2767,2770,2771,2773,2774,2234,2777,1054],{},"Plaintext envelope (",[962,2765,2766],{},"_iv: ''",[962,2768,2769],{},"_data"," is the JSON-serialized ",[962,2772,2544],{},") — the same bypass-encryption pattern used by ",[962,2775,2776],{},"_meta\u002Fhandle",[962,2778,2779],{},"_meta\u002Fpolicy",[1003,2781,2782,2787,2792],{},[1021,2783,2784,2786],{},[962,2785,964],{}," bundle header",[1021,2788,2789],{},[962,2790,2791],{},"header.cover",[1021,2793,2794],{},"Inline JSON object inside the bundle's plaintext, minimum-disclosure header.",[946,2796,2797,2798,2682,2801,2682,2804,2682,2807,2810,2811,2813,2814,2816],{},"The bundle header's allowlist normally carries only ",[962,2799,2800],{},"formatVersion",[962,2802,2803],{},"handle",[962,2805,2806],{},"bodyBytes",[962,2808,2809],{},"bodySha256","; ",[962,2812,645],{}," is one of a small set of additional, individually-validated keys the parser accepts. Every other unknown key is still rejected at parse time — see ",[955,2815,629],{"href":629}," for the full allowlist.",[941,2818,1189],{"id":2819},"limits-gotchas",[946,2821,2822,2824],{},[950,2823,463],{}," — the envelope is a plaintext, untrusted hint, not a signed claim:",[1174,2826,2827,2837,2846,2866,2872,2885],{},[1177,2828,2829,2832,2833,2836],{},[950,2830,2831],{},"Plaintext, untrusted hint."," A store adapter (or anyone with write access to the underlying storage) can modify the envelope. Treat it like an HTTP ",[962,2834,2835],{},"Server:"," header — it helps the user, it is never a security claim. Don't mark the label \"verified\" or \"owner-signed\" in a renderer.",[1177,2838,2839,2842,2843,2845],{},[950,2840,2841],{},"Off by default."," Vaults written by a hub without ",[962,2844,645],{}," enabled carry no envelope at all.",[1177,2847,2848,2851,2852,2234,2854,2856,2857,2859,2860,2862,2863,2865],{},[950,2849,2850],{},"Schema-bounded."," If a developer's schema only lists ",[962,2853,1025],{},[962,2855,1061],{},", an owner calling ",[962,2858,1097],{}," with ",[962,2861,1044],{}," gets a ",[962,2864,1407],{}," — the allowed-field list caps what can leak.",[1177,2867,2868,2871],{},[950,2869,2870],{},"Existence does not confirm contents."," The envelope can say \"Acme Tax Records\" while the vault body is empty or holds something else entirely; a first-contact UI should not treat the label as a promise about what's inside.",[1177,2873,2874,2877,2878,1152,2881,2884],{},[950,2875,2876],{},"Icon surface."," The default 256 KB cap on the encoded data URL (≈ 192 KB decoded) is generous enough for a logo but bounded against smuggling large payloads. The MIME allowlist (",[962,2879,2880],{},"image\u002Fpng",[962,2882,2883],{},"image\u002Fsvg+xml",") is checked on write only — SVGs are not sanitized for embedded scripts at the storage layer, so a renderer must treat the icon as untrusted DOM input, not inline it unsanitized.",[1177,2886,2887,2890,2891,2893,2894,2896,2897,2899],{},[950,2888,2889],{},"No new class of leakage."," A ",[962,2892,964],{}," bundle in cloud storage already exposes its size and ",[962,2895,2809],{}," to anyone who can list the file. ",[962,2898,645],{}," adds owner-curated label fields to that same, already-visible surface — the encrypted body itself remains the source of truth.",[941,2901,2903],{"id":2902},"see-also","See also",[1174,2905,2906,2914,2925],{},[1177,2907,2908,2910,2911,2913],{},[955,2909,629],{"href":629}," — the ",[962,2912,964],{}," container format whose header carries the envelope snapshot.",[1177,2915,2916,2918,2919,1144,2922,2924],{},[955,2917,701],{"href":701}," — the record-level ",[962,2920,2921],{},"i18nText",[962,2923,2369],{}," machinery the envelope's own locale resolver deliberately departs from.",[1177,2926,2927,2929],{},[955,2928,844],{"href":844}," — the tier-1\u002F2\u002F3 unlock model the envelope sits below (it is readable before tier 1).",[2931,2932,2933],"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 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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":1201,"searchDepth":1260,"depth":1260,"links":2935},[2936,2937,2938,2939,2940,2946,2947,2956,2957],{"id":943,"depth":1239,"text":944},{"id":991,"depth":1239,"text":992},{"id":1168,"depth":1239,"text":1169},{"id":1193,"depth":1239,"text":1194},{"id":1414,"depth":1239,"text":1415,"children":2941},[2942,2943,2944],{"id":1419,"depth":1260,"text":1420},{"id":1676,"depth":1260,"text":1677},{"id":1770,"depth":1260,"text":2945},"Snapshotting into a .noydb bundle",{"id":2228,"depth":1239,"text":2229},{"id":2391,"depth":1239,"text":2392,"children":2948},[2949,2951,2952,2953,2954,2955],{"id":2400,"depth":1260,"text":2950},"Noydb methods",{"id":2461,"depth":1260,"text":2464},{"id":2486,"depth":1260,"text":2487},{"id":2581,"depth":1260,"text":2582},{"id":2651,"depth":1260,"text":2652},{"id":2726,"depth":1260,"text":2727},{"id":2819,"depth":1239,"text":1189},{"id":2902,"depth":1239,"text":2903},null,"Owner-curated plaintext metadata (name, description, icon) that stays readable before vault unlock or bundle decryption.","md",{},"service",{"title":645,"description":2959},"stable","important","uJda4UmN3FsxD5S2675AFQ9cAmIo1ZABNgE8hK4oU2U",{"data":2968,"body":2969},{},{"type":2970,"children":2971},"root",[2972],{"type":2973,"tag":946,"props":2974,"children":2975},"element",{},[2976,2982],{"type":2973,"tag":962,"props":2977,"children":2979},{"className":2978},[],[2980],{"type":2981,"value":1233},"text",{"type":2981,"value":2983}," (root export)",{"data":2985,"body":2986},{},{"type":2970,"children":2987},[2988],{"type":2973,"tag":946,"props":2989,"children":2990},{},[2991,2993,2998,3000,3005],{"type":2981,"value":2992},"Core feature — enabled with the ",{"type":2973,"tag":962,"props":2994,"children":2996},{"className":2995},[],[2997],{"type":2981,"value":645},{"type":2981,"value":2999}," option on ",{"type":2973,"tag":962,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":2981,"value":978},{"type":2981,"value":1054},{"data":3007,"body":3008},{},{"type":2970,"children":3009},[3010],{"type":2973,"tag":946,"props":3011,"children":3012},{},[3013,3018,3020,3025,3027,3033,3034,3040],{"type":2973,"tag":962,"props":3014,"children":3016},{"className":3015},[],[3017],{"type":2981,"value":1233},{"type":2981,"value":3019}," core (vault storage + ",{"type":2973,"tag":962,"props":3021,"children":3023},{"className":3022},[],[3024],{"type":2981,"value":964},{"type":2981,"value":3026}," bundle header format), every storage adapter (reads go through the plain ",{"type":2973,"tag":962,"props":3028,"children":3030},{"className":3029},[],[3031],{"type":2981,"value":3032},"get",{"type":2981,"value":1144},{"type":2973,"tag":962,"props":3035,"children":3037},{"className":3036},[],[3038],{"type":2981,"value":3039},"put",{"type":2981,"value":3041}," contract, no adapter-specific code)",1791896579412]