[{"data":1,"prerenderedAt":466},["ShallowReactive",2],{"docs-nav":3,"content-query-pZ9LJV2bGS":249},[4,8,11,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246],{"_path":5,"title":6,"order":7},"/docs/getting-started","Getting Started",1,{"_path":9,"title":10,"order":7},"/docs/self-hosting/all-in-one","All-in-One Setup",{"_path":12,"title":13,"order":7},"/docs/views/grid","Grid View",{"_path":15,"title":16,"order":17},"/docs/core-concepts","Core Concepts",10,{"_path":19,"title":20,"order":21},"/docs/crdt","What is a CRDT?",11,{"_path":23,"title":24,"order":25},"/docs/self-hosting/separate-containers","Separate Containers Setup",2,{"_path":27,"title":28,"order":29},"/docs/interface-overview","Interface Overview",20,{"_path":31,"title":32,"order":33},"/docs/global-search","Global Search",22,{"_path":35,"title":36,"order":37},"/docs/filters","Filters",24,{"_path":39,"title":40,"order":41},"/docs/sorting","Sorting",25,{"_path":43,"title":44,"order":45},"/docs/tagging-and-selection","Tagging & Selection",26,{"_path":47,"title":48,"order":49},"/docs/quick-view","Quick View",28,{"_path":51,"title":52,"order":53},"/docs/self-hosting/remote-access-tailscale","Remote Access with Tailscale",3,{"_path":55,"title":56,"order":57},"/docs/block-actions","Block Actions",30,{"_path":59,"title":60,"order":61},"/docs/deleting-blocks","Deleting Blocks & Trash",32,{"_path":63,"title":64,"order":65},"/docs/self-hosting","Self-Hosting",4,{"_path":67,"title":68,"order":69},"/docs/managing-heaps","Managing Heaps",40,{"_path":71,"title":72,"order":73},"/docs/file-scanning","File Scanning & Importing",42,{"_path":75,"title":76,"order":77},"/docs/storage-management","Storage Management",44,{"_path":79,"title":80,"order":81},"/docs/daily-notes","Daily Notes & Calendar",46,{"_path":83,"title":84,"order":85},"/docs/views","Views",60,{"_path":87,"title":88,"order":89},"/docs/authentication","Authentication & User Management",70,{"_path":91,"title":92,"order":93},"/docs/licenses-privacy","Licenses & Privacy",72,{"_path":95,"title":96,"order":97},"/docs/faq","FAQ",80,{"_path":99,"title":100,"order":101},"/docs/changelog","Changelog",99,{"_path":103,"title":104},"/docs/changelog/v16.16.15","v16.16.15",{"_path":106,"title":107},"/docs/changelog/v16.16.34","v16.16.34",{"_path":109,"title":110},"/docs/changelog/v16.16.28","v16.16.28",{"_path":112,"title":113},"/docs/changelog/v16.16.35","v16.16.35",{"_path":115,"title":116},"/docs/changelog/v16.16.32","v16.16.32",{"_path":118,"title":119},"/docs/changelog/v16.8.0","v16.8.0",{"_path":121,"title":122},"/docs/changelog/v16.16.8","v16.16.8",{"_path":124,"title":125},"/docs/changelog/v16.16.27","v16.16.27",{"_path":127,"title":128},"/docs/changelog/v16.16.41","v16.16.41",{"_path":130,"title":131},"/docs/changelog/v16.16.11","v16.16.11",{"_path":133,"title":134},"/docs/changelog/v16.16.14","v16.16.14",{"_path":136,"title":137},"/docs/changelog/v16.16.17","v16.16.17",{"_path":139,"title":140},"/docs/changelog/v16.16.10","v16.16.10",{"_path":142,"title":143},"/docs/changelog/v16.16.20","v16.16.20",{"_path":145,"title":146},"/docs/changelog/v16.6.0","v16.6.0",{"_path":148,"title":149},"/docs/changelog/v16.16.22","v16.16.22",{"_path":151,"title":152},"/docs/changelog/v16.16.6","v16.16.6",{"_path":154,"title":155},"/docs/changelog/v16.16.36","v16.16.36",{"_path":157,"title":158},"/docs/changelog/v16.16.18","v16.16.18",{"_path":160,"title":161},"/docs/changelog/v16.16.38","v16.16.38",{"_path":163,"title":164},"/docs/changelog/v16.16.1","v16.16.1",{"_path":166,"title":167},"/docs/changelog/v16.16.12","v16.16.12",{"_path":169,"title":170},"/docs/changelog/v16.16.31","v16.16.31",{"_path":172,"title":173},"/docs/changelog/v16.16.40","v16.16.40",{"_path":175,"title":176},"/docs/changelog/v16.7.0","v16.7.0",{"_path":178,"title":179},"/docs/changelog/v16.9.0","v16.9.0",{"_path":181,"title":182},"/docs/changelog/v16.16.4","v16.16.4",{"_path":184,"title":185},"/docs/changelog/v16.16.13","v16.16.13",{"_path":187,"title":188},"/docs/changelog/v16.16.37","v16.16.37",{"_path":190,"title":191},"/docs/changelog/v16.16.9","v16.16.9",{"_path":193,"title":194},"/docs/changelog/v16.16.25","v16.16.25",{"_path":196,"title":197},"/docs/changelog/v16.16.24","v16.16.24",{"_path":199,"title":200},"/docs/changelog/v16.16.3","v16.16.3",{"_path":202,"title":203},"/docs/changelog/v16.10.0","v16.10.0",{"_path":205,"title":206},"/docs/changelog/v16.16.16","v16.16.16",{"_path":208,"title":209},"/docs/changelog/v16.16.33","v16.16.33",{"_path":211,"title":212},"/docs/changelog/v16.16.26","v16.16.26",{"_path":214,"title":215},"/docs/changelog/v16.16.43","v16.16.43",{"_path":217,"title":218},"/docs/changelog/v16.11.0","v16.11.0",{"_path":220,"title":221},"/docs/changelog/v16.16.29","v16.16.29",{"_path":223,"title":224},"/docs/changelog/v16.16.5","v16.16.5",{"_path":226,"title":227},"/docs/changelog/v16.16.39","v16.16.39",{"_path":229,"title":230},"/docs/changelog/v16.16.2","v16.16.2",{"_path":232,"title":233},"/docs/changelog/v16.16.7","v16.16.7",{"_path":235,"title":236},"/docs/changelog/v16.16.23","v16.16.23",{"_path":238,"title":239},"/docs/changelog/v16.16.0","v16.16.0",{"_path":241,"title":242},"/docs/changelog/v16.16.30","v16.16.30",{"_path":244,"title":245},"/docs/changelog/v16.16.21","v16.16.21",{"_path":247,"title":248},"/docs/changelog/v16.16.19","v16.16.19",{"_path":19,"_dir":250,"_draft":251,"_partial":251,"_locale":252,"title":20,"description":253,"order":21,"body":254,"_type":460,"_id":461,"_source":462,"_file":463,"_stem":464,"_extension":465},"docs",false,"","How Heaper uses Conflict-free Replicated Data Types for seamless offline and collaborative editing",{"type":255,"children":256,"toc":452},"root",[257,265,279,286,291,297,302,334,339,345,369,376,419,425],{"type":258,"tag":259,"props":260,"children":262},"element","h1",{"id":261},"what-is-a-crdt",[263],{"type":264,"value":20},"text",{"type":258,"tag":266,"props":267,"children":268},"p",{},[269,271,277],{"type":264,"value":270},"CRDT stands for ",{"type":258,"tag":272,"props":273,"children":274},"strong",{},[275],{"type":264,"value":276},"Conflict-free Replicated Data Type",{"type":264,"value":278},". It's the technology that lets Heaper work offline and sync across devices without merge conflicts.",{"type":258,"tag":280,"props":281,"children":283},"h2",{"id":282},"the-problem",[284],{"type":264,"value":285},"The Problem",{"type":258,"tag":266,"props":287,"children":288},{},[289],{"type":264,"value":290},"Traditional sync systems use a central server as the source of truth. If two devices edit the same document while offline, the server has to pick one version or ask you to resolve the conflict manually — like Git merge conflicts.",{"type":258,"tag":280,"props":292,"children":294},{"id":293},"how-crdts-solve-it",[295],{"type":264,"value":296},"How CRDTs Solve It",{"type":258,"tag":266,"props":298,"children":299},{},[300],{"type":264,"value":301},"CRDTs are data structures designed so that:",{"type":258,"tag":303,"props":304,"children":305},"ol",{},[306,312,322],{"type":258,"tag":307,"props":308,"children":309},"li",{},[310],{"type":264,"value":311},"Every device can make changes independently",{"type":258,"tag":307,"props":313,"children":314},{},[315,317],{"type":264,"value":316},"When devices reconnect, changes merge ",{"type":258,"tag":272,"props":318,"children":319},{},[320],{"type":264,"value":321},"automatically",{"type":258,"tag":307,"props":323,"children":324},{},[325,327,332],{"type":264,"value":326},"All devices converge to the ",{"type":258,"tag":272,"props":328,"children":329},{},[330],{"type":264,"value":331},"same result",{"type":264,"value":333},", regardless of the order changes arrive",{"type":258,"tag":266,"props":335,"children":336},{},[337],{"type":264,"value":338},"There are no merge conflicts. Ever.",{"type":258,"tag":280,"props":340,"children":342},{"id":341},"how-heaper-uses-crdts",[343],{"type":264,"value":344},"How Heaper Uses CRDTs",{"type":258,"tag":346,"props":347,"children":348},"ul",{},[349,354,359,364],{"type":258,"tag":307,"props":350,"children":351},{},[352],{"type":264,"value":353},"When you edit a note, your changes are recorded as CRDT operations",{"type":258,"tag":307,"props":355,"children":356},{},[357],{"type":264,"value":358},"These operations are tiny and efficient — only the delta is sent, not the full document",{"type":258,"tag":307,"props":360,"children":361},{},[362],{"type":264,"value":363},"When you sync, your device exchanges operations with the server or other devices",{"type":258,"tag":307,"props":365,"children":366},{},[367],{"type":264,"value":368},"The CRDT algorithm merges everything automatically",{"type":258,"tag":370,"props":371,"children":373},"h3",{"id":372},"what-this-means-in-practice",[374],{"type":264,"value":375},"What This Means in Practice",{"type":258,"tag":346,"props":377,"children":378},{},[379,389,399,409],{"type":258,"tag":307,"props":380,"children":381},{},[382,387],{"type":258,"tag":272,"props":383,"children":384},{},[385],{"type":264,"value":386},"Work offline",{"type":264,"value":388},": Make changes without a connection. Everything syncs when you're back online.",{"type":258,"tag":307,"props":390,"children":391},{},[392,397],{"type":258,"tag":272,"props":393,"children":394},{},[395],{"type":264,"value":396},"Real-time collaboration",{"type":264,"value":398},": Multiple users can edit the same document simultaneously without conflicts.",{"type":258,"tag":307,"props":400,"children":401},{},[402,407],{"type":258,"tag":272,"props":403,"children":404},{},[405],{"type":264,"value":406},"No data loss",{"type":264,"value":408},": Even if two people edit the same paragraph at the same time, both edits are preserved.",{"type":258,"tag":307,"props":410,"children":411},{},[412,417],{"type":258,"tag":272,"props":413,"children":414},{},[415],{"type":264,"value":416},"Fast sync",{"type":264,"value":418},": Only changes are transmitted, not full documents.",{"type":258,"tag":280,"props":420,"children":422},{"id":421},"further-reading",[423],{"type":264,"value":424},"Further Reading",{"type":258,"tag":346,"props":426,"children":427},{},[428,440],{"type":258,"tag":307,"props":429,"children":430},{},[431],{"type":258,"tag":432,"props":433,"children":437},"a",{"href":434,"rel":435},"https://docs.yjs.dev/",[436],"nofollow",[438],{"type":264,"value":439},"Yjs documentation",{"type":258,"tag":307,"props":441,"children":442},{},[443,450],{"type":258,"tag":432,"props":444,"children":447},{"href":445,"rel":446},"https://crdt.tech/",[436],[448],{"type":264,"value":449},"CRDT.tech",{"type":264,"value":451}," — academic resources on CRDTs",{"title":252,"searchDepth":25,"depth":25,"links":453},[454,455,456,459],{"id":282,"depth":25,"text":285},{"id":293,"depth":25,"text":296},{"id":341,"depth":25,"text":344,"children":457},[458],{"id":372,"depth":53,"text":375},{"id":421,"depth":25,"text":424},"markdown","content:docs:crdt.md","content","docs/crdt.md","docs/crdt","md",1774954237944]