{"id":13671682,"url":"https://github.com/y-crdt/y-crdt","last_synced_at":"2025-05-13T16:09:24.040Z","repository":{"id":37440349,"uuid":"299648293","full_name":"y-crdt/y-crdt","owner":"y-crdt","description":"Rust port of Yjs","archived":false,"fork":false,"pushed_at":"2025-05-11T15:15:42.000Z","size":15562,"stargazers_count":1698,"open_issues_count":94,"forks_count":92,"subscribers_count":27,"default_branch":"main","last_synced_at":"2025-05-11T16:27:12.193Z","etag":null,"topics":["crdt","rust","yjs"],"latest_commit_sha":null,"homepage":"https://docs.rs/yrs/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/y-crdt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-09-29T14:48:17.000Z","updated_at":"2025-05-11T15:15:46.000Z","dependencies_parsed_at":"2023-02-19T15:16:28.143Z","dependency_job_id":"8091a8d8-5712-408c-bc63-a7990a70d7d4","html_url":"https://github.com/y-crdt/y-crdt","commit_stats":{"total_commits":858,"total_committers":32,"mean_commits":26.8125,"dds":"0.17599067599067597","last_synced_commit":"658ecb3337db63032654b8cef5afdc326067733b"},"previous_names":["yjs/y-crdt"],"tags_count":77,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-crdt%2Fy-crdt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-crdt%2Fy-crdt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-crdt%2Fy-crdt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/y-crdt%2Fy-crdt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/y-crdt","download_url":"https://codeload.github.com/y-crdt/y-crdt/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253596809,"owners_count":21933631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crdt","rust","yjs"],"created_at":"2024-08-02T09:01:16.198Z","updated_at":"2025-05-13T16:09:19.011Z","avatar_url":"https://github.com/y-crdt.png","language":"Rust","funding_links":[],"categories":["Rust","rust"],"sub_categories":[],"readme":"# Y CRDT\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo-yrs.svg\" width=\"200\"/\u003e\n\u003c/p\u003e\n\nA collection of Rust libraries oriented around implementing [Yjs](https://yjs.dev/) algorithm and protocol with\ncross-language and cross-platform support in mind. It aims to maintain behavior and binary protocol compatibility with\nYjs, therefore projects using Yjs/Yrs should be able to interoperate with each other.\n\nProject organization:\n\n- **lib0** is a serialization library used for efficient (and fairly fast) data exchange.\n- **yrs** (read: *wires*) is a core Rust library, a foundation stone for other projects.\n- **yffi** (read: *wifi*) is a wrapper around *yrs* used to provide a native C foreign function interface. See\n  also: [C header file](https://github.com/y-crdt/y-crdt/blob/main/tests-ffi/include/libyrs.h).\n- **ywasm** is a wrapper around *yrs* that targets WebAssembly and JavaScript API.\n\nOther projects using *yrs*:\n\n- [ypy](https://github.com/y-crdt/ypy) - Python bindings.\n- [yrb](https://github.com/y-crdt/yrb) - Ruby bindings.\n\n## Feature parity among projects\n\n|                                         |                  yjs \u003cbr/\u003e(13.6)                  |               yrs\u003cbr/\u003e(0.21)               |                   ywasm\u003cbr/\u003e(0.18)                    | yffi\u003cbr/\u003e(0.21) |                  y-rb\u003cbr/\u003e(0.5)                  |                y-py\u003cbr/\u003e(0.6)                | ydotnet\u003cbr/\u003e(0.4) | yswift\u003cbr/\u003e(0.2) | y_ex\u003cbr/\u003e(0.6) |\n|-----------------------------------------|:-------------------------------------------------:|:------------------------------------------:|:-----------------------------------------------------:|:---------------:|:------------------------------------------------:|:--------------------------------------------:|:-----------------:|:----------------:|:--------------:|\n| YText: insert/delete                    |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x2705;    |\n| YText: formatting attributes and deltas |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x2705;    |\n| YText: embeded elements                 |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x2705;    |\n| YMap: update/delete                     |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x2705;    |\n| YMap: weak links                        | \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(weak-links branch)\u003c/small\u003e |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x274C;      |     \u0026#x274C;     |    \u0026#x274C;    |\n| YArray: insert/delete                   |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x2705;    |\n| YArray \u0026 YText quotations               | \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(weak links branch)\u003c/small\u003e |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x274C;      |     \u0026#x274C;     |    \u0026#x2705;    |\n| YArray: move                            |    \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(move branch)\u003c/small\u003e    |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x274C;     |    \u0026#x2705;    |\n| XML Element, Fragment and Text          |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x274C;     |    \u0026#x2705;    |\n| Sub-documents                           |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x2705;      |     \u0026#x274C;     |    \u0026#x274C;    |\n| Shared collections: observers           |                     \u0026#x2705;                      |                  \u0026#x2705;                  | \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(incompatible with yjs)\u003c/small\u003e |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x274C;    |\n| Shared collections: recursive nesting   |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x274C;      |     \u0026#x274C;     |    \u0026#x274C;    |\n| Document observers                      |                     \u0026#x2705;                      |                  \u0026#x2705;                  | \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(incompatible with yjs)\u003c/small\u003e |    \u0026#x2705;     |                     \u0026#x2705;                     |                   \u0026#x2705;                   |     \u0026#x2705;      |                  |    \u0026#x2705;    |\n| Transaction: origins                    |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x2705;    |\n| Snapshots                               |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x274C;      |     \u0026#x274C;     |    \u0026#x274C;    |\n| Sticky indexes                          |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x2705;      |     \u0026#x274C;     |    \u0026#x274C;    |\n| Undo Manager                            |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x2705;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x2705;      |     \u0026#x2705;     |    \u0026#x274C;    |\n| Awareness                               |                     \u0026#x2705;                      |                  \u0026#x2705;                  |                       \u0026#x2705;                        |    \u0026#x274C;     |                     \u0026#x2705;                     |                   \u0026#x274C;                   |     \u0026#x2705;      |     \u0026#x274C;     |    \u0026#x2705;    |\n| Network provider: WebSockets            |    \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(y-websocket)\u003c/small\u003e    |  \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(yrs-warp)\u003c/small\u003e  |                       \u0026#x274C;                        |    \u0026#x274C;     | \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(y-rb_actioncable)\u003c/small\u003e | \u0026#x2705; \u003cbr/\u003e\u003csmall\u003e(ypy-websocket)\u003c/small\u003e |     \u0026#x2705;      |     \u0026#x274C;     |    \u0026#x274C;    |\n| Network provider: WebRTC                |     \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(y-webrtc)\u003c/small\u003e      | \u0026#x2705; \u003cbr/\u003e \u003csmall\u003e(yrs-webrtc)\u003c/small\u003e |                       \u0026#x274C;                        |    \u0026#x274C;     |                     \u0026#x274C;                     |                   \u0026#x274C;                   |     \u0026#x274C;      |     \u0026#x274C;     |    \u0026#x274C;    |\n\n## Maintainers\n\n- [Bartosz Sypytkowski](https://github.com/Horusiath)\n- [Kevin Jahns](https://github.com/dmonad)\n- [John Waidhofer](https://github.com/Waidhoferj)\n\n## Sponsors\n\n[![NLNET](https://nlnet.nl/image/logo_nlnet.svg)](https://nlnet.nl/)\n\n[![Ably](https://voltaire.ably.com/static/ably-logo-46433d9937b94509fc62ef6dd6d94ff1.png)](https://ably.com/)\n\n\u003ca href=\"https://www.appflowy.io/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/AppFlowy-IO/AppFlowy/main/doc/imgs/appflowy-logo-white.svg\" height=\"75px\"/\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy-crdt%2Fy-crdt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fy-crdt%2Fy-crdt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fy-crdt%2Fy-crdt/lists"}