npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@braid.org/diffsync

v0.1.15

Published

Diffsync is a radical re-interpretation of git's [recursive 3-way merge algorithm](https://public-inbox.org/git/[email protected]/) applied to collaborative text editing. Git uses this algorithm to merge entire commits of edit

Readme

diffsync

Diffsync is a radical re-interpretation of git's recursive 3-way merge algorithm applied to collaborative text editing. Git uses this algorithm to merge entire commits of edits. Here we show this is actually a great algorithm to merge keystrokes together in realtime!

This algorithm is remarkably fast, because:

  1. We use the amazing Myer's algorithm for the diffing.
  2. We're able to prune old edit history away!

How are we able to prune history? Well, because this algorithm isn't your normal OT or CRDT algorithm... it's actually a generalization of both, called a Collapsing Time Machine. CTMs have a bunch of cool properties, such as making history modular — so that different peers can prune different regions of it, while still guaranteeing perfect consistency!

If you're curious, you can also read up on our early hypothesizing about the relationship between version control systems and OT and CRDT algorithms. This was one of our earliest experiments into finding a universal synchronization algorithm and framework, which has now led to the CTM theory and the interoperable Braid synchronization protocols.

Demo

git clone https://github.com/invisible-college/diffsync.git
cd diffsync
npm install
node server.js

Open index.html in a couple browser tabs. Try typing in one tab, and see the edits appear in the other.

API

// in node, include as
var diffsync = require('@braid.org/diffsync')

<!-- in a webpage, include as -->
<script src="https://unpkg.com/@braid.org/diffsync"></script>

The diffsync module provides three functions:

  • create_server - Creates a websocket server, see server.js for a working example.
  • create_client - Connects to a websocket server, see index.html for a working example.
  • create_minigit - The underlying git-like CRDT that powers the text merging, used internally by the client and server. While you typically won't need to use this directly, here's a brief overview via example:
// Create two independent minigit instances
var m1 = diffsync.create_minigit()
var c1 = m1.commit("A")

var m2 = diffsync.create_minigit()
var c2 = m2.commit("B")

// Merge changes from m2 into m1
m1.merge(c2)
console.log(m1.cache) // prints "AB"

// Merge changes from m1 into m2
m2.merge(c1)
console.log(m2.cache) // also prints "AB"