[{"data":1,"prerenderedAt":4674},["ShallowReactive",2],{"navigation":3,"\u002Fservices\u002Fcrdt":927,"mdc-12bfc2-key":4634,"mdc--ybehpx-key":4650,"mdc--kz6ofa-key":4662},[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":653,"access":12,"apiToc":929,"body":930,"category":4625,"description":4626,"extension":4627,"meta":4628,"navigation":4625,"nest":4629,"path":654,"seo":4630,"sinceVersion":4625,"status":4631,"stem":655,"subtitle":4625,"tier":4632,"tocExternal":4625,"__hash__":4633},"docs\u002Fservices\u002Fcrdt.md",false,{"type":931,"value":932,"toc":4601},"minimark",[933,936,940,945,954,1007,1026,1030,1070,1074,1085,1355,1358,1463,1467,1474,1484,1626,1632,1658,1857,1863,2578,2584,2589,2798,2983,2989,2995,3025,3389,3392,3685,3689,3695,3713,3722,3728,3787,3808,3813,3843,3857,3861,3867,3981,4045,4049,4297,4302,4316,4454,4458,4476,4480,4552,4556,4597],[934,935,653],"h1",{"id":653},[937,938],"service-meta",{":rows":939},"[{\"label\":\"Subpath\",\"value\":\"`@noy-db\u002Fhub\u002Fcrdt`\"},{\"label\":\"Factory\",\"value\":\"`withCrdt()`\"},{\"label\":\"Layer\",\"value\":\"`with-commit`\"}]",[941,942,944],"h2",{"id":943},"what-it-does","What it does",[946,947,948,949,953],"p",{},"When the same record is edited on two devices while both are offline, an ordinary\nlast-write-wins store silently drops one of the edits. The crdt service replaces the\nrecord body with a ",[950,951,952],"strong",{},"CRDT"," (conflict-free replicated data type) — a data structure whose\nmerge is deterministic and order-independent — so concurrent edits from two devices\ncombine instead of overwriting each other. You pick a merge shape per collection:",[955,956,957,980,988],"ul",{},[958,959,960,966,967,971,972,975,976,979],"li",{},[950,961,962],{},[963,964,965],"code",{},"lww-map"," — last-writer-wins ",[968,969,970],"em",{},"per field",": each field carries its own write\ntimestamp, so device A's edit to ",[963,973,974],{},"status"," and device B's edit to ",[963,977,978],{},"body"," both survive.",[958,981,982,987],{},[950,983,984],{},[963,985,986],{},"rga"," — a replicated growable array for ordered lists: elements get stable ids,\nremovals become tombstones, and concurrent inserts\u002Fremovals union cleanly.",[958,989,990,994,995,1002,1003,1006],{},[950,991,992],{},[963,993,287],{}," — full ",[996,997,1001],"a",{"href":998,"rel":999},"https:\u002F\u002Fyjs.org",[1000],"nofollow","Yjs"," documents (collaborative rich text, maps,\narrays) stored encrypted, via the companion package ",[963,1004,1005],{},"@noy-db\u002Fin-yjs",".",[946,1008,1009,1010,1013,1014,1017,1018,1021,1022,1025],{},"The encrypted envelope wraps the CRDT ",[968,1011,1012],{},"state",", not the resolved record — the storage\nbackend only ever sees ciphertext (see ",[996,1015,1016],{"href":66},"Core 02 — Enclave",").\n",[963,1019,1020],{},"collection.get(id)"," returns the resolved snapshot; ",[963,1023,1024],{},"collection.getRaw(id)"," returns the\nunderlying state. The whole service costs ~221 lines of code and is off-bundle when you\ndon't opt in.",[941,1027,1029],{"id":1028},"prerequisites","Prerequisites",[955,1031,1032,1045,1057],{},[958,1033,1034,1040,1041,1044],{},[950,1035,1036,1037,1039],{},"A ",[963,1038,653],{}," shape declared per collection"," (",[963,1042,1043],{},"'lww-map' | 'rga' | 'yjs'",") — the factory enables the machinery; each collection picks its merge shape.",[958,1046,1047,1054,1055,1006],{},[968,1048,1049,1050,1053],{},"For the ",[963,1051,1052],{},"'yjs'"," shape:"," the companion package ",[963,1056,1005],{},[958,1058,1059,1062,1063,1066,1067,1069],{},[968,1060,1061],{},"For cross-device replication:"," ",[963,1064,1065],{},"syncStrategy: withSync()"," plus a shared sync adapter both devices can reach — merging is local, replication is ",[996,1068,864],{"href":865},"'s job.",[941,1071,1073],{"id":1072},"opt-in","Opt in",[946,1075,1076,1077,1080,1081,1084],{},"Pass ",[963,1078,1079],{},"crdtStrategy: withCrdt()"," to ",[963,1082,1083],{},"createNoydb",":",[1086,1087,1092],"pre",{"className":1088,"code":1089,"language":1090,"meta":1091,"style":1091},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createNoydb } from '@noy-db\u002Fhub'\nimport { withCrdt } from '@noy-db\u002Fhub\u002Fcrdt'\nimport { withSync } from '@noy-db\u002Fhub\u002Fsync'\nimport { toMemory } from '@noy-db\u002Fto-memory'\n\nconst db = await createNoydb({\n  store: toMemory(),               \u002F\u002F any NoydbStore works\n  user: 'alice',\n  secret: 'correct horse battery staple',\n  crdtStrategy: withCrdt(),\n  syncStrategy: withSync(),      \u002F\u002F only needed for cross-device replication\n})\n\nconst vault = await db.openVault('travel')\n","ts","",[963,1093,1094,1127,1148,1169,1190,1197,1222,1243,1262,1279,1293,1310,1319,1324],{"__ignoreMap":1091},[1095,1096,1099,1103,1107,1111,1114,1117,1120,1124],"span",{"class":1097,"line":1098},"line",1,[1095,1100,1102],{"class":1101},"s7zQu","import",[1095,1104,1106],{"class":1105},"sMK4o"," {",[1095,1108,1110],{"class":1109},"sTEyZ"," createNoydb",[1095,1112,1113],{"class":1105}," }",[1095,1115,1116],{"class":1101}," from",[1095,1118,1119],{"class":1105}," '",[1095,1121,1123],{"class":1122},"sfazB","@noy-db\u002Fhub",[1095,1125,1126],{"class":1105},"'\n",[1095,1128,1130,1132,1134,1137,1139,1141,1143,1146],{"class":1097,"line":1129},2,[1095,1131,1102],{"class":1101},[1095,1133,1106],{"class":1105},[1095,1135,1136],{"class":1109}," withCrdt",[1095,1138,1113],{"class":1105},[1095,1140,1116],{"class":1101},[1095,1142,1119],{"class":1105},[1095,1144,1145],{"class":1122},"@noy-db\u002Fhub\u002Fcrdt",[1095,1147,1126],{"class":1105},[1095,1149,1151,1153,1155,1158,1160,1162,1164,1167],{"class":1097,"line":1150},3,[1095,1152,1102],{"class":1101},[1095,1154,1106],{"class":1105},[1095,1156,1157],{"class":1109}," withSync",[1095,1159,1113],{"class":1105},[1095,1161,1116],{"class":1101},[1095,1163,1119],{"class":1105},[1095,1165,1166],{"class":1122},"@noy-db\u002Fhub\u002Fsync",[1095,1168,1126],{"class":1105},[1095,1170,1172,1174,1176,1179,1181,1183,1185,1188],{"class":1097,"line":1171},4,[1095,1173,1102],{"class":1101},[1095,1175,1106],{"class":1105},[1095,1177,1178],{"class":1109}," toMemory",[1095,1180,1113],{"class":1105},[1095,1182,1116],{"class":1101},[1095,1184,1119],{"class":1105},[1095,1186,1187],{"class":1122},"@noy-db\u002Fto-memory",[1095,1189,1126],{"class":1105},[1095,1191,1193],{"class":1097,"line":1192},5,[1095,1194,1196],{"emptyLinePlaceholder":1195},true,"\n",[1095,1198,1200,1204,1207,1210,1213,1216,1219],{"class":1097,"line":1199},6,[1095,1201,1203],{"class":1202},"spNyl","const",[1095,1205,1206],{"class":1109}," db ",[1095,1208,1209],{"class":1105},"=",[1095,1211,1212],{"class":1101}," await",[1095,1214,1110],{"class":1215},"s2Zo4",[1095,1217,1218],{"class":1109},"(",[1095,1220,1221],{"class":1105},"{\n",[1095,1223,1225,1229,1231,1233,1236,1239],{"class":1097,"line":1224},7,[1095,1226,1228],{"class":1227},"swJcz","  store",[1095,1230,1084],{"class":1105},[1095,1232,1178],{"class":1215},[1095,1234,1235],{"class":1109},"()",[1095,1237,1238],{"class":1105},",",[1095,1240,1242],{"class":1241},"sHwdD","               \u002F\u002F any NoydbStore works\n",[1095,1244,1246,1249,1251,1253,1256,1259],{"class":1097,"line":1245},8,[1095,1247,1248],{"class":1227},"  user",[1095,1250,1084],{"class":1105},[1095,1252,1119],{"class":1105},[1095,1254,1255],{"class":1122},"alice",[1095,1257,1258],{"class":1105},"'",[1095,1260,1261],{"class":1105},",\n",[1095,1263,1265,1268,1270,1272,1275,1277],{"class":1097,"line":1264},9,[1095,1266,1267],{"class":1227},"  secret",[1095,1269,1084],{"class":1105},[1095,1271,1119],{"class":1105},[1095,1273,1274],{"class":1122},"correct horse battery staple",[1095,1276,1258],{"class":1105},[1095,1278,1261],{"class":1105},[1095,1280,1282,1285,1287,1289,1291],{"class":1097,"line":1281},10,[1095,1283,1284],{"class":1227},"  crdtStrategy",[1095,1286,1084],{"class":1105},[1095,1288,1136],{"class":1215},[1095,1290,1235],{"class":1109},[1095,1292,1261],{"class":1105},[1095,1294,1296,1299,1301,1303,1305,1307],{"class":1097,"line":1295},11,[1095,1297,1298],{"class":1227},"  syncStrategy",[1095,1300,1084],{"class":1105},[1095,1302,1157],{"class":1215},[1095,1304,1235],{"class":1109},[1095,1306,1238],{"class":1105},[1095,1308,1309],{"class":1241},"      \u002F\u002F only needed for cross-device replication\n",[1095,1311,1313,1316],{"class":1097,"line":1312},12,[1095,1314,1315],{"class":1105},"}",[1095,1317,1318],{"class":1109},")\n",[1095,1320,1322],{"class":1097,"line":1321},13,[1095,1323,1196],{"emptyLinePlaceholder":1195},[1095,1325,1327,1329,1332,1334,1336,1339,1341,1344,1346,1348,1351,1353],{"class":1097,"line":1326},14,[1095,1328,1203],{"class":1202},[1095,1330,1331],{"class":1109}," vault ",[1095,1333,1209],{"class":1105},[1095,1335,1212],{"class":1101},[1095,1337,1338],{"class":1109}," db",[1095,1340,1006],{"class":1105},[1095,1342,1343],{"class":1215},"openVault",[1095,1345,1218],{"class":1109},[1095,1347,1258],{"class":1105},[1095,1349,1350],{"class":1122},"travel",[1095,1352,1258],{"class":1105},[1095,1354,1318],{"class":1109},[946,1356,1357],{},"Then declare the mode per collection:",[1086,1359,1361],{"className":1088,"code":1360,"language":1090,"meta":1091,"style":1091},"interface Note { title?: string; body?: string; status?: string }\n\nconst notes = vault.collection\u003CNote>('notes', { crdt: 'lww-map' })\n",[963,1362,1363,1405,1409],{"__ignoreMap":1091},[1095,1364,1365,1368,1372,1374,1377,1380,1383,1386,1389,1391,1393,1395,1398,1400,1402],{"class":1097,"line":1098},[1095,1366,1367],{"class":1202},"interface",[1095,1369,1371],{"class":1370},"sBMFI"," Note",[1095,1373,1106],{"class":1105},[1095,1375,1376],{"class":1227}," title",[1095,1378,1379],{"class":1105},"?:",[1095,1381,1382],{"class":1370}," string",[1095,1384,1385],{"class":1105},";",[1095,1387,1388],{"class":1227}," body",[1095,1390,1379],{"class":1105},[1095,1392,1382],{"class":1370},[1095,1394,1385],{"class":1105},[1095,1396,1397],{"class":1227}," status",[1095,1399,1379],{"class":1105},[1095,1401,1382],{"class":1370},[1095,1403,1404],{"class":1105}," }\n",[1095,1406,1407],{"class":1097,"line":1129},[1095,1408,1196],{"emptyLinePlaceholder":1195},[1095,1410,1411,1413,1416,1418,1421,1423,1426,1429,1432,1435,1437,1439,1442,1444,1446,1448,1451,1453,1455,1457,1459,1461],{"class":1097,"line":1150},[1095,1412,1203],{"class":1202},[1095,1414,1415],{"class":1109}," notes ",[1095,1417,1209],{"class":1105},[1095,1419,1420],{"class":1109}," vault",[1095,1422,1006],{"class":1105},[1095,1424,1425],{"class":1215},"collection",[1095,1427,1428],{"class":1105},"\u003C",[1095,1430,1431],{"class":1370},"Note",[1095,1433,1434],{"class":1105},">",[1095,1436,1218],{"class":1109},[1095,1438,1258],{"class":1105},[1095,1440,1441],{"class":1122},"notes",[1095,1443,1258],{"class":1105},[1095,1445,1238],{"class":1105},[1095,1447,1106],{"class":1105},[1095,1449,1450],{"class":1227}," crdt",[1095,1452,1084],{"class":1105},[1095,1454,1119],{"class":1105},[1095,1456,965],{"class":1122},[1095,1458,1258],{"class":1105},[1095,1460,1113],{"class":1105},[1095,1462,1318],{"class":1109},[941,1464,1466],{"id":1465},"usage","Usage",[1468,1469,1471,1472],"h3",{"id":1470},"per-field-merge-with-lww-map","Per-field merge with ",[963,1473,965],{},[946,1475,1476,1477,1479,1480,1483],{},"In ",[963,1478,965],{}," mode every field is an independent last-writer-wins register. A ",[963,1481,1482],{},"put"," may\ncarry only the fields it changes — fields absent from the new record keep their existing\nvalue and timestamp:",[1086,1485,1487],{"className":1088,"code":1486,"language":1090,"meta":1091,"style":1091},"await notes.put('n1', { title: 'Trip to Chiang Mai', body: 'First draft', status: 'draft' })\nawait notes.put('n1', { status: 'reviewed' })   \u002F\u002F partial put — only this field advances\n\nawait notes.get('n1')\n\u002F\u002F → { status: 'reviewed', title: 'Trip to Chiang Mai', body: 'First draft' }\n",[963,1488,1489,1555,1596,1600,1621],{"__ignoreMap":1091},[1095,1490,1491,1494,1497,1499,1501,1503,1505,1508,1510,1512,1514,1516,1518,1520,1523,1525,1527,1529,1531,1533,1536,1538,1540,1542,1544,1546,1549,1551,1553],{"class":1097,"line":1098},[1095,1492,1493],{"class":1101},"await",[1095,1495,1496],{"class":1109}," notes",[1095,1498,1006],{"class":1105},[1095,1500,1482],{"class":1215},[1095,1502,1218],{"class":1109},[1095,1504,1258],{"class":1105},[1095,1506,1507],{"class":1122},"n1",[1095,1509,1258],{"class":1105},[1095,1511,1238],{"class":1105},[1095,1513,1106],{"class":1105},[1095,1515,1376],{"class":1227},[1095,1517,1084],{"class":1105},[1095,1519,1119],{"class":1105},[1095,1521,1522],{"class":1122},"Trip to Chiang Mai",[1095,1524,1258],{"class":1105},[1095,1526,1238],{"class":1105},[1095,1528,1388],{"class":1227},[1095,1530,1084],{"class":1105},[1095,1532,1119],{"class":1105},[1095,1534,1535],{"class":1122},"First draft",[1095,1537,1258],{"class":1105},[1095,1539,1238],{"class":1105},[1095,1541,1397],{"class":1227},[1095,1543,1084],{"class":1105},[1095,1545,1119],{"class":1105},[1095,1547,1548],{"class":1122},"draft",[1095,1550,1258],{"class":1105},[1095,1552,1113],{"class":1105},[1095,1554,1318],{"class":1109},[1095,1556,1557,1559,1561,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581,1583,1586,1588,1590,1593],{"class":1097,"line":1129},[1095,1558,1493],{"class":1101},[1095,1560,1496],{"class":1109},[1095,1562,1006],{"class":1105},[1095,1564,1482],{"class":1215},[1095,1566,1218],{"class":1109},[1095,1568,1258],{"class":1105},[1095,1570,1507],{"class":1122},[1095,1572,1258],{"class":1105},[1095,1574,1238],{"class":1105},[1095,1576,1106],{"class":1105},[1095,1578,1397],{"class":1227},[1095,1580,1084],{"class":1105},[1095,1582,1119],{"class":1105},[1095,1584,1585],{"class":1122},"reviewed",[1095,1587,1258],{"class":1105},[1095,1589,1113],{"class":1105},[1095,1591,1592],{"class":1109},")   ",[1095,1594,1595],{"class":1241},"\u002F\u002F partial put — only this field advances\n",[1095,1597,1598],{"class":1097,"line":1150},[1095,1599,1196],{"emptyLinePlaceholder":1195},[1095,1601,1602,1604,1606,1608,1611,1613,1615,1617,1619],{"class":1097,"line":1171},[1095,1603,1493],{"class":1101},[1095,1605,1496],{"class":1109},[1095,1607,1006],{"class":1105},[1095,1609,1610],{"class":1215},"get",[1095,1612,1218],{"class":1109},[1095,1614,1258],{"class":1105},[1095,1616,1507],{"class":1122},[1095,1618,1258],{"class":1105},[1095,1620,1318],{"class":1109},[1095,1622,1623],{"class":1097,"line":1192},[1095,1624,1625],{"class":1241},"\u002F\u002F → { status: 'reviewed', title: 'Trip to Chiang Mai', body: 'First draft' }\n",[946,1627,1628,1631],{},[963,1629,1630],{},"getRaw(id)"," exposes the stored state — each field with its value and the ISO timestamp\nof its last write:",[1086,1633,1635],{"className":1088,"code":1634,"language":1090,"meta":1091,"style":1091},"await notes.getRaw('n1')\n",[963,1636,1637],{"__ignoreMap":1091},[1095,1638,1639,1641,1643,1645,1648,1650,1652,1654,1656],{"class":1097,"line":1098},[1095,1640,1493],{"class":1101},[1095,1642,1496],{"class":1109},[1095,1644,1006],{"class":1105},[1095,1646,1647],{"class":1215},"getRaw",[1095,1649,1218],{"class":1109},[1095,1651,1258],{"class":1105},[1095,1653,1507],{"class":1122},[1095,1655,1258],{"class":1105},[1095,1657,1318],{"class":1109},[1086,1659,1662],{"className":1660,"code":1661,"language":141,"meta":1091,"style":1091},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"_crdt\": \"lww-map\",\n  \"fields\": {\n    \"status\": { \"v\": \"reviewed\",           \"ts\": \"2026-07-08T09:31:12.844Z\" },\n    \"title\":  { \"v\": \"Trip to Chiang Mai\", \"ts\": \"2026-07-08T09:31:12.802Z\" },\n    \"body\":   { \"v\": \"First draft\",        \"ts\": \"2026-07-08T09:31:12.802Z\" }\n  }\n}\n",[963,1663,1664,1668,1690,1704,1754,1801,1847,1852],{"__ignoreMap":1091},[1095,1665,1666],{"class":1097,"line":1098},[1095,1667,1221],{"class":1105},[1095,1669,1670,1673,1676,1679,1681,1684,1686,1688],{"class":1097,"line":1129},[1095,1671,1672],{"class":1105},"  \"",[1095,1674,1675],{"class":1202},"_crdt",[1095,1677,1678],{"class":1105},"\"",[1095,1680,1084],{"class":1105},[1095,1682,1683],{"class":1105}," \"",[1095,1685,965],{"class":1122},[1095,1687,1678],{"class":1105},[1095,1689,1261],{"class":1105},[1095,1691,1692,1694,1697,1699,1701],{"class":1097,"line":1150},[1095,1693,1672],{"class":1105},[1095,1695,1696],{"class":1202},"fields",[1095,1698,1678],{"class":1105},[1095,1700,1084],{"class":1105},[1095,1702,1703],{"class":1105}," {\n",[1095,1705,1706,1709,1711,1713,1715,1717,1719,1723,1725,1727,1729,1731,1733,1735,1738,1740,1742,1744,1746,1749,1751],{"class":1097,"line":1171},[1095,1707,1708],{"class":1105},"    \"",[1095,1710,974],{"class":1370},[1095,1712,1678],{"class":1105},[1095,1714,1084],{"class":1105},[1095,1716,1106],{"class":1105},[1095,1718,1683],{"class":1105},[1095,1720,1722],{"class":1721},"sbssI","v",[1095,1724,1678],{"class":1105},[1095,1726,1084],{"class":1105},[1095,1728,1683],{"class":1105},[1095,1730,1585],{"class":1122},[1095,1732,1678],{"class":1105},[1095,1734,1238],{"class":1105},[1095,1736,1737],{"class":1105},"           \"",[1095,1739,1090],{"class":1721},[1095,1741,1678],{"class":1105},[1095,1743,1084],{"class":1105},[1095,1745,1683],{"class":1105},[1095,1747,1748],{"class":1122},"2026-07-08T09:31:12.844Z",[1095,1750,1678],{"class":1105},[1095,1752,1753],{"class":1105}," },\n",[1095,1755,1756,1758,1761,1763,1765,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1797,1799],{"class":1097,"line":1192},[1095,1757,1708],{"class":1105},[1095,1759,1760],{"class":1370},"title",[1095,1762,1678],{"class":1105},[1095,1764,1084],{"class":1105},[1095,1766,1767],{"class":1105},"  {",[1095,1769,1683],{"class":1105},[1095,1771,1722],{"class":1721},[1095,1773,1678],{"class":1105},[1095,1775,1084],{"class":1105},[1095,1777,1683],{"class":1105},[1095,1779,1522],{"class":1122},[1095,1781,1678],{"class":1105},[1095,1783,1238],{"class":1105},[1095,1785,1683],{"class":1105},[1095,1787,1090],{"class":1721},[1095,1789,1678],{"class":1105},[1095,1791,1084],{"class":1105},[1095,1793,1683],{"class":1105},[1095,1795,1796],{"class":1122},"2026-07-08T09:31:12.802Z",[1095,1798,1678],{"class":1105},[1095,1800,1753],{"class":1105},[1095,1802,1803,1805,1807,1809,1811,1814,1816,1818,1820,1822,1824,1826,1828,1830,1833,1835,1837,1839,1841,1843,1845],{"class":1097,"line":1199},[1095,1804,1708],{"class":1105},[1095,1806,978],{"class":1370},[1095,1808,1678],{"class":1105},[1095,1810,1084],{"class":1105},[1095,1812,1813],{"class":1105},"   {",[1095,1815,1683],{"class":1105},[1095,1817,1722],{"class":1721},[1095,1819,1678],{"class":1105},[1095,1821,1084],{"class":1105},[1095,1823,1683],{"class":1105},[1095,1825,1535],{"class":1122},[1095,1827,1678],{"class":1105},[1095,1829,1238],{"class":1105},[1095,1831,1832],{"class":1105},"        \"",[1095,1834,1090],{"class":1721},[1095,1836,1678],{"class":1105},[1095,1838,1084],{"class":1105},[1095,1840,1683],{"class":1105},[1095,1842,1796],{"class":1122},[1095,1844,1678],{"class":1105},[1095,1846,1404],{"class":1105},[1095,1848,1849],{"class":1097,"line":1224},[1095,1850,1851],{"class":1105},"  }\n",[1095,1853,1854],{"class":1097,"line":1245},[1095,1855,1856],{"class":1105},"}\n",[946,1858,1859,1860,1862],{},"With ",[996,1861,864],{"href":865}," enabled, the same merge runs automatically when two devices\npush conflicting versions: the collection registers a CRDT conflict resolver with the\nsync engine, and for each field the entry with the higher timestamp wins.",[1086,1864,1866],{"className":1088,"code":1865,"language":1090,"meta":1091,"style":1091},"const remote = toMemory()   \u002F\u002F the shared sync target both devices reach\n\nconst laptop = await createNoydb({\n  store: toMemory(), sync: remote, user: 'alice', encrypt: false,\n  crdtStrategy: withCrdt(), syncStrategy: withSync(),\n})\nconst phone = await createNoydb({\n  store: toMemory(), sync: remote, user: 'alice', encrypt: false,\n  crdtStrategy: withCrdt(), syncStrategy: withSync(),\n})\n\u002F\u002F encrypt: false — testing only, NO privacy guarantee: the stores hold plaintext.\n\u002F\u002F It keeps this two-instance example self-contained; moving keys between real\n\u002F\u002F devices is the team service's job (grants flow over sync).\n\nconst laptopNotes = (await laptop.openVault('travel'))\n  .collection\u003CNote>('notes', { crdt: 'lww-map' })\nconst phoneNotes = (await phone.openVault('travel'))\n  .collection\u003CNote>('notes', { crdt: 'lww-map' })\n\n\u002F\u002F The laptop writes the note and pushes it\nawait laptopNotes.put('n1', { title: 'Trip to Chiang Mai', body: 'First draft', status: 'draft' })\nawait laptop.push('travel')\n\n\u002F\u002F The phone pulls it, goes offline, and edits only `body`\nawait phone.pull('travel')\nawait phoneNotes.put('n1', { body: 'Phone draft — updated on the train' })\n\n\u002F\u002F Meanwhile the laptop — also offline — edits only `status`\nawait laptopNotes.put('n1', { status: 'reviewed' })\n\n\u002F\u002F Both come back online\nawait phone.push('travel')\nawait laptop.push('travel')   \u002F\u002F conflict detected → merged per field\nawait phone.pull('travel')\n\nawait laptopNotes.get('n1')\n\u002F\u002F → { title: 'Trip to Chiang Mai', body: 'Phone draft — updated on the train', status: 'reviewed' }\nawait phoneNotes.get('n1')\n\u002F\u002F → the same record — both devices converged, neither edit was lost\n",[963,1867,1868,1885,1889,1906,1952,1975,1981,1998,2038,2060,2066,2071,2076,2081,2085,2117,2157,2188,2227,2232,2238,2300,2322,2327,2333,2355,2394,2399,2405,2442,2447,2453,2474,2498,2519,2524,2545,2551,2572],{"__ignoreMap":1091},[1095,1869,1870,1872,1875,1877,1879,1882],{"class":1097,"line":1098},[1095,1871,1203],{"class":1202},[1095,1873,1874],{"class":1109}," remote ",[1095,1876,1209],{"class":1105},[1095,1878,1178],{"class":1215},[1095,1880,1881],{"class":1109},"()   ",[1095,1883,1884],{"class":1241},"\u002F\u002F the shared sync target both devices reach\n",[1095,1886,1887],{"class":1097,"line":1129},[1095,1888,1196],{"emptyLinePlaceholder":1195},[1095,1890,1891,1893,1896,1898,1900,1902,1904],{"class":1097,"line":1150},[1095,1892,1203],{"class":1202},[1095,1894,1895],{"class":1109}," laptop ",[1095,1897,1209],{"class":1105},[1095,1899,1212],{"class":1101},[1095,1901,1110],{"class":1215},[1095,1903,1218],{"class":1109},[1095,1905,1221],{"class":1105},[1095,1907,1908,1910,1912,1914,1916,1918,1921,1923,1926,1928,1931,1933,1935,1937,1939,1941,1944,1946,1950],{"class":1097,"line":1171},[1095,1909,1228],{"class":1227},[1095,1911,1084],{"class":1105},[1095,1913,1178],{"class":1215},[1095,1915,1235],{"class":1109},[1095,1917,1238],{"class":1105},[1095,1919,1920],{"class":1227}," sync",[1095,1922,1084],{"class":1105},[1095,1924,1925],{"class":1109}," remote",[1095,1927,1238],{"class":1105},[1095,1929,1930],{"class":1227}," user",[1095,1932,1084],{"class":1105},[1095,1934,1119],{"class":1105},[1095,1936,1255],{"class":1122},[1095,1938,1258],{"class":1105},[1095,1940,1238],{"class":1105},[1095,1942,1943],{"class":1227}," encrypt",[1095,1945,1084],{"class":1105},[1095,1947,1949],{"class":1948},"sfNiH"," false",[1095,1951,1261],{"class":1105},[1095,1953,1954,1956,1958,1960,1962,1964,1967,1969,1971,1973],{"class":1097,"line":1192},[1095,1955,1284],{"class":1227},[1095,1957,1084],{"class":1105},[1095,1959,1136],{"class":1215},[1095,1961,1235],{"class":1109},[1095,1963,1238],{"class":1105},[1095,1965,1966],{"class":1227}," syncStrategy",[1095,1968,1084],{"class":1105},[1095,1970,1157],{"class":1215},[1095,1972,1235],{"class":1109},[1095,1974,1261],{"class":1105},[1095,1976,1977,1979],{"class":1097,"line":1199},[1095,1978,1315],{"class":1105},[1095,1980,1318],{"class":1109},[1095,1982,1983,1985,1988,1990,1992,1994,1996],{"class":1097,"line":1224},[1095,1984,1203],{"class":1202},[1095,1986,1987],{"class":1109}," phone ",[1095,1989,1209],{"class":1105},[1095,1991,1212],{"class":1101},[1095,1993,1110],{"class":1215},[1095,1995,1218],{"class":1109},[1095,1997,1221],{"class":1105},[1095,1999,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036],{"class":1097,"line":1245},[1095,2001,1228],{"class":1227},[1095,2003,1084],{"class":1105},[1095,2005,1178],{"class":1215},[1095,2007,1235],{"class":1109},[1095,2009,1238],{"class":1105},[1095,2011,1920],{"class":1227},[1095,2013,1084],{"class":1105},[1095,2015,1925],{"class":1109},[1095,2017,1238],{"class":1105},[1095,2019,1930],{"class":1227},[1095,2021,1084],{"class":1105},[1095,2023,1119],{"class":1105},[1095,2025,1255],{"class":1122},[1095,2027,1258],{"class":1105},[1095,2029,1238],{"class":1105},[1095,2031,1943],{"class":1227},[1095,2033,1084],{"class":1105},[1095,2035,1949],{"class":1948},[1095,2037,1261],{"class":1105},[1095,2039,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058],{"class":1097,"line":1264},[1095,2041,1284],{"class":1227},[1095,2043,1084],{"class":1105},[1095,2045,1136],{"class":1215},[1095,2047,1235],{"class":1109},[1095,2049,1238],{"class":1105},[1095,2051,1966],{"class":1227},[1095,2053,1084],{"class":1105},[1095,2055,1157],{"class":1215},[1095,2057,1235],{"class":1109},[1095,2059,1261],{"class":1105},[1095,2061,2062,2064],{"class":1097,"line":1281},[1095,2063,1315],{"class":1105},[1095,2065,1318],{"class":1109},[1095,2067,2068],{"class":1097,"line":1295},[1095,2069,2070],{"class":1241},"\u002F\u002F encrypt: false — testing only, NO privacy guarantee: the stores hold plaintext.\n",[1095,2072,2073],{"class":1097,"line":1312},[1095,2074,2075],{"class":1241},"\u002F\u002F It keeps this two-instance example self-contained; moving keys between real\n",[1095,2077,2078],{"class":1097,"line":1321},[1095,2079,2080],{"class":1241},"\u002F\u002F devices is the team service's job (grants flow over sync).\n",[1095,2082,2083],{"class":1097,"line":1326},[1095,2084,1196],{"emptyLinePlaceholder":1195},[1095,2086,2088,2090,2093,2095,2097,2099,2102,2104,2106,2108,2110,2112,2114],{"class":1097,"line":2087},15,[1095,2089,1203],{"class":1202},[1095,2091,2092],{"class":1109}," laptopNotes ",[1095,2094,1209],{"class":1105},[1095,2096,1040],{"class":1109},[1095,2098,1493],{"class":1101},[1095,2100,2101],{"class":1109}," laptop",[1095,2103,1006],{"class":1105},[1095,2105,1343],{"class":1215},[1095,2107,1218],{"class":1109},[1095,2109,1258],{"class":1105},[1095,2111,1350],{"class":1122},[1095,2113,1258],{"class":1105},[1095,2115,2116],{"class":1109},"))\n",[1095,2118,2120,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147,2149,2151,2153,2155],{"class":1097,"line":2119},16,[1095,2121,2122],{"class":1105},"  .",[1095,2124,1425],{"class":1215},[1095,2126,1428],{"class":1105},[1095,2128,1431],{"class":1370},[1095,2130,1434],{"class":1105},[1095,2132,1218],{"class":1109},[1095,2134,1258],{"class":1105},[1095,2136,1441],{"class":1122},[1095,2138,1258],{"class":1105},[1095,2140,1238],{"class":1105},[1095,2142,1106],{"class":1105},[1095,2144,1450],{"class":1227},[1095,2146,1084],{"class":1105},[1095,2148,1119],{"class":1105},[1095,2150,965],{"class":1122},[1095,2152,1258],{"class":1105},[1095,2154,1113],{"class":1105},[1095,2156,1318],{"class":1109},[1095,2158,2160,2162,2165,2167,2169,2171,2174,2176,2178,2180,2182,2184,2186],{"class":1097,"line":2159},17,[1095,2161,1203],{"class":1202},[1095,2163,2164],{"class":1109}," phoneNotes ",[1095,2166,1209],{"class":1105},[1095,2168,1040],{"class":1109},[1095,2170,1493],{"class":1101},[1095,2172,2173],{"class":1109}," phone",[1095,2175,1006],{"class":1105},[1095,2177,1343],{"class":1215},[1095,2179,1218],{"class":1109},[1095,2181,1258],{"class":1105},[1095,2183,1350],{"class":1122},[1095,2185,1258],{"class":1105},[1095,2187,2116],{"class":1109},[1095,2189,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2225],{"class":1097,"line":2190},18,[1095,2192,2122],{"class":1105},[1095,2194,1425],{"class":1215},[1095,2196,1428],{"class":1105},[1095,2198,1431],{"class":1370},[1095,2200,1434],{"class":1105},[1095,2202,1218],{"class":1109},[1095,2204,1258],{"class":1105},[1095,2206,1441],{"class":1122},[1095,2208,1258],{"class":1105},[1095,2210,1238],{"class":1105},[1095,2212,1106],{"class":1105},[1095,2214,1450],{"class":1227},[1095,2216,1084],{"class":1105},[1095,2218,1119],{"class":1105},[1095,2220,965],{"class":1122},[1095,2222,1258],{"class":1105},[1095,2224,1113],{"class":1105},[1095,2226,1318],{"class":1109},[1095,2228,2230],{"class":1097,"line":2229},19,[1095,2231,1196],{"emptyLinePlaceholder":1195},[1095,2233,2235],{"class":1097,"line":2234},20,[1095,2236,2237],{"class":1241},"\u002F\u002F The laptop writes the note and pushes it\n",[1095,2239,2241,2243,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298],{"class":1097,"line":2240},21,[1095,2242,1493],{"class":1101},[1095,2244,2245],{"class":1109}," laptopNotes",[1095,2247,1006],{"class":1105},[1095,2249,1482],{"class":1215},[1095,2251,1218],{"class":1109},[1095,2253,1258],{"class":1105},[1095,2255,1507],{"class":1122},[1095,2257,1258],{"class":1105},[1095,2259,1238],{"class":1105},[1095,2261,1106],{"class":1105},[1095,2263,1376],{"class":1227},[1095,2265,1084],{"class":1105},[1095,2267,1119],{"class":1105},[1095,2269,1522],{"class":1122},[1095,2271,1258],{"class":1105},[1095,2273,1238],{"class":1105},[1095,2275,1388],{"class":1227},[1095,2277,1084],{"class":1105},[1095,2279,1119],{"class":1105},[1095,2281,1535],{"class":1122},[1095,2283,1258],{"class":1105},[1095,2285,1238],{"class":1105},[1095,2287,1397],{"class":1227},[1095,2289,1084],{"class":1105},[1095,2291,1119],{"class":1105},[1095,2293,1548],{"class":1122},[1095,2295,1258],{"class":1105},[1095,2297,1113],{"class":1105},[1095,2299,1318],{"class":1109},[1095,2301,2303,2305,2307,2309,2312,2314,2316,2318,2320],{"class":1097,"line":2302},22,[1095,2304,1493],{"class":1101},[1095,2306,2101],{"class":1109},[1095,2308,1006],{"class":1105},[1095,2310,2311],{"class":1215},"push",[1095,2313,1218],{"class":1109},[1095,2315,1258],{"class":1105},[1095,2317,1350],{"class":1122},[1095,2319,1258],{"class":1105},[1095,2321,1318],{"class":1109},[1095,2323,2325],{"class":1097,"line":2324},23,[1095,2326,1196],{"emptyLinePlaceholder":1195},[1095,2328,2330],{"class":1097,"line":2329},24,[1095,2331,2332],{"class":1241},"\u002F\u002F The phone pulls it, goes offline, and edits only `body`\n",[1095,2334,2336,2338,2340,2342,2345,2347,2349,2351,2353],{"class":1097,"line":2335},25,[1095,2337,1493],{"class":1101},[1095,2339,2173],{"class":1109},[1095,2341,1006],{"class":1105},[1095,2343,2344],{"class":1215},"pull",[1095,2346,1218],{"class":1109},[1095,2348,1258],{"class":1105},[1095,2350,1350],{"class":1122},[1095,2352,1258],{"class":1105},[1095,2354,1318],{"class":1109},[1095,2356,2358,2360,2363,2365,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2388,2390,2392],{"class":1097,"line":2357},26,[1095,2359,1493],{"class":1101},[1095,2361,2362],{"class":1109}," phoneNotes",[1095,2364,1006],{"class":1105},[1095,2366,1482],{"class":1215},[1095,2368,1218],{"class":1109},[1095,2370,1258],{"class":1105},[1095,2372,1507],{"class":1122},[1095,2374,1258],{"class":1105},[1095,2376,1238],{"class":1105},[1095,2378,1106],{"class":1105},[1095,2380,1388],{"class":1227},[1095,2382,1084],{"class":1105},[1095,2384,1119],{"class":1105},[1095,2386,2387],{"class":1122},"Phone draft — updated on the train",[1095,2389,1258],{"class":1105},[1095,2391,1113],{"class":1105},[1095,2393,1318],{"class":1109},[1095,2395,2397],{"class":1097,"line":2396},27,[1095,2398,1196],{"emptyLinePlaceholder":1195},[1095,2400,2402],{"class":1097,"line":2401},28,[1095,2403,2404],{"class":1241},"\u002F\u002F Meanwhile the laptop — also offline — edits only `status`\n",[1095,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440],{"class":1097,"line":2407},29,[1095,2409,1493],{"class":1101},[1095,2411,2245],{"class":1109},[1095,2413,1006],{"class":1105},[1095,2415,1482],{"class":1215},[1095,2417,1218],{"class":1109},[1095,2419,1258],{"class":1105},[1095,2421,1507],{"class":1122},[1095,2423,1258],{"class":1105},[1095,2425,1238],{"class":1105},[1095,2427,1106],{"class":1105},[1095,2429,1397],{"class":1227},[1095,2431,1084],{"class":1105},[1095,2433,1119],{"class":1105},[1095,2435,1585],{"class":1122},[1095,2437,1258],{"class":1105},[1095,2439,1113],{"class":1105},[1095,2441,1318],{"class":1109},[1095,2443,2445],{"class":1097,"line":2444},30,[1095,2446,1196],{"emptyLinePlaceholder":1195},[1095,2448,2450],{"class":1097,"line":2449},31,[1095,2451,2452],{"class":1241},"\u002F\u002F Both come back online\n",[1095,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472],{"class":1097,"line":2455},32,[1095,2457,1493],{"class":1101},[1095,2459,2173],{"class":1109},[1095,2461,1006],{"class":1105},[1095,2463,2311],{"class":1215},[1095,2465,1218],{"class":1109},[1095,2467,1258],{"class":1105},[1095,2469,1350],{"class":1122},[1095,2471,1258],{"class":1105},[1095,2473,1318],{"class":1109},[1095,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495],{"class":1097,"line":2476},33,[1095,2478,1493],{"class":1101},[1095,2480,2101],{"class":1109},[1095,2482,1006],{"class":1105},[1095,2484,2311],{"class":1215},[1095,2486,1218],{"class":1109},[1095,2488,1258],{"class":1105},[1095,2490,1350],{"class":1122},[1095,2492,1258],{"class":1105},[1095,2494,1592],{"class":1109},[1095,2496,2497],{"class":1241},"\u002F\u002F conflict detected → merged per field\n",[1095,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517],{"class":1097,"line":2500},34,[1095,2502,1493],{"class":1101},[1095,2504,2173],{"class":1109},[1095,2506,1006],{"class":1105},[1095,2508,2344],{"class":1215},[1095,2510,1218],{"class":1109},[1095,2512,1258],{"class":1105},[1095,2514,1350],{"class":1122},[1095,2516,1258],{"class":1105},[1095,2518,1318],{"class":1109},[1095,2520,2522],{"class":1097,"line":2521},35,[1095,2523,1196],{"emptyLinePlaceholder":1195},[1095,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543],{"class":1097,"line":2526},36,[1095,2528,1493],{"class":1101},[1095,2530,2245],{"class":1109},[1095,2532,1006],{"class":1105},[1095,2534,1610],{"class":1215},[1095,2536,1218],{"class":1109},[1095,2538,1258],{"class":1105},[1095,2540,1507],{"class":1122},[1095,2542,1258],{"class":1105},[1095,2544,1318],{"class":1109},[1095,2546,2548],{"class":1097,"line":2547},37,[1095,2549,2550],{"class":1241},"\u002F\u002F → { title: 'Trip to Chiang Mai', body: 'Phone draft — updated on the train', status: 'reviewed' }\n",[1095,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570],{"class":1097,"line":2553},38,[1095,2555,1493],{"class":1101},[1095,2557,2362],{"class":1109},[1095,2559,1006],{"class":1105},[1095,2561,1610],{"class":1215},[1095,2563,1218],{"class":1109},[1095,2565,1258],{"class":1105},[1095,2567,1507],{"class":1122},[1095,2569,1258],{"class":1105},[1095,2571,1318],{"class":1109},[1095,2573,2575],{"class":1097,"line":2574},39,[1095,2576,2577],{"class":1241},"\u002F\u002F → the same record — both devices converged, neither edit was lost\n",[1468,2579,2581,2582],{"id":2580},"ordered-lists-with-rga","Ordered lists with ",[963,2583,986],{},[946,2585,1476,2586,2588],{},[963,2587,986],{}," mode the record is an array. Elements get stable ids (ULIDs) on first insertion;\nwriting the array without an element tombstones it instead of deleting it, so concurrent\nremovals and inserts from two devices union without duplicating or resurrecting items:",[1086,2590,2592],{"className":1088,"code":2591,"language":1090,"meta":1091,"style":1091},"const tags = vault.collection\u003Cstring[]>('tags', { crdt: 'rga' })\n\nawait tags.put('rec1', ['alpha', 'beta', 'gamma'])\nawait tags.put('rec1', ['alpha', 'gamma'])   \u002F\u002F remove 'beta' by writing the list without it\n\nawait tags.get('rec1')\n\u002F\u002F → ['alpha', 'gamma']\n\nawait tags.getRaw('rec1')\n",[963,2593,2594,2646,2650,2703,2745,2749,2769,2774,2778],{"__ignoreMap":1091},[1095,2595,2596,2598,2601,2603,2605,2607,2609,2611,2614,2617,2619,2621,2623,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644],{"class":1097,"line":1098},[1095,2597,1203],{"class":1202},[1095,2599,2600],{"class":1109}," tags ",[1095,2602,1209],{"class":1105},[1095,2604,1420],{"class":1109},[1095,2606,1006],{"class":1105},[1095,2608,1425],{"class":1215},[1095,2610,1428],{"class":1105},[1095,2612,2613],{"class":1370},"string",[1095,2615,2616],{"class":1109},"[]",[1095,2618,1434],{"class":1105},[1095,2620,1218],{"class":1109},[1095,2622,1258],{"class":1105},[1095,2624,2625],{"class":1122},"tags",[1095,2627,1258],{"class":1105},[1095,2629,1238],{"class":1105},[1095,2631,1106],{"class":1105},[1095,2633,1450],{"class":1227},[1095,2635,1084],{"class":1105},[1095,2637,1119],{"class":1105},[1095,2639,986],{"class":1122},[1095,2641,1258],{"class":1105},[1095,2643,1113],{"class":1105},[1095,2645,1318],{"class":1109},[1095,2647,2648],{"class":1097,"line":1129},[1095,2649,1196],{"emptyLinePlaceholder":1195},[1095,2651,2652,2654,2657,2659,2661,2663,2665,2668,2670,2672,2675,2677,2680,2682,2684,2686,2689,2691,2693,2695,2698,2700],{"class":1097,"line":1150},[1095,2653,1493],{"class":1101},[1095,2655,2656],{"class":1109}," tags",[1095,2658,1006],{"class":1105},[1095,2660,1482],{"class":1215},[1095,2662,1218],{"class":1109},[1095,2664,1258],{"class":1105},[1095,2666,2667],{"class":1122},"rec1",[1095,2669,1258],{"class":1105},[1095,2671,1238],{"class":1105},[1095,2673,2674],{"class":1109}," [",[1095,2676,1258],{"class":1105},[1095,2678,2679],{"class":1122},"alpha",[1095,2681,1258],{"class":1105},[1095,2683,1238],{"class":1105},[1095,2685,1119],{"class":1105},[1095,2687,2688],{"class":1122},"beta",[1095,2690,1258],{"class":1105},[1095,2692,1238],{"class":1105},[1095,2694,1119],{"class":1105},[1095,2696,2697],{"class":1122},"gamma",[1095,2699,1258],{"class":1105},[1095,2701,2702],{"class":1109},"])\n",[1095,2704,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2742],{"class":1097,"line":1171},[1095,2706,1493],{"class":1101},[1095,2708,2656],{"class":1109},[1095,2710,1006],{"class":1105},[1095,2712,1482],{"class":1215},[1095,2714,1218],{"class":1109},[1095,2716,1258],{"class":1105},[1095,2718,2667],{"class":1122},[1095,2720,1258],{"class":1105},[1095,2722,1238],{"class":1105},[1095,2724,2674],{"class":1109},[1095,2726,1258],{"class":1105},[1095,2728,2679],{"class":1122},[1095,2730,1258],{"class":1105},[1095,2732,1238],{"class":1105},[1095,2734,1119],{"class":1105},[1095,2736,2697],{"class":1122},[1095,2738,1258],{"class":1105},[1095,2740,2741],{"class":1109},"])   ",[1095,2743,2744],{"class":1241},"\u002F\u002F remove 'beta' by writing the list without it\n",[1095,2746,2747],{"class":1097,"line":1192},[1095,2748,1196],{"emptyLinePlaceholder":1195},[1095,2750,2751,2753,2755,2757,2759,2761,2763,2765,2767],{"class":1097,"line":1199},[1095,2752,1493],{"class":1101},[1095,2754,2656],{"class":1109},[1095,2756,1006],{"class":1105},[1095,2758,1610],{"class":1215},[1095,2760,1218],{"class":1109},[1095,2762,1258],{"class":1105},[1095,2764,2667],{"class":1122},[1095,2766,1258],{"class":1105},[1095,2768,1318],{"class":1109},[1095,2770,2771],{"class":1097,"line":1224},[1095,2772,2773],{"class":1241},"\u002F\u002F → ['alpha', 'gamma']\n",[1095,2775,2776],{"class":1097,"line":1245},[1095,2777,1196],{"emptyLinePlaceholder":1195},[1095,2779,2780,2782,2784,2786,2788,2790,2792,2794,2796],{"class":1097,"line":1264},[1095,2781,1493],{"class":1101},[1095,2783,2656],{"class":1109},[1095,2785,1006],{"class":1105},[1095,2787,1647],{"class":1215},[1095,2789,1218],{"class":1109},[1095,2791,1258],{"class":1105},[1095,2793,2667],{"class":1122},[1095,2795,1258],{"class":1105},[1095,2797,1318],{"class":1109},[1086,2799,2801],{"className":1660,"code":2800,"language":141,"meta":1091,"style":1091},"{\n  \"_crdt\": \"rga\",\n  \"items\": [\n    { \"nid\": \"01JZGJ3V9GQ2N9W3H4X5T6K7R8\", \"v\": \"alpha\" },\n    { \"nid\": \"01JZGJ3V9SQ0F2B7C8D9E0A1B2\", \"v\": \"gamma\" },\n    { \"nid\": \"01JZGJ3V9J4D6E8F0G2H4J6K8M\", \"v\": \"beta\" }\n  ],\n  \"tombstones\": [\"01JZGJ3V9J4D6E8F0G2H4J6K8M\"]\n}\n",[963,2802,2803,2807,2825,2839,2878,2915,2952,2957,2979],{"__ignoreMap":1091},[1095,2804,2805],{"class":1097,"line":1098},[1095,2806,1221],{"class":1105},[1095,2808,2809,2811,2813,2815,2817,2819,2821,2823],{"class":1097,"line":1129},[1095,2810,1672],{"class":1105},[1095,2812,1675],{"class":1202},[1095,2814,1678],{"class":1105},[1095,2816,1084],{"class":1105},[1095,2818,1683],{"class":1105},[1095,2820,986],{"class":1122},[1095,2822,1678],{"class":1105},[1095,2824,1261],{"class":1105},[1095,2826,2827,2829,2832,2834,2836],{"class":1097,"line":1150},[1095,2828,1672],{"class":1105},[1095,2830,2831],{"class":1202},"items",[1095,2833,1678],{"class":1105},[1095,2835,1084],{"class":1105},[1095,2837,2838],{"class":1105}," [\n",[1095,2840,2841,2844,2846,2849,2851,2853,2855,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876],{"class":1097,"line":1171},[1095,2842,2843],{"class":1105},"    {",[1095,2845,1683],{"class":1105},[1095,2847,2848],{"class":1370},"nid",[1095,2850,1678],{"class":1105},[1095,2852,1084],{"class":1105},[1095,2854,1683],{"class":1105},[1095,2856,2857],{"class":1122},"01JZGJ3V9GQ2N9W3H4X5T6K7R8",[1095,2859,1678],{"class":1105},[1095,2861,1238],{"class":1105},[1095,2863,1683],{"class":1105},[1095,2865,1722],{"class":1370},[1095,2867,1678],{"class":1105},[1095,2869,1084],{"class":1105},[1095,2871,1683],{"class":1105},[1095,2873,2679],{"class":1122},[1095,2875,1678],{"class":1105},[1095,2877,1753],{"class":1105},[1095,2879,2880,2882,2884,2886,2888,2890,2892,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913],{"class":1097,"line":1192},[1095,2881,2843],{"class":1105},[1095,2883,1683],{"class":1105},[1095,2885,2848],{"class":1370},[1095,2887,1678],{"class":1105},[1095,2889,1084],{"class":1105},[1095,2891,1683],{"class":1105},[1095,2893,2894],{"class":1122},"01JZGJ3V9SQ0F2B7C8D9E0A1B2",[1095,2896,1678],{"class":1105},[1095,2898,1238],{"class":1105},[1095,2900,1683],{"class":1105},[1095,2902,1722],{"class":1370},[1095,2904,1678],{"class":1105},[1095,2906,1084],{"class":1105},[1095,2908,1683],{"class":1105},[1095,2910,2697],{"class":1122},[1095,2912,1678],{"class":1105},[1095,2914,1753],{"class":1105},[1095,2916,2917,2919,2921,2923,2925,2927,2929,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950],{"class":1097,"line":1199},[1095,2918,2843],{"class":1105},[1095,2920,1683],{"class":1105},[1095,2922,2848],{"class":1370},[1095,2924,1678],{"class":1105},[1095,2926,1084],{"class":1105},[1095,2928,1683],{"class":1105},[1095,2930,2931],{"class":1122},"01JZGJ3V9J4D6E8F0G2H4J6K8M",[1095,2933,1678],{"class":1105},[1095,2935,1238],{"class":1105},[1095,2937,1683],{"class":1105},[1095,2939,1722],{"class":1370},[1095,2941,1678],{"class":1105},[1095,2943,1084],{"class":1105},[1095,2945,1683],{"class":1105},[1095,2947,2688],{"class":1122},[1095,2949,1678],{"class":1105},[1095,2951,1404],{"class":1105},[1095,2953,2954],{"class":1097,"line":1224},[1095,2955,2956],{"class":1105},"  ],\n",[1095,2958,2959,2961,2964,2966,2968,2970,2972,2974,2976],{"class":1097,"line":1245},[1095,2960,1672],{"class":1105},[1095,2962,2963],{"class":1202},"tombstones",[1095,2965,1678],{"class":1105},[1095,2967,1084],{"class":1105},[1095,2969,2674],{"class":1105},[1095,2971,1678],{"class":1105},[1095,2973,2931],{"class":1122},[1095,2975,1678],{"class":1105},[1095,2977,2978],{"class":1105},"]\n",[1095,2980,2981],{"class":1097,"line":1264},[1095,2982,1856],{"class":1105},[946,2984,2985,2986,2988],{},"Tombstoned items stay in ",[963,2987,2831],{}," to preserve ordering for cross-device merges; the\nresolved snapshot filters them out. Re-inserting an equal value reuses its existing id,\nso element identity is stable across devices.",[1468,2990,2992,2993],{"id":2991},"collaborative-documents-with-yjs","Collaborative documents with ",[963,2994,287],{},[946,2996,2997,2998,3001,3002,3004,3005,3008,3009,3012,3013,3016,3017,3020,3021,3024],{},"For rich-text and structured collaborative editing, use\n",[996,2999,1001],{"href":998,"rel":3000},[1000]," through the companion package ",[963,3003,1005],{}," (requires ",[963,3006,3007],{},"yjs >= 13","\nas a peer dependency). ",[963,3010,3011],{},"yjsCollection"," wraps a ",[963,3014,3015],{},"crdt: 'yjs'"," collection with\n",[963,3018,3019],{},"getYDoc"," \u002F ",[963,3022,3023],{},"putYDoc","; the encrypted envelope stores the encoded Yjs update:",[1086,3026,3028],{"className":1088,"code":3027,"language":1090,"meta":1091,"style":1091},"import * as Y from 'yjs'\nimport { yjsCollection, yText, yMap } from '@noy-db\u002Fin-yjs'\n\nconst docs = yjsCollection(vault, 'docs', {\n  yFields: { body: yText(), meta: yMap() },\n})\n\nconst doc = await docs.getYDoc('doc-1')\ndoc.getText('body').insert(0, 'Hello')\ndoc.getMap('meta').set('author', 'alice')\nawait docs.putYDoc('doc-1', doc)\n\nconst reloaded = await docs.getYDoc('doc-1')\nreloaded.getText('body').toString()    \u002F\u002F → 'Hello'\nreloaded.getMap('meta').get('author')  \u002F\u002F → 'alice'\n",[963,3029,3030,3052,3081,3085,3112,3144,3150,3154,3183,3225,3269,3292,3296,3323,3353],{"__ignoreMap":1091},[1095,3031,3032,3034,3037,3040,3043,3046,3048,3050],{"class":1097,"line":1098},[1095,3033,1102],{"class":1101},[1095,3035,3036],{"class":1105}," *",[1095,3038,3039],{"class":1101}," as",[1095,3041,3042],{"class":1109}," Y ",[1095,3044,3045],{"class":1101},"from",[1095,3047,1119],{"class":1105},[1095,3049,287],{"class":1122},[1095,3051,1126],{"class":1105},[1095,3053,3054,3056,3058,3061,3063,3066,3068,3071,3073,3075,3077,3079],{"class":1097,"line":1129},[1095,3055,1102],{"class":1101},[1095,3057,1106],{"class":1105},[1095,3059,3060],{"class":1109}," yjsCollection",[1095,3062,1238],{"class":1105},[1095,3064,3065],{"class":1109}," yText",[1095,3067,1238],{"class":1105},[1095,3069,3070],{"class":1109}," yMap",[1095,3072,1113],{"class":1105},[1095,3074,1116],{"class":1101},[1095,3076,1119],{"class":1105},[1095,3078,1005],{"class":1122},[1095,3080,1126],{"class":1105},[1095,3082,3083],{"class":1097,"line":1150},[1095,3084,1196],{"emptyLinePlaceholder":1195},[1095,3086,3087,3089,3092,3094,3096,3099,3101,3103,3106,3108,3110],{"class":1097,"line":1171},[1095,3088,1203],{"class":1202},[1095,3090,3091],{"class":1109}," docs ",[1095,3093,1209],{"class":1105},[1095,3095,3060],{"class":1215},[1095,3097,3098],{"class":1109},"(vault",[1095,3100,1238],{"class":1105},[1095,3102,1119],{"class":1105},[1095,3104,3105],{"class":1122},"docs",[1095,3107,1258],{"class":1105},[1095,3109,1238],{"class":1105},[1095,3111,1703],{"class":1105},[1095,3113,3114,3117,3119,3121,3123,3125,3127,3129,3131,3134,3136,3138,3141],{"class":1097,"line":1192},[1095,3115,3116],{"class":1227},"  yFields",[1095,3118,1084],{"class":1105},[1095,3120,1106],{"class":1105},[1095,3122,1388],{"class":1227},[1095,3124,1084],{"class":1105},[1095,3126,3065],{"class":1215},[1095,3128,1235],{"class":1109},[1095,3130,1238],{"class":1105},[1095,3132,3133],{"class":1227}," meta",[1095,3135,1084],{"class":1105},[1095,3137,3070],{"class":1215},[1095,3139,3140],{"class":1109},"() ",[1095,3142,3143],{"class":1105},"},\n",[1095,3145,3146,3148],{"class":1097,"line":1199},[1095,3147,1315],{"class":1105},[1095,3149,1318],{"class":1109},[1095,3151,3152],{"class":1097,"line":1224},[1095,3153,1196],{"emptyLinePlaceholder":1195},[1095,3155,3156,3158,3161,3163,3165,3168,3170,3172,3174,3176,3179,3181],{"class":1097,"line":1245},[1095,3157,1203],{"class":1202},[1095,3159,3160],{"class":1109}," doc ",[1095,3162,1209],{"class":1105},[1095,3164,1212],{"class":1101},[1095,3166,3167],{"class":1109}," docs",[1095,3169,1006],{"class":1105},[1095,3171,3019],{"class":1215},[1095,3173,1218],{"class":1109},[1095,3175,1258],{"class":1105},[1095,3177,3178],{"class":1122},"doc-1",[1095,3180,1258],{"class":1105},[1095,3182,1318],{"class":1109},[1095,3184,3185,3188,3190,3193,3195,3197,3199,3201,3204,3206,3209,3211,3214,3216,3218,3221,3223],{"class":1097,"line":1264},[1095,3186,3187],{"class":1109},"doc",[1095,3189,1006],{"class":1105},[1095,3191,3192],{"class":1215},"getText",[1095,3194,1218],{"class":1109},[1095,3196,1258],{"class":1105},[1095,3198,978],{"class":1122},[1095,3200,1258],{"class":1105},[1095,3202,3203],{"class":1109},")",[1095,3205,1006],{"class":1105},[1095,3207,3208],{"class":1215},"insert",[1095,3210,1218],{"class":1109},[1095,3212,3213],{"class":1721},"0",[1095,3215,1238],{"class":1105},[1095,3217,1119],{"class":1105},[1095,3219,3220],{"class":1122},"Hello",[1095,3222,1258],{"class":1105},[1095,3224,1318],{"class":1109},[1095,3226,3227,3229,3231,3234,3236,3238,3241,3243,3245,3247,3250,3252,3254,3257,3259,3261,3263,3265,3267],{"class":1097,"line":1281},[1095,3228,3187],{"class":1109},[1095,3230,1006],{"class":1105},[1095,3232,3233],{"class":1215},"getMap",[1095,3235,1218],{"class":1109},[1095,3237,1258],{"class":1105},[1095,3239,3240],{"class":1122},"meta",[1095,3242,1258],{"class":1105},[1095,3244,3203],{"class":1109},[1095,3246,1006],{"class":1105},[1095,3248,3249],{"class":1215},"set",[1095,3251,1218],{"class":1109},[1095,3253,1258],{"class":1105},[1095,3255,3256],{"class":1122},"author",[1095,3258,1258],{"class":1105},[1095,3260,1238],{"class":1105},[1095,3262,1119],{"class":1105},[1095,3264,1255],{"class":1122},[1095,3266,1258],{"class":1105},[1095,3268,1318],{"class":1109},[1095,3270,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289],{"class":1097,"line":1295},[1095,3272,1493],{"class":1101},[1095,3274,3167],{"class":1109},[1095,3276,1006],{"class":1105},[1095,3278,3023],{"class":1215},[1095,3280,1218],{"class":1109},[1095,3282,1258],{"class":1105},[1095,3284,3178],{"class":1122},[1095,3286,1258],{"class":1105},[1095,3288,1238],{"class":1105},[1095,3290,3291],{"class":1109}," doc)\n",[1095,3293,3294],{"class":1097,"line":1312},[1095,3295,1196],{"emptyLinePlaceholder":1195},[1095,3297,3298,3300,3303,3305,3307,3309,3311,3313,3315,3317,3319,3321],{"class":1097,"line":1321},[1095,3299,1203],{"class":1202},[1095,3301,3302],{"class":1109}," reloaded ",[1095,3304,1209],{"class":1105},[1095,3306,1212],{"class":1101},[1095,3308,3167],{"class":1109},[1095,3310,1006],{"class":1105},[1095,3312,3019],{"class":1215},[1095,3314,1218],{"class":1109},[1095,3316,1258],{"class":1105},[1095,3318,3178],{"class":1122},[1095,3320,1258],{"class":1105},[1095,3322,1318],{"class":1109},[1095,3324,3325,3328,3330,3332,3334,3336,3338,3340,3342,3344,3347,3350],{"class":1097,"line":1326},[1095,3326,3327],{"class":1109},"reloaded",[1095,3329,1006],{"class":1105},[1095,3331,3192],{"class":1215},[1095,3333,1218],{"class":1109},[1095,3335,1258],{"class":1105},[1095,3337,978],{"class":1122},[1095,3339,1258],{"class":1105},[1095,3341,3203],{"class":1109},[1095,3343,1006],{"class":1105},[1095,3345,3346],{"class":1215},"toString",[1095,3348,3349],{"class":1109},"()    ",[1095,3351,3352],{"class":1241},"\u002F\u002F → 'Hello'\n",[1095,3354,3355,3357,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3386],{"class":1097,"line":2087},[1095,3356,3327],{"class":1109},[1095,3358,1006],{"class":1105},[1095,3360,3233],{"class":1215},[1095,3362,1218],{"class":1109},[1095,3364,1258],{"class":1105},[1095,3366,3240],{"class":1122},[1095,3368,1258],{"class":1105},[1095,3370,3203],{"class":1109},[1095,3372,1006],{"class":1105},[1095,3374,1610],{"class":1215},[1095,3376,1218],{"class":1109},[1095,3378,1258],{"class":1105},[1095,3380,3256],{"class":1122},[1095,3382,1258],{"class":1105},[1095,3384,3385],{"class":1109},")  ",[1095,3387,3388],{"class":1241},"\u002F\u002F → 'alice'\n",[946,3390,3391],{},"Two collaborators forking from the same baseline converge by exchanging Yjs updates —\nthe standard Yjs contract, preserved through encrypted storage:",[1086,3393,3395],{"className":1088,"code":3394,"language":1090,"meta":1091,"style":1091},"const docA = await docs.getYDoc('doc-1')\ndocA.getText('body').insert(docA.getText('body').length, ' from Alice')\n\nconst docB = await docs.getYDoc('doc-1')\ndocB.getText('body').insert(0, 'Hi! ')\n\nY.applyUpdate(docA, Y.encodeStateAsUpdate(docB))\nY.applyUpdate(docB, Y.encodeStateAsUpdate(docA))\n\ndocA.getText('body').toString()   \u002F\u002F → 'Hi! Hello from Alice'\ndocB.getText('body').toString()   \u002F\u002F → 'Hi! Hello from Alice' — converged\n\nawait docs.putYDoc('doc-1', docA)\n",[963,3396,3397,3424,3480,3484,3511,3549,3553,3578,3600,3604,3631,3658,3662],{"__ignoreMap":1091},[1095,3398,3399,3401,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422],{"class":1097,"line":1098},[1095,3400,1203],{"class":1202},[1095,3402,3403],{"class":1109}," docA ",[1095,3405,1209],{"class":1105},[1095,3407,1212],{"class":1101},[1095,3409,3167],{"class":1109},[1095,3411,1006],{"class":1105},[1095,3413,3019],{"class":1215},[1095,3415,1218],{"class":1109},[1095,3417,1258],{"class":1105},[1095,3419,3178],{"class":1122},[1095,3421,1258],{"class":1105},[1095,3423,1318],{"class":1109},[1095,3425,3426,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447,3450,3452,3454,3456,3458,3460,3462,3464,3466,3469,3471,3473,3476,3478],{"class":1097,"line":1129},[1095,3427,3428],{"class":1109},"docA",[1095,3430,1006],{"class":1105},[1095,3432,3192],{"class":1215},[1095,3434,1218],{"class":1109},[1095,3436,1258],{"class":1105},[1095,3438,978],{"class":1122},[1095,3440,1258],{"class":1105},[1095,3442,3203],{"class":1109},[1095,3444,1006],{"class":1105},[1095,3446,3208],{"class":1215},[1095,3448,3449],{"class":1109},"(docA",[1095,3451,1006],{"class":1105},[1095,3453,3192],{"class":1215},[1095,3455,1218],{"class":1109},[1095,3457,1258],{"class":1105},[1095,3459,978],{"class":1122},[1095,3461,1258],{"class":1105},[1095,3463,3203],{"class":1109},[1095,3465,1006],{"class":1105},[1095,3467,3468],{"class":1109},"length",[1095,3470,1238],{"class":1105},[1095,3472,1119],{"class":1105},[1095,3474,3475],{"class":1122}," from Alice",[1095,3477,1258],{"class":1105},[1095,3479,1318],{"class":1109},[1095,3481,3482],{"class":1097,"line":1150},[1095,3483,1196],{"emptyLinePlaceholder":1195},[1095,3485,3486,3488,3491,3493,3495,3497,3499,3501,3503,3505,3507,3509],{"class":1097,"line":1171},[1095,3487,1203],{"class":1202},[1095,3489,3490],{"class":1109}," docB ",[1095,3492,1209],{"class":1105},[1095,3494,1212],{"class":1101},[1095,3496,3167],{"class":1109},[1095,3498,1006],{"class":1105},[1095,3500,3019],{"class":1215},[1095,3502,1218],{"class":1109},[1095,3504,1258],{"class":1105},[1095,3506,3178],{"class":1122},[1095,3508,1258],{"class":1105},[1095,3510,1318],{"class":1109},[1095,3512,3513,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3545,3547],{"class":1097,"line":1192},[1095,3514,3515],{"class":1109},"docB",[1095,3517,1006],{"class":1105},[1095,3519,3192],{"class":1215},[1095,3521,1218],{"class":1109},[1095,3523,1258],{"class":1105},[1095,3525,978],{"class":1122},[1095,3527,1258],{"class":1105},[1095,3529,3203],{"class":1109},[1095,3531,1006],{"class":1105},[1095,3533,3208],{"class":1215},[1095,3535,1218],{"class":1109},[1095,3537,3213],{"class":1721},[1095,3539,1238],{"class":1105},[1095,3541,1119],{"class":1105},[1095,3543,3544],{"class":1122},"Hi! ",[1095,3546,1258],{"class":1105},[1095,3548,1318],{"class":1109},[1095,3550,3551],{"class":1097,"line":1199},[1095,3552,1196],{"emptyLinePlaceholder":1195},[1095,3554,3555,3558,3560,3563,3565,3567,3570,3572,3575],{"class":1097,"line":1224},[1095,3556,3557],{"class":1109},"Y",[1095,3559,1006],{"class":1105},[1095,3561,3562],{"class":1215},"applyUpdate",[1095,3564,3449],{"class":1109},[1095,3566,1238],{"class":1105},[1095,3568,3569],{"class":1109}," Y",[1095,3571,1006],{"class":1105},[1095,3573,3574],{"class":1215},"encodeStateAsUpdate",[1095,3576,3577],{"class":1109},"(docB))\n",[1095,3579,3580,3582,3584,3586,3589,3591,3593,3595,3597],{"class":1097,"line":1245},[1095,3581,3557],{"class":1109},[1095,3583,1006],{"class":1105},[1095,3585,3562],{"class":1215},[1095,3587,3588],{"class":1109},"(docB",[1095,3590,1238],{"class":1105},[1095,3592,3569],{"class":1109},[1095,3594,1006],{"class":1105},[1095,3596,3574],{"class":1215},[1095,3598,3599],{"class":1109},"(docA))\n",[1095,3601,3602],{"class":1097,"line":1264},[1095,3603,1196],{"emptyLinePlaceholder":1195},[1095,3605,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628],{"class":1097,"line":1281},[1095,3607,3428],{"class":1109},[1095,3609,1006],{"class":1105},[1095,3611,3192],{"class":1215},[1095,3613,1218],{"class":1109},[1095,3615,1258],{"class":1105},[1095,3617,978],{"class":1122},[1095,3619,1258],{"class":1105},[1095,3621,3203],{"class":1109},[1095,3623,1006],{"class":1105},[1095,3625,3346],{"class":1215},[1095,3627,1881],{"class":1109},[1095,3629,3630],{"class":1241},"\u002F\u002F → 'Hi! Hello from Alice'\n",[1095,3632,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655],{"class":1097,"line":1295},[1095,3634,3515],{"class":1109},[1095,3636,1006],{"class":1105},[1095,3638,3192],{"class":1215},[1095,3640,1218],{"class":1109},[1095,3642,1258],{"class":1105},[1095,3644,978],{"class":1122},[1095,3646,1258],{"class":1105},[1095,3648,3203],{"class":1109},[1095,3650,1006],{"class":1105},[1095,3652,3346],{"class":1215},[1095,3654,1881],{"class":1109},[1095,3656,3657],{"class":1241},"\u002F\u002F → 'Hi! Hello from Alice' — converged\n",[1095,3659,3660],{"class":1097,"line":1312},[1095,3661,1196],{"emptyLinePlaceholder":1195},[1095,3663,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682],{"class":1097,"line":1321},[1095,3665,1493],{"class":1101},[1095,3667,3167],{"class":1109},[1095,3669,1006],{"class":1105},[1095,3671,3023],{"class":1215},[1095,3673,1218],{"class":1109},[1095,3675,1258],{"class":1105},[1095,3677,3178],{"class":1122},[1095,3679,1258],{"class":1105},[1095,3681,1238],{"class":1105},[1095,3683,3684],{"class":1109}," docA)\n",[941,3686,3688],{"id":3687},"api","API",[1468,3690,3692],{"id":3691},"withcrdt",[963,3693,3694],{},"withCrdt()",[1086,3696,3698],{"className":1088,"code":3697,"language":1090,"meta":1091,"style":1091},"function withCrdt(): CrdtStrategy\n",[963,3699,3700],{"__ignoreMap":1091},[1095,3701,3702,3705,3707,3710],{"class":1097,"line":1098},[1095,3703,3704],{"class":1202},"function",[1095,3706,1136],{"class":1215},[1095,3708,3709],{"class":1105},"():",[1095,3711,3712],{"class":1370}," CrdtStrategy\n",[946,3714,3715,3716,1080,3719,3721],{},"Builds the active CRDT strategy. Pass it as ",[963,3717,3718],{},"crdtStrategy",[963,3720,1083],{}," — this is the\nonly wiring step. Takes no options.",[1468,3723,3725],{"id":3724},"vaultcollectionname-crdt",[963,3726,3727],{},"vault.collection(name, { crdt })",[1086,3729,3731],{"className":1088,"code":3730,"language":1090,"meta":1091,"style":1091},"vault.collection\u003CT>(name, { crdt: 'lww-map' | 'rga' | 'yjs' })\n",[963,3732,3733],{"__ignoreMap":1091},[1095,3734,3735,3738,3740,3742,3744,3747,3749,3752,3754,3756,3758,3760,3762,3764,3766,3769,3771,3773,3775,3777,3779,3781,3783,3785],{"class":1097,"line":1098},[1095,3736,3737],{"class":1109},"vault",[1095,3739,1006],{"class":1105},[1095,3741,1425],{"class":1215},[1095,3743,1428],{"class":1105},[1095,3745,3746],{"class":1370},"T",[1095,3748,1434],{"class":1105},[1095,3750,3751],{"class":1109},"(name",[1095,3753,1238],{"class":1105},[1095,3755,1106],{"class":1105},[1095,3757,1450],{"class":1227},[1095,3759,1084],{"class":1105},[1095,3761,1119],{"class":1105},[1095,3763,965],{"class":1122},[1095,3765,1258],{"class":1105},[1095,3767,3768],{"class":1105}," |",[1095,3770,1119],{"class":1105},[1095,3772,986],{"class":1122},[1095,3774,1258],{"class":1105},[1095,3776,3768],{"class":1105},[1095,3778,1119],{"class":1105},[1095,3780,287],{"class":1122},[1095,3782,1258],{"class":1105},[1095,3784,1113],{"class":1105},[1095,3786,1318],{"class":1109},[946,3788,3789,3790,3792,3793,3795,3796,3798,3799,3801,3802,3804,3805,3807],{},"Declares the collection's CRDT mode at construction. ",[963,3791,3746],{}," is the resolved snapshot type:\na record object for ",[963,3794,965],{},", an array for ",[963,3797,986],{},", and ",[963,3800,2613],{}," (the base64-encoded Yjs\nupdate) for ",[963,3803,287],{},". When ",[996,3806,864],{"href":865}," is also enabled, the collection registers\na CRDT conflict resolver with the sync engine automatically.",[1468,3809,3811],{"id":3810},"collectiongetrawid",[963,3812,1024],{},[1086,3814,3816],{"className":1088,"code":3815,"language":1090,"meta":1091,"style":1091},"collection.getRaw(id: string): Promise\u003CCrdtState | null>\n",[963,3817,3818],{"__ignoreMap":1091},[1095,3819,3820,3822,3824,3826,3829,3832,3834,3837,3840],{"class":1097,"line":1098},[1095,3821,1425],{"class":1109},[1095,3823,1006],{"class":1105},[1095,3825,1647],{"class":1215},[1095,3827,3828],{"class":1109},"(id: string): ",[1095,3830,3831],{"class":1370},"Promise",[1095,3833,1428],{"class":1105},[1095,3835,3836],{"class":1109},"CrdtState ",[1095,3838,3839],{"class":1105},"|",[1095,3841,3842],{"class":1105}," null>\n",[946,3844,3845,3846,3849,3850,3852,3853,3856],{},"Returns the raw CRDT state for a record (",[963,3847,3848],{},"null"," if absent). Only available on collections\ndeclared with a ",[963,3851,653],{}," option — on a plain collection it throws. Use it to inspect merge\nstate or to feed external merge tooling; normal reads go through ",[963,3854,3855],{},"get(id)",", which returns\nthe resolved snapshot.",[1468,3858,3860],{"id":3859},"merge-helpers","Merge helpers",[946,3862,3863,3864,3866],{},"The building blocks ",[963,3865,3694],{}," wires in are also exported for advanced use (custom\nstrategies, offline merge tooling):",[3868,3869,3870,3886],"table",{},[3871,3872,3873],"thead",{},[3874,3875,3876,3880,3883],"tr",{},[3877,3878,3879],"th",{},"Export",[3877,3881,3882],{},"Signature",[3877,3884,3885],{},"Purpose",[3887,3888,3889,3909,3924,3958],"tbody",{},[3874,3890,3891,3897,3902],{},[3892,3893,3894],"td",{},[963,3895,3896],{},"buildLwwMapState",[3892,3898,3899],{},[963,3900,3901],{},"(record, previous, now: string) => LwwMapState",[3892,3903,3904,3905,3908],{},"Fold a new record into an existing per-field state; fields absent from ",[963,3906,3907],{},"record"," are preserved.",[3874,3910,3911,3916,3921],{},[3892,3912,3913],{},[963,3914,3915],{},"buildRgaState",[3892,3917,3918],{},[963,3919,3920],{},"(items, previous, idGen: () => string) => RgaState",[3892,3922,3923],{},"Fold a new array into an existing RGA state; unmatched existing items are tombstoned.",[3874,3925,3926,3931,3936],{},[3892,3927,3928],{},[963,3929,3930],{},"mergeCrdtStates",[3892,3932,3933],{},[963,3934,3935],{},"(local, remote) => CrdtState",[3892,3937,3938,3939,3941,3942,3944,3945,3948,3949,3951,3952,3954,3955,3957],{},"Merge two concurrent states of the same mode. For ",[963,3940,965],{},", the higher ",[963,3943,1090],{}," wins per field (ties favor ",[963,3946,3947],{},"local","); for ",[963,3950,986],{},", items and tombstones union. For ",[963,3953,287],{}," it returns ",[963,3956,3947],{}," unchanged — core cannot merge Yjs bytes.",[3874,3959,3960,3965,3970],{},[3892,3961,3962],{},[963,3963,3964],{},"resolveCrdtSnapshot",[3892,3966,3967],{},[963,3968,3969],{},"(state) => unknown",[3892,3971,3972,3973,3975,3976,3978,3979,1006],{},"State → user-facing snapshot: field map for ",[963,3974,965],{},", live-item array for ",[963,3977,986],{},", base64 update string for ",[963,3980,287],{},[1086,3982,3984],{"className":1088,"code":3983,"language":1090,"meta":1091,"style":1091},"import { mergeCrdtStates, resolveCrdtSnapshot } from '@noy-db\u002Fhub\u002Fcrdt'\n\nconst merged = mergeCrdtStates(localState, remoteState)\nresolveCrdtSnapshot(merged)\n\u002F\u002F → the converged record snapshot\n",[963,3985,3986,4010,4014,4033,4040],{"__ignoreMap":1091},[1095,3987,3988,3990,3992,3995,3997,4000,4002,4004,4006,4008],{"class":1097,"line":1098},[1095,3989,1102],{"class":1101},[1095,3991,1106],{"class":1105},[1095,3993,3994],{"class":1109}," mergeCrdtStates",[1095,3996,1238],{"class":1105},[1095,3998,3999],{"class":1109}," resolveCrdtSnapshot",[1095,4001,1113],{"class":1105},[1095,4003,1116],{"class":1101},[1095,4005,1119],{"class":1105},[1095,4007,1145],{"class":1122},[1095,4009,1126],{"class":1105},[1095,4011,4012],{"class":1097,"line":1129},[1095,4013,1196],{"emptyLinePlaceholder":1195},[1095,4015,4016,4018,4021,4023,4025,4028,4030],{"class":1097,"line":1150},[1095,4017,1203],{"class":1202},[1095,4019,4020],{"class":1109}," merged ",[1095,4022,1209],{"class":1105},[1095,4024,3994],{"class":1215},[1095,4026,4027],{"class":1109},"(localState",[1095,4029,1238],{"class":1105},[1095,4031,4032],{"class":1109}," remoteState)\n",[1095,4034,4035,4037],{"class":1097,"line":1171},[1095,4036,3964],{"class":1215},[1095,4038,4039],{"class":1109},"(merged)\n",[1095,4041,4042],{"class":1097,"line":1192},[1095,4043,4044],{"class":1241},"\u002F\u002F → the converged record snapshot\n",[1468,4046,4048],{"id":4047},"types","Types",[1086,4050,4052],{"className":1088,"code":4051,"language":1090,"meta":1091,"style":1091},"type CrdtMode  = 'lww-map' | 'rga' | 'yjs'\ntype CrdtState = LwwMapState | RgaState | YjsState\n\ninterface LwwMapState {\n  _crdt: 'lww-map'\n  fields: Record\u003Cstring, { v: unknown; ts: string }>   \u002F\u002F ts = ISO timestamp of last write\n}\n\ninterface RgaState {\n  _crdt: 'rga'\n  items: Array\u003C{ nid: string; v: unknown }>   \u002F\u002F nid = stable ULID per element\n  tombstones: string[]                        \u002F\u002F nids of removed elements\n}\n\ninterface YjsState {\n  _crdt: 'yjs'\n  update: string   \u002F\u002F base64(Y.encodeStateAsUpdate(doc))\n}\n",[963,4053,4054,4087,4110,4114,4122,4135,4176,4180,4184,4192,4204,4237,4252,4256,4260,4269,4281,4293],{"__ignoreMap":1091},[1095,4055,4056,4059,4062,4065,4067,4069,4071,4073,4075,4077,4079,4081,4083,4085],{"class":1097,"line":1098},[1095,4057,4058],{"class":1202},"type",[1095,4060,4061],{"class":1370}," CrdtMode",[1095,4063,4064],{"class":1105},"  =",[1095,4066,1119],{"class":1105},[1095,4068,965],{"class":1122},[1095,4070,1258],{"class":1105},[1095,4072,3768],{"class":1105},[1095,4074,1119],{"class":1105},[1095,4076,986],{"class":1122},[1095,4078,1258],{"class":1105},[1095,4080,3768],{"class":1105},[1095,4082,1119],{"class":1105},[1095,4084,287],{"class":1122},[1095,4086,1126],{"class":1105},[1095,4088,4089,4091,4094,4097,4100,4102,4105,4107],{"class":1097,"line":1129},[1095,4090,4058],{"class":1202},[1095,4092,4093],{"class":1370}," CrdtState",[1095,4095,4096],{"class":1105}," =",[1095,4098,4099],{"class":1370}," LwwMapState",[1095,4101,3768],{"class":1105},[1095,4103,4104],{"class":1370}," RgaState",[1095,4106,3768],{"class":1105},[1095,4108,4109],{"class":1370}," YjsState\n",[1095,4111,4112],{"class":1097,"line":1150},[1095,4113,1196],{"emptyLinePlaceholder":1195},[1095,4115,4116,4118,4120],{"class":1097,"line":1171},[1095,4117,1367],{"class":1202},[1095,4119,4099],{"class":1370},[1095,4121,1703],{"class":1105},[1095,4123,4124,4127,4129,4131,4133],{"class":1097,"line":1192},[1095,4125,4126],{"class":1227},"  _crdt",[1095,4128,1084],{"class":1105},[1095,4130,1119],{"class":1105},[1095,4132,965],{"class":1122},[1095,4134,1126],{"class":1105},[1095,4136,4137,4140,4142,4145,4147,4149,4151,4153,4156,4158,4161,4163,4166,4168,4170,4173],{"class":1097,"line":1199},[1095,4138,4139],{"class":1227},"  fields",[1095,4141,1084],{"class":1105},[1095,4143,4144],{"class":1370}," Record",[1095,4146,1428],{"class":1105},[1095,4148,2613],{"class":1370},[1095,4150,1238],{"class":1105},[1095,4152,1106],{"class":1105},[1095,4154,4155],{"class":1227}," v",[1095,4157,1084],{"class":1105},[1095,4159,4160],{"class":1370}," unknown",[1095,4162,1385],{"class":1105},[1095,4164,4165],{"class":1227}," ts",[1095,4167,1084],{"class":1105},[1095,4169,1382],{"class":1370},[1095,4171,4172],{"class":1105}," }>",[1095,4174,4175],{"class":1241},"   \u002F\u002F ts = ISO timestamp of last write\n",[1095,4177,4178],{"class":1097,"line":1224},[1095,4179,1856],{"class":1105},[1095,4181,4182],{"class":1097,"line":1245},[1095,4183,1196],{"emptyLinePlaceholder":1195},[1095,4185,4186,4188,4190],{"class":1097,"line":1264},[1095,4187,1367],{"class":1202},[1095,4189,4104],{"class":1370},[1095,4191,1703],{"class":1105},[1095,4193,4194,4196,4198,4200,4202],{"class":1097,"line":1281},[1095,4195,4126],{"class":1227},[1095,4197,1084],{"class":1105},[1095,4199,1119],{"class":1105},[1095,4201,986],{"class":1122},[1095,4203,1126],{"class":1105},[1095,4205,4206,4209,4211,4214,4217,4220,4222,4224,4226,4228,4230,4232,4234],{"class":1097,"line":1295},[1095,4207,4208],{"class":1227},"  items",[1095,4210,1084],{"class":1105},[1095,4212,4213],{"class":1370}," Array",[1095,4215,4216],{"class":1105},"\u003C{",[1095,4218,4219],{"class":1227}," nid",[1095,4221,1084],{"class":1105},[1095,4223,1382],{"class":1370},[1095,4225,1385],{"class":1105},[1095,4227,4155],{"class":1227},[1095,4229,1084],{"class":1105},[1095,4231,4160],{"class":1370},[1095,4233,4172],{"class":1105},[1095,4235,4236],{"class":1241},"   \u002F\u002F nid = stable ULID per element\n",[1095,4238,4239,4242,4244,4246,4249],{"class":1097,"line":1312},[1095,4240,4241],{"class":1227},"  tombstones",[1095,4243,1084],{"class":1105},[1095,4245,1382],{"class":1370},[1095,4247,4248],{"class":1109},"[]                        ",[1095,4250,4251],{"class":1241},"\u002F\u002F nids of removed elements\n",[1095,4253,4254],{"class":1097,"line":1321},[1095,4255,1856],{"class":1105},[1095,4257,4258],{"class":1097,"line":1326},[1095,4259,1196],{"emptyLinePlaceholder":1195},[1095,4261,4262,4264,4267],{"class":1097,"line":2087},[1095,4263,1367],{"class":1202},[1095,4265,4266],{"class":1370}," YjsState",[1095,4268,1703],{"class":1105},[1095,4270,4271,4273,4275,4277,4279],{"class":1097,"line":2119},[1095,4272,4126],{"class":1227},[1095,4274,1084],{"class":1105},[1095,4276,1119],{"class":1105},[1095,4278,287],{"class":1122},[1095,4280,1126],{"class":1105},[1095,4282,4283,4286,4288,4290],{"class":1097,"line":2159},[1095,4284,4285],{"class":1227},"  update",[1095,4287,1084],{"class":1105},[1095,4289,1382],{"class":1370},[1095,4291,4292],{"class":1241},"   \u002F\u002F base64(Y.encodeStateAsUpdate(doc))\n",[1095,4294,4295],{"class":1097,"line":2190},[1095,4296,1856],{"class":1105},[1468,4298,4300],{"id":4299},"noy-dbin-yjs",[963,4301,1005],{},[946,4303,4304,4305,4308,4309,4312,4313,4315],{},"The Yjs bridge is a separate package of the ",[963,4306,4307],{},"in-"," family (framework\u002Flibrary bindings —\nsee ",[996,4310,4311],{"href":218},"the in- family","), with ",[963,4314,3007],{}," as a peer dependency:",[3868,4317,4318,4326],{},[3871,4319,4320],{},[3874,4321,4322,4324],{},[3877,4323,3879],{},[3877,4325,3885],{},[3887,4327,4328,4345,4363,4373,4387,4400,4429],{},[3874,4329,4330,4335],{},[3892,4331,4332],{},[963,4333,4334],{},"yjsCollection(vault, name, { yFields })",[3892,4336,4337,4338,4341,4342,4344],{},"Create a ",[963,4339,4340],{},"YjsCollection"," wrapping a ",[963,4343,3015],{}," collection.",[3874,4346,4347,4352],{},[3892,4348,4349],{},[963,4350,4351],{},"YjsCollection.getYDoc(id)",[3892,4353,4354,4355,4358,4359,4362],{},"Decode the stored update into a ",[963,4356,4357],{},"Y.Doc"," (fresh doc with declared ",[963,4360,4361],{},"yFields"," initialised if the record doesn't exist).",[3874,4364,4365,4370],{},[3892,4366,4367],{},[963,4368,4369],{},"YjsCollection.putYDoc(id, doc)",[3892,4371,4372],{},"Encode the doc's state as a Yjs update and store it encrypted.",[3874,4374,4375,4380],{},[3892,4376,4377],{},[963,4378,4379],{},"YjsCollection.applyUpdate(id, update)",[3892,4381,4382,4383,4386],{},"Read the current doc, apply a raw ",[963,4384,4385],{},"Uint8Array"," update, persist the merged state.",[3874,4388,4389,4397],{},[3892,4390,4391,3020,4394],{},[963,4392,4393],{},"YjsCollection.delete(id)",[963,4395,4396],{},"has(id)",[3892,4398,4399],{},"Delete \u002F existence check.",[3874,4401,4402,4413],{},[3892,4403,4404,3020,4407,3020,4410],{},[963,4405,4406],{},"yText()",[963,4408,4409],{},"yMap()",[963,4411,4412],{},"yArray()",[3892,4414,4415,4416,3020,4419,3020,4422,4425,4426,4428],{},"Field descriptors declaring which ",[963,4417,4418],{},"Y.Text",[963,4420,4421],{},"Y.Map",[963,4423,4424],{},"Y.Array"," roots ",[963,4427,3019],{}," initialises.",[3874,4430,4431,4433],{},[3892,4432,4048],{},[3892,4434,4435,4438,4439,4438,4442,4438,4445,4438,4448,4438,4451,1006],{},[963,4436,4437],{},"YjsCollectionOptions",", ",[963,4440,4441],{},"YjsSnapshot",[963,4443,4444],{},"YFieldDescriptor",[963,4446,4447],{},"YTextDescriptor",[963,4449,4450],{},"YMapDescriptor",[963,4452,4453],{},"YArrayDescriptor",[941,4455,4457],{"id":4456},"behavior-when-not-opted-in","Behavior when NOT opted in",[955,4459,4460,4470,4473],{},[958,4461,4462,4463,4466,4467,1006],{},"A collection declared with ",[963,4464,4465],{},"crdt: '…'"," throws on its first CRDT operation:\n",[963,4468,4469],{},"CRDT mode requires the CRDT strategy. Import { withCrdt } from \"@noy-db\u002Fhub\u002Fcrdt\" and pass it to createNoydb({ crdtStrategy: withCrdt() })",[958,4471,4472],{},"The sync engine's CRDT merge path throws the same way when a conflict reaches a CRDT\ncollection.",[958,4474,4475],{},"Plain (non-CRDT) collections work unchanged, and none of the ~221 LOC ships in your\nbundle.",[941,4477,4479],{"id":4478},"limits-gotchas","Limits & gotchas",[955,4481,4482,4496,4510,4518,4535,4541],{},[958,4483,4484,4489,4490,4492,4493,4495],{},[950,4485,4486,4488],{},[963,4487,965],{}," timestamps are wall-clock."," Each field's ",[963,4491,1090],{}," is the writing device's ISO\ntimestamp, compared lexicographically; ties favor the local side during a sync merge.\nSignificant clock skew between devices can make the \"wrong\" edit win a field — keep\ndevice clocks sane, or use ",[963,4494,287],{}," mode where merge is clock-independent.",[958,4497,4498,4503,4504,4507,4508,1006],{},[950,4499,4500,4501,1006],{},"Whole-field granularity in ",[963,4502,965],{}," Two devices editing the ",[968,4505,4506],{},"same"," field\nconcurrently still resolve to one winner — per-field LWW merges across fields, not\nwithin one. For character-level text merging use ",[963,4509,287],{},[958,4511,4512,4517],{},[950,4513,4514,4516],{},[963,4515,986],{}," matches elements by value."," Existing items are matched to new array elements\nby deep equality, so equal duplicates share identity across writes. Tombstoned items\nare retained in the state to preserve ordering, so heavily-churned lists grow over time.",[958,4519,4520,4523,4524,4526,4527,4530,4531,4534],{},[950,4521,4522],{},"Core never merges Yjs bytes."," On a sync conflict in ",[963,4525,287],{}," mode, core keeps the\nenvelope with the higher version — true Yjs merging happens in your app by exchanging\nupdates (",[963,4528,4529],{},"Y.applyUpdate",", or ",[963,4532,4533],{},"YjsCollection.applyUpdate","), as shown above.",[958,4536,4537,4540],{},[950,4538,4539],{},"Yjs state grows with edit history."," The stored update encodes the document's full\nhistory; consider periodically writing a fresh doc for hot documents.",[958,4542,4543,4548,4549,4551],{},[950,4544,4545,4547],{},[963,4546,3007],{}," is a peer dependency"," of ",[963,4550,1005],{}," — your app installs it.",[941,4553,4555],{"id":4554},"see-also","See also",[955,4557,4558,4567,4572,4577,4582,4587],{},[958,4559,4560,4563,4564],{},[996,4561,4562],{"href":598},"Services overview"," · ",[996,4565,4566],{"href":573},"Recipe — Real-time collaborative app",[958,4568,4569,4571],{},[996,4570,864],{"href":865}," — the replication engine that triggers CRDT merges on push\u002Fpull conflicts",[958,4573,4574,4576],{},[996,4575,727],{"href":728}," — reactive subscriptions; CRDT-merged updates surface through live queries",[958,4578,4579,4581],{},[996,4580,697],{"href":698}," — CRDT collections snapshot the prior version on every merge write",[958,4583,4584,4586],{},[996,4585,1016],{"href":66}," — why the store only ever sees the encrypted CRDT state",[958,4588,4589,4590,1006],{},"Proven by showcase ",[996,4591,4594],{"href":4592,"rel":4593},"https:\u002F\u002Fgithub.com\u002Fnoy-db\u002Fdocs\u002Fblob\u002Fmain\u002Fshowcases\u002Fsrc\u002F14-with-crdt.showcase.test.ts",[1000],[963,4595,4596],{},"14-with-crdt",[4598,4599,4600],"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 .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}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":1091,"searchDepth":1150,"depth":1150,"links":4602},[4603,4604,4605,4606,4614,4622,4623,4624],{"id":943,"depth":1129,"text":944},{"id":1028,"depth":1129,"text":1029},{"id":1072,"depth":1129,"text":1073},{"id":1465,"depth":1129,"text":1466,"children":4607},[4608,4610,4612],{"id":1470,"depth":1150,"text":4609},"Per-field merge with lww-map",{"id":2580,"depth":1150,"text":4611},"Ordered lists with rga",{"id":2991,"depth":1150,"text":4613},"Collaborative documents with yjs",{"id":3687,"depth":1129,"text":3688,"children":4615},[4616,4617,4618,4619,4620,4621],{"id":3691,"depth":1150,"text":3694},{"id":3724,"depth":1150,"text":3727},{"id":3810,"depth":1150,"text":1024},{"id":3859,"depth":1150,"text":3860},{"id":4047,"depth":1150,"text":4048},{"id":4299,"depth":1150,"text":1005},{"id":4456,"depth":1129,"text":4457},{"id":4478,"depth":1129,"text":4479},{"id":4554,"depth":1129,"text":4555},null,"Conflict-free replicated types: declare `crdt: 'lww-map' | 'rga' | 'yjs'` per collection and concurrent edits merge deterministically.","md",{},"service",{"title":653,"description":4626},"stable","important","kwLeyTj0wk8QAnwipMiKCoktLGoxsH2_8_gGO9u1b6s",{"data":4635,"body":4636},{},{"type":4637,"children":4638},"root",[4639],{"type":4640,"tag":946,"props":4641,"children":4642},"element",{},[4643],{"type":4640,"tag":963,"props":4644,"children":4646},{"className":4645},[],[4647],{"type":4648,"value":4649},"text","with-commit",{"data":4651,"body":4652},{},{"type":4637,"children":4653},[4654],{"type":4640,"tag":946,"props":4655,"children":4656},{},[4657],{"type":4640,"tag":963,"props":4658,"children":4660},{"className":4659},[],[4661],{"type":4648,"value":1145},{"data":4663,"body":4664},{},{"type":4637,"children":4665},[4666],{"type":4640,"tag":946,"props":4667,"children":4668},{},[4669],{"type":4640,"tag":963,"props":4670,"children":4672},{"className":4671},[],[4673],{"type":4648,"value":3694},1791896585284]