YDotNet.Native 0.4.1

dotnet add package YDotNet.Native --version 0.4.1                
NuGet\Install-Package YDotNet.Native -Version 0.4.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="YDotNet.Native" Version="0.4.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add YDotNet.Native --version 0.4.1                
#r "nuget: YDotNet.Native, 0.4.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install YDotNet.Native as a Cake Addin
#addin nuget:?package=YDotNet.Native&version=0.4.1

// Install YDotNet.Native as a Cake Tool
#tool nuget:?package=YDotNet.Native&version=0.4.1                

<p align="center"> <img width="128" height="128" src="https://github.com/LSViana/ydotnet/assets/21217790/51be1008-7bac-4bb0-b5bb-d4c9f5ab6d7d" /> </p>

YDotNet

YDotNet is a .NET binding for y-crdt. It provides distributed data types that enable real-time collaboration between devices. The library is a thin wrapper around Yrs, taking advantage of the safety and performance of Rust.

💡 Disclaimer: this project is still early, so it may contain bugs and the API is subject to change. Feel free to open an issue if you'd like to report problems or suggest new features.

Demo

Check the following video:

https://github.com/LSViana/ydotnet/assets/21217790/cdb6023d-25d1-4951-82ae-b079ddbd8d26

Installation

For every scenario, you must start by installing the core of the library.

To do so, in the project directory (where you .csproj lives), execute:

dotnet add package YDotNet

Then, install the platform-specific package in order to get the binaries.

Package Platform
YDotNet.Native.Win32 Windows
YDotNet.Native.Linux Linux
YDotNet.Native.MacOS macOS

And you may also install the following packages to get extra features.

Package Description
YDotNet.Extensions Extension methods to make some operations easier.
YDotNet.Server Provides the hosting infrastructure for all communication channels, like WebSocket.
YDotNet.Server.WebSockets Use WebSockets as the communication channel between clients.
YDotNet.Server.MongoDB Use MongoDB as a persistence layer.
YDotNet.Server.Redis Use Redis as a persistence layer.

Getting Started

YDotNet provides the same shared data types as Yjs. All objects are shared within a Doc and always get modified within the scope of a Transaction.

// Set up the local document with some sample data.
var localDoc = new Doc();
var localText = localDoc.Text("name");

var localTransaction = localDoc.WriteTransaction();
localText.Insert(localTransaction, 0, "Y-CRDT");
localTransaction.Commit();

// Set up the remote document.
var remoteDoc = new Doc();
var remoteText = remoteDoc.Text("name");

// Get the remote document state vector.
var remoteTransaction = remoteDoc.WriteTransaction();
var remoteState = remoteTransaction.StateVectorV1();

// Calculate the state diff between the local and the remote document.
localTransaction = localDoc.ReadTransaction();
var stateDiff = localTransaction.StateDiffV1(remoteState);
localTransaction.Commit();

// Apply the state diff to synchronize the remote document with the local changes.
var result = remoteTransaction.ApplyV1(stateDiff);

// Read the text from the remote document.
var text = remoteText.String(remoteTransaction);

// At this point, the `text` variable is "Y-CRDT" and this demonstrates how the two
// documents synchronized their state.
//
// This example does it locally but the same could be done over the Internet, for example.

Development Setup

To contribute with this library, you'll need to install the following tools:

Then you should clone the y-crdt repository. With the repository cloned and the tools installed, you'll be able to:

  1. Make changes to the Rust or C# library;
  2. Re-build the Rust and C# binaries;
    • Be aware that you'll need to use crate-type=cdylib on the Cargo.toml file to get a dynamic library that's callable by C#.
  3. Test your changes and repeat.

Then you're ready to go! Feel free to contribute, open issues, and ask questions.

Tests

All tests are located in the YDotNet.Tests.Unit project and should be easily runnable using the command:

dotnet test
Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on YDotNet.Native:

Repository Stars
Squidex/squidex
Headless CMS and Content Managment Hub
Version Downloads Last updated
0.4.1 1,007 7/24/2024
0.4.0 1,735 4/16/2024
0.3.0 810 2/28/2024
0.2.13 150 2/12/2024
0.2.12 168 12/3/2023
0.2.11 130 11/16/2023
0.2.10 128 11/14/2023
0.2.9 165 10/30/2023
0.2.4 140 10/17/2023