[HN Gopher] Automerge-Repo: A "batteries-included" toolkit for l... ___________________________________________________________________ Automerge-Repo: A "batteries-included" toolkit for local-first applications Author : gklitt Score : 105 points Date : 2023-11-08 17:19 UTC (5 hours ago) (HTM) web link (automerge.org) (TXT) w3m dump (automerge.org) | scotttrinh wrote: | Super excited to see Automerge getting this high-level API out. | Been following since before 1.0 and I can't wait to play around | with the latest incarnation! Congrats to the Automerge team. | pvh wrote: | Thanks, Scott. This API should make it much, much easier for | folks to build with Automerge and kind of just encapsulates | everything we've been doing in-house over the last few years. | zyang wrote: | Last time I looked into CRDT, automerge was not as fast/efficient | as yjs, but the team was actively improving the algorithm. Is | there any benchmark to show the progress. | heathermiller wrote: | still not as fast/efficient as Yjs. there are some benchmarks | here from late September'23: https://arxiv.org/abs/2212.02618 | | disclaimer: i'm a co-author and the paper is focused on a | different CRDT framework, but point is that it measures Yjs and | automerge side by side | pvh wrote: | The benchmarks Matt Weidner has been working on are great and | outside scrutiny is always welcome, but I should note that I | find there's an element of artificiality to them. In | particular, testing the performance of the sync system while | simulating many users typing into the same document doesn't | really measure behaviour we have observed "in the wild". In | our research, we've found that editing is usually serial or | asynchronous. (See https://inkandswitch.com/upwelling for | further discussion of our collaboration research.) | | The benchmark that concerns me (and that I'm pleased with our | progress on!) is that you can edit an entire Ink & Switch | long-form essay with Automerge and that the end-to-end | keypress-to-paint latency using Codemirror is under 10ms | (next frame at 100hz). | | While these kinds of benchmarks are incredibly appreciated | and absolutely drive us to work on optimizing the problems | they uncover, we try to work backwards from experienced | problems in real usage as our first priority. | heathermiller wrote: | Ouch Peter. Massive offense taken. | | > In our research, we've found that editing is usually | serial or asynchronous. | | Medium-to-large-size company with a town hall = many people | editing a document at the same time. Workshop at a company | or a university with a modest size classroom = many people | editing a document at the same time. I can't tell you how | many times our web-based collaborative code editors would | fall over during talks with small audiences we would give | back in the days when I led the Scala Center. | | Just because one of the benchmarks you have seen (of a | multitude of benchmarks) breaks automerge by stressing it | in what we believe is the most stressful scenario possible- | multiple concurrent users, which is sort of the point of | concurrency/collaboration frameworks, does not make it | artificial or worth so flippantly discarding. | | > long-form essay with Automerge and that the end-to-end | keypress-to-paint latency using Codemirror is under 10ms | (next frame at 100hz) | | Not at all what we measured. | | I'd just like to register here that Yjs is the framework | most widely used "in real usage" (your words) and not | automerge (for many reasons, not just performance.) | pvh wrote: | Please accept my unreserved apologies, Heather! No | offense is intended. I can speak for everyone working on | Automerge when I say that we've very much appreciated | Matthew's work and have indeed spent quite a lot of time | studying and responding to it. We spoke about it in | person last week, in fact. | | As for the use-cases, I do not mean to exclude live | collaboration from consideration, just to note that it | hasn't been our focus or come up often in the use-cases | we study. Live meeting notes are definitely a real use- | case and I don't dispute the performance results you | show. | | As for Y-js, it's a wonderful piece of software with | excellent performance and a vibrant community made by | exceptional people like Kevin Jahns. We simply have | slightly different goals in our work, which undoubtedly | reflect where our engineering investments lie. | | Indeed, your paper did not measure the same things we | look at, and that's why it found new results. Hopefully | in time we will join the other systems in performing well | on your benchmarks as well. | anglinb wrote: | This is super powerful, been playing around with the previous | releases for the past few days. It works really well, but still | needs a few dx tweaks to make it performant for large | applications. You have to watch the callbacks yourself to update | slices of state and unless your app is small enough that the | whole thing can re-render every update. | | That being said, I love everything automerge is doing and hope | this pace will keep up! | pcl wrote: | Cool stuff! | | What do you suggest is the sweet spot for document size and | "hotness"? Your cookbook [0] says "We suspect that an Automerge | document is best suited to being a unit of collaboration between | two people or a small group." Does that mean tens of kilobytes? | Hundreds? More? And how much concurrent contention is viable? And | is the "atom of contention" the document as a whole, or do you | have any plans for merging of sub-parts? | | Also, do you have support for juggling multiple transports, | either concurrently or back-to-back? In particular, I'm thinking | about synchronizing via the cloud when connected, and falling | back to peer-to-peer when offline. In that peer-to-peer case, how | many peers can I have, and can my peer network behave as a mesh, | or must it stick together to some degree? | | And finally, it looks like your tutorial [1] doesn't actually | exist! You refer to it in a blog post [2], but it's a dead link. | | [0] https://automerge.org/docs/cookbook/modeling-data/ | | [1] https://automerge.org/docs/tutorial/introduction/ | | [2] https://automerge.org/blog/automerge-2/ | pvh wrote: | The way I think about it is that if the data should always | travel together it should be in one document. For example -- if | your TODO list always goes as a unit, then make it an array of | objects in a single Automerge document. On the other hand, if | you want to build an issue tracker and to be able to link to | individual issues or share them individually then a document | each is the way to go. Does that help? | | As for network transports you can indeed have multiple at once. | I usually have a mix of in-browser transports (MessageChannels) | and WebSocket connections. I suspect we'll need to do a little | adjusting to account for prioritization once people really | start to push on this with things like mDNS vs relay server | connections but the design should accommodate that just fine. | | As for the docs, my apologies. The "tutorial" was merged into | the quickstart as part of extensive documentation upgrades over | the last few months. We should update the link in the old blog | post accordingly. | | Here's a link to save you the effort: | https://automerge.org/docs/quickstart/ | xrd wrote: | If you are interested in this, check out the video from | StrangeLoop 2023: | | https://www.youtube.com/watch?v=Mr0a5KyD6BU | | Also, check out the unconf for localfirst that happened right | after 2023: | | https://github.com/LoFiUnconf/stlouis2023 | | Ink & Switch is doing such interesting stuff. Their after party | at StrangeLoop was so cool. | bryanlarsen wrote: | It's too bad the unconf was full, I didn't get in. Hopefully | they do it again. | idosh wrote: | How is it compared replicache, watermelondb and the rest? | bomewish wrote: | Seems we have a really great technical spec -- but aren't y'all | gonna build a product on it and let us pay you to use? A google | docs for markdown/quarto documents would be brilliant but | apparently does not yet exist... | pvh wrote: | Automerge is a library that anyone can adopt, and we are a | research organization, not a product company. | | We have built a variety of projects with Automerge, both | publicly and for use in private, including recently the | markdown-with-comments editor we call Tiny Essay Editor | (https://tiny-essay-editor.netlify.app/) by Geoffrey Litt. | | That said, sponsoring the Automerge team helps us build faster | and is always welcome. (Thanks to our current and past sponsors | for their support!) | satvikpendem wrote: | Nice, I use automerge with Rust via autosurgeon [0] which is | their Rust wrapper, but looks like it hasn't been updated | recently, any updates on that? I'm guessing with a small team | that web support is taking priority right now, as I'm running | this on my Rust client (technically Flutter but via the FFI | package flutter_rust_bridge [1]) and server (via the Axum web | server crate). | | [0] https://github.com/automerge/autosurgeon | | [1] https://github.com/fzyzcjy/flutter_rust_bridge | izak30 wrote: | We're using the same stack, along with automerge-repo-rs, we | haven't needed much in the way of updates, what are you hoping | for that doesn't exist? | | Edit: Typo `autosurgeon-repo-rs` to `automerge-repo-rs` and | link. https://github.com/automerge/automerge-repo-rs | satvikpendem wrote: | Is autosurgeon-repo-rs separate from autosurgeon? I can't | find anything by that specific name on Google. | | The API is still a little clunky, with hydrating and | reconciling, and it's not as clean as the automerge-repo one, | especially with those React examples. | izak30 wrote: | Sorry for the typo. Updated. I get what you mean but maybe | I've gotten used to it. We also added a little sibling | library to it for partial hydrating and reconciling that | fits our patterns better. | https://github.com/bowtieworks/automerge_orm | parhamn wrote: | Anyone have any info on who is behind this project, how reliable | it is (will it be around in 2 years), etc? Considering using it | for one of my projects. | pvh wrote: | Ink & Switch is behind it; or more expansively mostly Orion | Henry, Alex Good, Martin Kleppmann, and myself. As an | organization, we have been working on Automerge for about six | years now. We also have a wonderful community of other | contributors both in industry and research. | | Automerge is not VC-backed software. Indeed, for a number of | years Automerge was primarily a research project used within | the lab. Over the last year, it has matured to production | software under the supervision of Alex Good. The improved | stability and performance has been a great benefit to both our | community and internal users. Our intention is to run the | project as sponsored open source for the foreseeable future and | thus far we have done so thanks to the support of our sponsors | and through some development grants. | | Ink & Switch's research interests drive a lot of Automerge | development but funding from sponsors allows us to work on | features that are not research-oriented or to accelerate work | that we'd like to do but that doesn't have current research | applications. If you adopt Automerge for a commercial project, | I'd encourage you to join the sponsors of Automerge to ensure | its long-term viability. ___________________________________________________________________ (page generated 2023-11-08 23:00 UTC)