kuilt-quilter
Live CRDT replication over a Seam. Depends on :kuilt-core (transport contract) and :kuilt-crdt (value types); :kuilt-crdt itself has no transport dependency.
Core types
Quilter<S>— runs anyQuilted<S>CRDT live over aSeam. CollectsSeam.incoming, merges inbound deltas, broadcasts outbound deltas onapply().state: StateFlow<S>is always the current converged value. SeeQuilterConfigfor eviction, anti-entropy, and retry tuning.QuiltMessage<S>— sealed wire message hierarchy:Delta,Ack,FullState,Resend,Delivered. Serialised with CBOR by default.RgaGcCoordinator— causal-stability GC coordinator forRga. ConsumesQuilter.cutFrontier+deliveredLocaland emitsCompactpatches that evict stable tombstones from the op-log.BoundedCounterTransferCoordinator— distributed quota-transfer protocol forBoundedCounter(Rung 9). Runs alongside aQuilter<BoundedCounter>over aMuxSeam.
Convenience factory
The top-level Quilter(seam, initial, valueSerializer, scope, …) function derives the message serializer automatically:
val tally = Quilter(seam, PNCounter.ZERO, PNCounter.serializer(), backgroundScope)
tally.mutate { it.increment(tally.replica, 3L) }The full constructor Quilter(replica, seam, initial, messageSerializer, scope, …) is required for CRDTs whose serializer needs a custom SerializersModule (e.g. Rga with a generic value type — use Rga.wireSerializer(serializer<T>()) and pass QuiltMessage.serializer(…) explicitly).