automerge
R Bindings for 'Automerge' 'CRDT' Library
Provides R bindings to the 'Automerge' Conflict-free Replicated Data Type ('CRDT') library. 'Automerge' enables automatic merging of concurrent changes without conflicts, making it ideal for distributed systems, collaborative applications, and offline-first architectures. The approach of local-first software was proposed in Kleppmann, M., Wiggins, A., van Hardenberg, P., McGranaghan, M. (2019) <doi:10.1145/3359591.3359737>. This package supports all 'Automerge' data types (maps, lists, text, counters) and provides both low-level and high-level synchronization protocols for seamless interoperability with 'JavaScript' and other 'Automerge' implementations.
README
<!-- README.md is generated from README.Rmd. Please edit that file -->
# automerge
<!-- badges: start -->
[](https://lifecycle.r-lib.org/articles/stages.html#experimental)
[](https://CRAN.R-project.org/package=automerge)
[](https://github.com/posit-dev/automerge-r/actions/workflows/R-CMD-check.yaml)
[](https://app.codecov.io/gh/posit-dev/automerge-r)
<!-- badges: end -->
Conflict-free data synchronization for R
[](https://deepwiki.com/posit-dev/automerge-r)
`automerge` brings [Automerge](https://automerge.org/) CRDTs
(Conflict-free Replicated Data Types) to R, enabling automatic merging
of concurrent changes across distributed systems without conflicts. Work
offline, collaborate in real-time, or sync across platforms—changes
merge automatically.
## Why Automerge?
Traditional approaches to distributed data either require a central
server to coordinate changes or force developers to write complex
conflict resolution logic. Automerge’s CRDT technology automatically
merges concurrent changes with mathematical guarantees, eliminating the
need for coordination and making distributed systems dramatically
simpler.
## Quick Example
``` r
library(automerge)
# Two researchers working independently
alice <- am_create()
alice$experiment <- "trial_001"
alice$temperature <- 23.5
am_commit(alice, "Alice's data")
bob <- am_create()
bob$experiment <- "trial_002"
bob$humidity <- 65
am_commit(bob, "Bob's data")
# Later, sync with zero conflicts
am_sync(alice, bob)
alice
#> <Automerge Document>
#> Actor: 430ffacff3ae9ece2c50d476120588d1
#> Root keys: 3
#> Keys: experiment, humidity, temperature
bob
#> <Automerge Document>
#> Actor: abb94fd55ba7c10623aa19f30ae871b1
#> Root keys: 3
#> Keys: experiment, humidity, temperature
```
## Key Features
- **Familiar R syntax**: Work with CRDT documents like regular R lists
- **Rich data types**: Maps, lists, text objects, counters, and
timestamps
- **Collaborative text editing**: Cursors and marks for rich text
applications
- **Bidirectional sync**: High-level `am_sync()` or low-level protocol
access
- **Offline-first**: Make changes offline, merge when connected
- **Cross-platform**: Interoperates with JavaScript and other Automerge
implementations
- **Zero dependencies**: Only base R required at runtime
## Installation
``` r
install.packages("automerge")
```
Building from source requires Rust \>= 1.85
([rustup.rs](https://rustup.rs/)) and CMake \>= 3.25 (included in
Rtools43+ on Windows).
## Documentation
- [Getting
Started](https://posit-dev.github.io/automerge-r/articles/automerge.html):
Introduction and basic usage
- [Quick
Reference](https://posit-dev.github.io/automerge-r/articles/quick-reference.html):
Function reference organized by task
- [CRDT
Concepts](https://posit-dev.github.io/automerge-r/articles/crdt-concepts.html):
Understanding conflict-free data types
- [Sync
Protocol](https://posit-dev.github.io/automerge-r/articles/sync-protocol.html):
Low-level synchronization details
- [Cross-Platform
Synchronization](https://posit-dev.github.io/automerge-r/articles/cross-platform.html):
Interoperability with JavaScript and other platforms
- [Function
Reference](https://posit-dev.github.io/automerge-r/reference/index.html):
Complete API documentation
## External Resources
- [Automerge Website](https://automerge.org/) - Official Automerge
documentation and guides
- [Automerge GitHub](https://github.com/automerge/automerge) - Automerge
source code
- [Local-first software](https://www.inkandswitch.com/local-first/) -
The philosophy behind Automerge
## Related Projects
- [autosync](https://shikokuchuo.net/autosync/) - automerge-repo
compatible R sync server
- [autoedit](https://shikokuchuo.net/autoedit/) - Collaborative code
editor widget for R and Shiny
## License
MIT License. See [LICENSE](LICENSE) for details. This package includes
the [automerge-c](https://github.com/automerge/automerge) library (also
MIT licensed)
Versions across snapshots
| Version | Repository | File | Size |
|---|---|---|---|
0.4.0 |
rolling linux/jammy R-4.5 | automerge_0.4.0.tar.gz |
6.4 MiB |
0.4.0 |
rolling linux/noble R-4.5 | automerge_0.4.0.tar.gz |
1.3 MiB |
0.4.0 |
rolling source/ R- | automerge_0.4.0.tar.gz |
6.4 MiB |
0.4.0 |
latest linux/jammy R-4.5 | automerge_0.4.0.tar.gz |
6.4 MiB |
0.4.0 |
latest linux/noble R-4.5 | automerge_0.4.0.tar.gz |
1.3 MiB |
0.4.0 |
latest source/ R- | automerge_0.4.0.tar.gz |
6.4 MiB |
0.4.0 |
2026-04-26 source/ R- | automerge_0.4.0.tar.gz |
6.4 MiB |
0.4.0 |
2026-04-23 source/ R- | automerge_0.4.0.tar.gz |
6.4 MiB |
0.4.0 |
2026-04-09 windows/windows R-4.5 | automerge_0.4.0.zip |
1.3 MiB |