{"id":28403,"date":"2018-02-19T19:19:05","date_gmt":"2018-02-19T17:19:05","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28403"},"modified":"2018-02-19T19:19:05","modified_gmt":"2018-02-19T17:19:05","slug":"automerge-a-json-like-data-structure-for-concurrent-multi-user-editing","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/","title":{"rendered":"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>Collaborative editing is a very challenging subject, technically speaking.\u00a0 The old days of users editing a file, sending it to another user, and back are long gone.\u00a0 Version control tools like git helped with tracking changes and resolving conflicts.\u00a0 But the newer generation of tools &#8211; Google Docs for example &#8211; push the bar even higher.\u00a0 Now many users expect real-time, transparent collaborative tools, which allow multiple users to work on the same document at the same time and without any additional technical complexity.<\/p>\n<p><a href=\"https:\/\/github.com\/automerge\/automerge\">Automerge<\/a> is one project that helps the developers to build such collaborative tools, by providing a library of JSON-like data structures, which can be edited in parallel and then merged back together.<\/p>\n<blockquote><p>Automerge [&#8230;] supports\u00a0<strong>automatic syncing and merging<\/strong>:<\/p>\n<ul>\n<li>You can have a copy of the application state locally on several devices (which may belong to the same user, or to different users). Each user can independently update the application state on their local device, even while offline, and save the state to local disk.(Similar to git, which allows you to edit files and commit changes offline.)<\/li>\n<li>When a network connection is available, Automerge figures out which changes need to be synced from one device to another, and brings them into the same state.(Similar to git, which lets you push your own changes, and pull changes from other developers, when you are online.)<\/li>\n<li>If the state was concurrently changed on different devices, Automerge automatically merges the changes together cleanly, so that everybody ends up in the same state, and no changes are lost.(Different from git:\u00a0<strong>no merge conflicts to resolve!<\/strong>)<\/li>\n<\/ul>\n<p>&nbsp;<\/p><\/blockquote>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Collaborative editing is a very challenging subject, technically speaking.\u00a0 The old days of users editing a file, sending it to another user, and back are long gone.\u00a0 Version control tools like git helped with tracking changes and resolving conflicts.\u00a0 But the newer generation of tools &#8211; Google Docs for example &#8211; push the bar even &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Automerge &#8211; a JSON-like data structure for concurrent multi-user editing<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Automerge - a JSON-like data structure for concurrent multi-user editing #WebDev #JavaScript #JSON #collaboration","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[3179,1192,3570,1139,3306,1588,1330],"keyring_services":[],"class_list":["post-28403","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-collaboration","tag-computer-science","tag-data-structures","tag-javascript","tag-json","tag-version-control","tag-web-development"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.9 - aioseo.com -->\n\t<meta name=\"description\" content=\"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Leonid Mamchenkov\"\/>\n\t<meta name=\"google-site-verification\" content=\"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.9\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Leonid Mamchenkov - Life, universe, and everything else\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov\" \/>\n\t\t<meta property=\"og:description\" content=\"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2018-02-19T17:19:05+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2018-02-19T17:19:05+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MamchenkovBlog\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#blogposting\",\"name\":\"Automerge \\u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov\",\"headline\":\"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing\",\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#articleImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"},\"datePublished\":\"2018-02-19T19:19:05+02:00\",\"dateModified\":\"2018-02-19T19:19:05+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#webpage\"},\"articleSection\":\"All, Programming, Technology, Web work, collaboration, Computer Science, data structures, JavaScript, JSON, version control, web development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"position\":2,\"name\":\"Technology\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"position\":3,\"name\":\"Programming\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#listItem\",\"name\":\"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#listItem\",\"position\":4,\"name\":\"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#webpage\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/\",\"name\":\"Automerge \\u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov\",\"description\":\"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/02\\\/19\\\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"datePublished\":\"2018-02-19T19:19:05+02:00\",\"dateModified\":\"2018-02-19T19:19:05+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/\",\"name\":\"Blog of Leonid Mamchenkov\",\"description\":\"Life, universe, and everything else\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov","description":"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even","canonical_url":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#blogposting","name":"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov","headline":"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing","author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"},"image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#articleImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"},"datePublished":"2018-02-19T19:19:05+02:00","dateModified":"2018-02-19T19:19:05+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#webpage"},"isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#webpage"},"articleSection":"All, Programming, Technology, Web work, collaboration, Computer Science, data structures, JavaScript, JSON, version control, web development"},{"@type":"BreadcrumbList","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","position":1,"name":"Home","item":"https:\/\/mamchenkov.net\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","position":2,"name":"Technology","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","position":3,"name":"Programming","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#listItem","name":"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#listItem","position":4,"name":"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing","previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"}}]},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/#person","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author","url":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"WebPage","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#webpage","url":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/","name":"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov","description":"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/#breadcrumblist"},"author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"creator":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"datePublished":"2018-02-19T19:19:05+02:00","dateModified":"2018-02-19T19:19:05+02:00"},{"@type":"WebSite","@id":"https:\/\/mamchenkov.net\/wordpress\/#website","url":"https:\/\/mamchenkov.net\/wordpress\/","name":"Blog of Leonid Mamchenkov","description":"Life, universe, and everything else","inLanguage":"en-US","publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"}}]},"og:locale":"en_US","og:site_name":"Leonid Mamchenkov - Life, universe, and everything else","og:type":"article","og:title":"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov","og:description":"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even","og:url":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/","og:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:secure_url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:width":1024,"og:image:height":1024,"article:published_time":"2018-02-19T17:19:05+00:00","article:modified_time":"2018-02-19T17:19:05+00:00","article:publisher":"https:\/\/www.facebook.com\/MamchenkovBlog","twitter:card":"summary_large_image","twitter:site":"@mamchenkov","twitter:title":"Automerge \u2013 a JSON-like data structure for concurrent multi-user editing - Leonid Mamchenkov","twitter:description":"Collaborative editing is a very challenging subject, technically speaking. The old days of users editing a file, sending it to another user, and back are long gone. Version control tools like git helped with tracking changes and resolving conflicts. But the newer generation of tools - Google Docs for example - push the bar even","twitter:creator":"@mamchenkov","twitter:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg"},"aioseo_meta_data":{"post_id":"28403","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-07-19 12:18:18","updated":"2026-01-15 13:30:46","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/\" title=\"Technology\">Technology<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/\" title=\"Programming\">Programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tAutomerge \u2013 a JSON-like data structure for concurrent multi-user editing\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/mamchenkov.net\/wordpress"},{"label":"Technology","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/"},{"label":"Programming","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/"},{"label":"Automerge &#8211; a JSON-like data structure for concurrent multi-user editing","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/02\/19\/automerge-a-json-like-data-structure-for-concurrent-multi-user-editing\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":28653,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/06\/30\/php-jsonq-a-simple-elegant-php-package-to-query-over-any-type-of-json-data\/","url_meta":{"origin":28403,"position":0},"title":"php-jsonq &#8211; a simple, elegant PHP package to query over any type of JSON data","author":"Leonid Mamchenkov","date":"June 30, 2018","format":false,"excerpt":"php-jsonq provides an easy, yet powerful way to build queries for any JSON data (or PHP data structures for that matter, which are a step away).\u00a0 This has a variety of useful applications - data migration, API response filtering, complex configurations manipulation, and so on, and so forth.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":48046,"url":"https:\/\/mamchenkov.net\/wordpress\/2020\/03\/30\/mysql-json-indexing-and-generated-columns\/","url_meta":{"origin":28403,"position":1},"title":"MySQL, JSON, indexing and generated columns","author":"Leonid Mamchenkov","date":"March 30, 2020","format":false,"excerpt":"For quite some time now I wanted to play around with the recently added JSON type in MySQL.\u00a0 Finally, I have a project where MySQL version is high enough to support it, and the requirements are such that this choice makes sense. The first impression was great - JSON type\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28161,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/11\/01\/jq-and-jo-handy-cli-tools-for-working-with-json\/","url_meta":{"origin":28403,"position":2},"title":"jq and jo &#8211; handy CLI tools for working with JSON","author":"Leonid Mamchenkov","date":"November 1, 2017","format":false,"excerpt":"Here are a couple of really useful command-line tools for anybody working with JSON.\u00a0 The first one is jq, which is a somewhat wider known JSON processor.\u00a0 Here's a nice tutorial with many examples of how this tool is useful.\u00a0 The second one, is jo - a command-line tool for\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27408,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/03\/11\/validating-json-against-schema-in-php\/","url_meta":{"origin":28403,"position":3},"title":"Validating JSON against schema in PHP","author":"Leonid Mamchenkov","date":"March 11, 2017","format":false,"excerpt":"GitHub was rather slow yesterday, which affected the speed of installing composer dependencies (since most of them are hosted on GitHub anyway). \u00a0Staring at a slowly scrolling list of installed dependencies, I noticed something interesting. Of course, I've heard of the seld\/jsonlint before. \u00a0It's a port of zaach\/jsonlint JavaScript tool\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27605,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/05\/23\/yang-a-data-modeling-language-for-the-network-configuration-protocol-netconf\/","url_meta":{"origin":28403,"position":4},"title":"YANG &#8211; A Data Modeling Language for the Network Configuration Protocol (NETCONF)","author":"Leonid Mamchenkov","date":"May 23, 2017","format":false,"excerpt":"In the spirit of validating everything against a schema\u00a0(validating JSON, validating CSV), here is another option - YANG: YANG\u00a0is a data modeling language for the definition of data sent over the NETCONF network configuration protocol. The name is an acronym for \"Yet Another Next Generation\". The YANG data modeling language\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28333,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/01\/16\/json-server\/","url_meta":{"origin":28403,"position":5},"title":"JSON Server","author":"Leonid Mamchenkov","date":"January 16, 2018","format":false,"excerpt":"JSON Server is a handy tool for anybody working with or developing the REST\/JSON APIs.\u00a0 It's a ready-made \"fake\" API server, that is super easy to setup with your end points and your data.\u00a0 And the best part - it's not just read-only.\u00a0 You can work with POST, PUT, PATCH,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28403"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28403\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28403"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}