Skip to content

Add ygo (Go port of Yjs) to Ports to other languages#79

Merged
dmonad merged 2 commits into
yjs:mainfrom
bnimit:add-ygo-port
Jun 2, 2026
Merged

Add ygo (Go port of Yjs) to Ports to other languages#79
dmonad merged 2 commits into
yjs:mainfrom
bnimit:add-ygo-port

Conversation

@bnimit
Copy link
Copy Markdown
Contributor

@bnimit bnimit commented May 20, 2026

Adds a Go port of Yjs to the Ports to other languages page.

About the port

Scope

  • Full CRDT engine — YArray, YMap, YText (with rich-text Format + InsertEmbed), YXml*. Arbitrarily nested types; recursive ToJSON unwrap.
  • Wire-format compatible with Yjs JS — V1 and V2 update codecs, awareness, snapshot. Verified by a JS↔Go interop fixture suite that round-trips through `node` against the Yjs reference.
  • Cross-reference audit complete — closed a 10-issue audit against Yjs JS and yrs across the v1.9.0–v1.15.0 cycle, covering YText format markers, observer event shapes (YArrayEvent.Delta, YMapEvent.Keys with action/oldValue, YTextEvent embeds), transaction-commit housekeeping (auto-GC, split re-merge), snapshot semantics, and YATA conflict-scan edges.
  • Sync transports — WebSocket and HTTP. WebSocket server is a drop-in for Hocuspocus-aware clients at the protocol-extension (message types 4-10), lifecycle (OnLoadDocument / OnFirstPeer / OnLastPeer / OnUnloadDocument), and outbound-webhook layers (provider/webhook subpackage with HMAC signing + debounce + bounded retry).
  • Production hardening — UndoManager, structured slog logging, ctx-aware methods, panic-safe transactions and hooks, DoS caps on awareness state and pending-items queue, semaphore-backed connection limits, `crypto/rand` ClientID.

Changes

Single edit to `ecosystem/ports-to-other-languages.md`: one `{% embed %}` block following the existing format. No other files affected.

ygo is a pure-Go port of Yjs at https://github.com/reearth/ygo,
MIT-licensed, V1+V2 wire-compatible with yjs@13.x (verified by
the TestCompat fixture suite). Active development for 14 months,
currently at v1.11.1, in production use at re:earth.
@bnimit
Copy link
Copy Markdown
Contributor Author

bnimit commented Jun 2, 2026

Friendly bump — refreshed the description with the current state (v1.19.0, audit complete, Hocuspocus parity). Happy to address anything before merge, and no rush. Thanks for taking a look when you have time.

The current ports-to-other-languages.md file is sparse (just bare embed
blocks), but the rendered docs.yjs.dev page has a heading and a one or
two sentence description above each port's embed card (see Y-CRDT,
Y-Octo, Ycs sections). Bring the ygo entry in line with that format so
it renders consistently when this page is next synced.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dmonad dmonad merged commit 1868c96 into yjs:main Jun 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants