automerge/automerge

Description: A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 60 minutes ago
Added to GitGenius on October 19th, 2023
Created on December 26th, 2019
Open Issues & Pull Requests: 134 (+0)
Number of forks: 258
Total Stargazers: 6,411 (+0)
Total Subscribers: 37 (+0)

Issue Activity (beta)

Open issues: 104
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 681 days
Stale 30+ days: 102
Stale 90+ days: 94

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

  • enhancement (13)
  • bug (7)
  • documentation (4)
  • design-discussion (2)
  • good first issue (1)
  • performance (1)

Most active issues this week

Repository Insights (GitGenius)

Median issue/PR response: 3.2 days
Mean response time: 181.2 days
90th percentile: 595.6 days
Tracked items: 95

Most active contributors

Detailed Description

Automerge is a library that implements Conflict-free Replicated Data Types (CRDTs) to enable concurrent modification of JSON-like data structures across multiple users with automatic merging. The project provides fast CRDT implementations, a compact compression format for those data structures, and a synchronization protocol for efficiently transmitting changes over networks. The core objective is to support local-first applications by providing persistence mechanisms that abstract away the complexity of distributed computing problems, positioning itself as a database solution for local-first software in the way PostgreSQL serves server applications.

The repository is organized around a Rust implementation that serves as the performant backend, exposed through multiple language bindings. The JavaScript package, available as @automerge/automerge on NPM, presents an idiomatic JavaScript interface wrapping the Rust core compiled to WebAssembly. The project also includes a C library in rust/automerge-c for FFI bindings and plans for additional language support. The Rust codebase itself is currently oriented toward supporting the JavaScript wrapper, with a lower-level API that requires reading tests for understanding usage patterns. For developers building Rust applications with Automerge, the project recommends exploring autosurgeon as an alternative.

The codebase is structured with the Rust implementation and platform-specific wrappers in the ./rust directory, the JavaScript library in ./javascript, maintenance scripts in ./scripts, and static assets in ./img. Building requires Rust and Node, with additional dependencies like cmake, cmocka, and doxygen needed for the C library. The project provides a Nix flake for developers with Nix installed, offering pre-configured dependencies and helper scripts. Documentation is available on the Automerge website with JavaScript tutorials and API references, while Rust documentation is hosted on docs.rs. The binary format specification is available for those interested in Automerge's design details.

According to GitGenius activity tracking, the repository shows a median issue and pull request response latency of 115.3 hours across 95 tracked items, with a mean of 4447.2 hours indicating some longer-tail responses. The most active contributor tracked is alexjg with 93 events, followed by pvh with 13 events and msakrejda with 7 events. Enhancement and documentation labels are the most frequently applied to issues. The project maintains connections with the nteract ecosystem through overlapping contributors across nteract/archived-desktop-app, nteract/nteract, and nteract/desktop repositories.

The project recently released Automerge 3, which achieved approximately a 10x reduction in memory usage. The team includes Alex and Orion working full-time on maintenance, with additional contributions from Ink & Switch members and several other maintainers. The JavaScript package is considered stable and available on NPM, while the Rust API remains low-level and less documented. The project attempts to respect semantic versioning and provides a Discord server for community discussion. Releasing involves separate processes for NPM packages, which are automatically published through CI when GitHub releases are created, and Rust packages, which require manual publication through cargo publish after tagging.

automerge
by
automergeautomerge/automerge

Repository Details

Fetching additional details & charts...