<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OpSets: Sequential Specifications for Replicated Datatypes (Extended Version) · HackerPapers discussions</title><link>https://hackerpaper.kaipfister.de/p/1805.04263/</link><description>Collected HN comments and submissions linking this paper.</description><language>en</language><lastBuildDate>Mon, 02 Nov 2026 11:16:22 GMT</lastBuildDate><atom:link href="https://hackerpaper.kaipfister.de/p/1805.04263/feed.xml" rel="self" type="application/rss+xml" /><item><title>OpSets: Sequential Specifications for Replicated Datatypes (Extended Version) — mentioned by mweidner</title><link>https://news.ycombinator.com/item?id=48229091</link><guid isPermaLink="false">urn:hackerpapers:mention:1805.04263:48229091</guid><pubDate>Thu, 21 May 2026 21:29:21 GMT</pubDate><description>&lt;p&gt;For values that don&amp;#x27;t have a natural merge function (or where you don&amp;#x27;t want to bother writing one), would it make sense to sync update logs instead? That is: - The synced value is a history of client updates, sorted in some eventually consistent order (e.g. by hybrid logical clocks). Merging takes the union of the update sets. - The user-visible value is the result of processing these updates in order, using arbitrary contract code. This is overkill for simple last-writer-wins values, but it lets you support fairly general data types &amp;amp; arbitrary update functions, including ones that preserve…&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1805.04263/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DC</category></item><item><title>OpSets: Sequential Specifications for Replicated Datatypes (Extended Version) — mentioned by rkallos</title><link>https://news.ycombinator.com/item?id=27609119</link><guid isPermaLink="false">urn:hackerpapers:mention:1805.04263:27609119</guid><pubDate>Wed, 23 Jun 2021 19:43:59 GMT</pubDate><description>&lt;p&gt;Definitely a tricky problem for CRDTs. A possible solution is outlined in the OpSets paper; https://arxiv.org/abs/1805.04263 I hope that there are existing implementations of OpSets that perform well. I find the solution laid out in that paper to be really elegant and beautiful.&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1805.04263/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DC</category></item><item><title>OpSets: Sequential Specifications for Replicated Datatypes (Extended Version) — mentioned by migueloller</title><link>https://news.ycombinator.com/item?id=25353752</link><guid isPermaLink="false">urn:hackerpapers:mention:1805.04263:25353752</guid><pubDate>Wed, 09 Dec 2020 00:41:48 GMT</pubDate><description>&lt;p&gt;Kleppmann, et al.&amp;#x27;s paper on OpSets [1], a specification for building CRDTs with support for an atomic tree move operation, was the best one for me. Automerge [2] implements a variant of this. [1] https://arxiv.org/abs/1805.04263 [2] https://github.com/automerge/automerge&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1805.04263/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DC</category></item><item><title>OpSets: Sequential Specifications for Replicated Datatypes (Extended Version) — mentioned by haadcode</title><link>https://news.ycombinator.com/item?id=22923485</link><guid isPermaLink="false">urn:hackerpapers:mention:1805.04263:22923485</guid><pubDate>Mon, 20 Apr 2020 13:07:30 GMT</pubDate><description>&lt;p&gt;&amp;gt; How do you know that? It&amp;#x27;s not inferrable from the DAG. Is sequencing also provided &amp;quot;a layer up&amp;quot;? I jumped the gun there and made an assumption that the value of a node is the LWW ordering :) Ok, so without that assumption, the DAG 1 --&amp;gt; 2 --&amp;gt; 3 --&amp;gt; 4 `--&amp;gt; 5 --&amp;gt; 6 ...are the values of the operations that the DAG represents, ie. values of a key, so we need to look at the Lamport clocks (or Merkle Clocks when the operations are hashed as a merkle dag) of each operation, represented here as ((ts, id), key, value): ((0, x), a, 1) --&amp;gt; ((1, x), a, 2) --&amp;gt; ((2, x), a, 3) --&amp;gt; ((3, x), a, 4) `--&amp;gt;…&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1805.04263/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DC</category></item><item><title>OpSets: Sequential Specifications for Replicated Datatypes (Extended Version) — mentioned by migueloller</title><link>https://news.ycombinator.com/item?id=22040441</link><guid isPermaLink="false">urn:hackerpapers:mention:1805.04263:22040441</guid><pubDate>Tue, 14 Jan 2020 00:29:18 GMT</pubDate><description>&lt;p&gt;I’ve been doing a pretty deep dive on CRDTs and OTs to get the right user experience for our collaborative website builder[1]. I’m still not done with the implementation and subsequent testing (i.e., splitting text nodes, as mentioned in the post). But the core algorithm behind Automerge[2], formalized in the OpSets paper[3] is extremely promising. A good example of its power is the ability to do an atomic tree “move”, whilst preserving strong eventual consistency. I&amp;#x27;m so glad to see that the HN community cares about this problem space. Maybe I should finally write that blog post on CRDTs and…&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1805.04263/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DC</category></item></channel></rss>
