syncular-client 0.15.21

Syncular v2 Rust client core on rusqlite, implemented from SPEC.md alone (language-neutrality POC, stage 2)
Documentation
[package]
name = "syncular-client"
version = "0.15.21"
edition = "2021"
description = "Syncular v2 Rust client core on rusqlite, implemented from SPEC.md alone (language-neutrality POC, stage 2)"
license = "Apache-2.0"
repository = "https://github.com/syncular/syncular"

[dependencies]
ssp2 = { package = "syncular-ssp2", path = "../ssp2", version = "0.15.21" }
rusqlite = { version = "0.32", features = ["bundled"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = "0.10"
uuid = { version = "1", features = ["v4"] }

# §5.10.5 native CRDT: the Rust Yjs port. Feature-gated so the
# dependency-lean core (and the conformance/codec builds that never touch a
# crdt column's contents) do not pay for it. yrs is Yjs-wire-compatible — an
# update it produces merges byte-identically with a `@syncular/crdt-yjs`
# update on the server (§5.10.2), which is what makes the cross-core pairing
# converge. Only the app-facing materialize/edit helpers need it; round-trip
# of opaque crdt bytes stays free (a crdt column is a bytes column, §2.4).
[dependencies.yrs]
version = "0.27"
optional = true

# §5.11 client-side encryption. rand_core supplies the production CSPRNG nonce
# at the encode seam; the crypto/wrap primitives live in ssp2 behind e2ee.
[dependencies.rand_core]
version = "0.6"
features = ["getrandom"]
optional = true

# One native transport implementation shared by the FFI and Tauri hosts.
# Keeping it behind a client feature preserves dependency-lean core builds.
[dependencies.ureq]
version = "2"
optional = true

[dependencies.tungstenite]
version = "0.24"
optional = true
features = ["rustls-tls-webpki-roots"]

[dependencies.url]
version = "2"
optional = true

[features]
default = []
crdt-yjs = ["dep:yrs"]
e2ee = ["ssp2/e2ee", "dep:rand_core"]
native-transport = ["dep:ureq", "dep:tungstenite", "dep:url"]