Yrs
PROJECT
Yrs "wires" is a high-performance Rust port of the Y CRDT. We plan to add language bindings from Yrs to many other languages like Go, Swift, and Python - making the Y CRDT ubiquitous.
Budget
Transparent and open finances.
Credit from Open Source Collective to Yrs •
+$61.96USD
Completed
Added funds #794641
Yrs OSS development and maintenance in March 2024
Category
Maintenance and Development
from Bartosz Sypytkowski to Yrs •
-$1,600.00 USD
Paid
Invoice #196279
Credit from Multi.app to Yrs •
+$1,100.00USD
Completed
Contribution #748277
$
Today’s balance$16.05 USD
Total raised
$13,529.57 USD
Total disbursed
$13,513.52 USD
Estimated annual budget
$1,755.86 USD
About
Our goal is to make the Y CRDT ubiquitous by providing ports of Yjs to many different languages like Swift, Go, WASM, PHP, Python, Java, ..
We already started the work on Yrs ("wires") - a high-performance port of the Yjs CRDT to the Rust programming language. We are working on novel data structures to represent the internal CRDT structure even more efficiently than Yjs. Once we have a reference implementation, we will port Yrs to different languages using language bindings.
Until September 2021 we want to achieve the following goals. This work is funded by NLnet & Cal Poly.
Until September 2021 we want to achieve the following goals. This work is funded by NLnet & Cal Poly.
- Yrs - Work on a full port of the Yjs CRDT to the Rust programming language.
- Find appropriate data structures to represent the CRDT structures in Rust.
- Sync with Yjs documents (implement the updates API https://docs.yjs.dev/api/document-updates#update-api).
- Read the Yjs documents (implement shared types including the API to read the content. It will be possible to convert the types to a JSON representation).
- Functionality to manipulate shared types (Y.Map and Y.Array will be fully implemented. But Y.Text won't implement the complete extensive rich-text API).
- Publish a Yrs cargo package including documentation
- Performance analysis compared to Yjs and Automerge
- Provide WASM bindings (see Ywasm)
- Performance analysis compared to Ywasm and Automerge
- Provide Python bindings (see Ypy)
We are currently looking to find further funding for the y-crdt to work on this project until next year. Our previous funding only financed a base implementation of the Y CRDT. We want to eventually replace Yjs with a Yrs-based solution. Therefore we need to:
- Write further language bindings to Go, Swift, Java, and others. We want to make the Y CRDT available on all platforms (mobile, web, native backends).
- Create a documentation website and developer resources.
- Create basic extensions like a y-websocket compatible backend & client and a database provider.
- Create an ecosystem similar to the Yjs Ecosystem around the Y CRDT. We want to write network and database providers in Rust and port them to other languages in a compatible manner. While Yjs is only written for the web, extensions for the Y CRDT will be available for all platforms (if it is technically feasible).
- Yrs will implement the first official time-machine API. It should be possible to access any point in time, see the differences, or revert to that state.
- The initial Yrs implementation does not include Yjs' extensive rich-text API and the V2 update format. We want to make both available in Yrs and close the gaps between Yjs and Yrs. Eventually, Yrs will be the foundation for Yjs.
Our team
Nik Graf
Core Contributor
Bartosz Sypyt...
Core Contributor
Eric Meier
Core Contributor
John Waidhofer
Core Contributor
Anna Sypytkowska
Core Contributor
Aidar Nugmanoff
Core Contributor
Contribute
Become a financial contributor.
Financial Contributions
Yrs is all of us
Our contributors 5
Thank you for supporting Yrs.