Open Collective
Open Collective
Loading

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.

+$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.
  • 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

Kevin Jahns

Admin
Creator of Yjs

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

Custom contribution
Donation
Make a custom one-time or recurring contribution.

Latest activity by


+ 1

Yrs is all of us

Our contributors 5

Thank you for supporting Yrs.

Prisma

$10,000 USD

AppFlowy

$3,000 USD

Multi.app

$1,100 USD

David Thomas

$20 USD

I love the work you guys are doing! Thanks!