Skip to content

R sync server for Automerge CRDT documents. Implements the automerge-repo WebSocket protocol, enabling R to serve as a synchronization hub for Automerge clients in R, JavaScript, Rust, and other languages.

Ask DeepWiki

Features

  • Full automerge-repo protocol compatibility (interoperates with sync.automerge.org)
  • Secure connections via TLS (wss://)
  • Persistent document storage
  • Ephemeral message broadcasting
  • Client functions for fetching documents from remote servers

Installation

pak::pak("shikokuchuo/autosync")

Server

Create a WebSocket sync server:

library(autosync)

server <- amsync_server(port = 3030)
server$start()

# Server runs non-blocking in the background

server$stop()

With TLS for secure connections:

cert <- nanonext::write_cert()
tls <- nanonext::tls_config(server = cert$server)

server <- amsync_server(port = 8080, tls = tls)
server$start()

Document management

# Create a new document
doc_id <- create_document(server)

# List all documents
list_documents(server)

# Get a document
doc <- get_document(server, doc_id)

Connecting from JavaScript

import { Repo } from "@automerge/automerge-repo"
import { BrowserWebSocketClientAdapter } from "@automerge/automerge-repo-network-websocket"

const repo = new Repo({
  network: [new BrowserWebSocketClientAdapter("ws://localhost:3030")]
})

Client

Fetch documents from any automerge-repo sync server:

# Fetch from public sync server
doc <- amsync_fetch("wss://sync.automerge.org", "your-document-id")

# Inspect document structure
automerge::am_keys(doc)

Debug sync issues with the inspect helper:

amsync_inspect("wss://sync.automerge.org", "your-document-id")

Utilities

Generate document IDs compatible with automerge-repo:

Shiny Collaborative Editor

For a real-time collaborative text editor widget, see the autoedit package which provides a CodeMirror-based editor that connects to autosync servers.