Swiftpack.co - Package - bluk/CRDT


A Swift package to help build Convergent and Commutative Replicated Data Types.

CRDTs are useful for synchronizing data which eventually converges to a consistent state. CRDTs can be useful when nodes/replicas may not be able to directly communicate with each other. CRDTs can be used instead of an always active foreground synchronization protocol.


Swift Package Manager

Add this package to your Package.swift dependencies and target's dependencies:

import PackageDescription

let package = Package(
    name: "Example",
    dependencies: [
            url: "https://github.com/bluk/CRDT",
            from: "0.1.0"
    targets: [
            name: "YourProject",
            dependencies: ["CRDT"]


import Foundation

import CRDT

// First system
let actorA = UUID()
var a = GCounter<UUID>()

a.incrementCounter(for: actorA)
// a.value == 1

// Second system
let actorB = UUID()
var b = GCounter<UUID>()

b.incrementCounter(for: actorB)
// b.value == 1

try b.merge(a)
// b.value == 2

a.incrementCounter(for: actorA)
a.incrementCounter(for: actorA)
// a.value == 3

try b.merge(a)
// b.value == 4

See the tests for more examples.

Related Links

CRDT Papers

Other Projects

See other projects which have implementations for CRDTs:


Apache-2.0 License


Stars: 0
Help us keep the lights on


Used By

Total: 0


v0.2.0 - Sep 5, 2019

v0.1.0 - Sep 4, 2019