This repository contains experimental Swift bindings for Loro CRDT.
If you have any suggestions for API, please feel free to create an issue or join our Discord community.
-
LoroDoc
export and import -
List
/Map
/Text
/Tree
/MovableList
/Counter
Container - Checkout
- Subscribe Event
- UndoManager
- Bindings for all types in Loro
- Tests
- Benchmarks
Add the dependency in your Package.swift
.
let package = Package(
name: "your-project",
products: [......],
dependencies:[
...,
.package(url: "https://github.com/loro-dev/loro-swift.git", from: "1.1.3")
],
targets:[
.executableTarget(
...,
dependencies:[.product(name: "Loro", package: "loro-swift")],
)
]
)
import Loro
// create a Loro document
let doc = LoroDoc()
// create Root Container by getText, getList, getMap, getTree, getMovableList, getCounter
let text = doc.getText(id: "text")
try! text.insert(pos: 0, s: "abc")
try! text.delete(pos: 0, len: 1)
let s = text.toString()
// XCTAssertEqual(s, "bc")
// subscribe the event
let sub = doc.subscribeRoot{ diffEvent in
print(diffEvent)
}
// export updates or snapshot
let doc2 = LoroDoc()
let snapshot = doc.export(mode: ExportMode.snapshot)
let updates = doc.export(mode: ExportMode.updates(from: VersionVector()))
// import updates or snapshot
let status = try! doc2.import(snapshot)
let status2 = try! doc2.import(updates)
// import batch of updates or snapshot
try! doc2.importBatch(bytes: [snapshot, updates])
// checkout to any version
let startFrontiers = doc.oplogFrontiers()
try! doc.checkout(frontiers: startFrontiers)
doc.checkoutToLatest()
If you wanna build and develop this project with MacOS, you need first run this script:
export LOCAL_BUILD=1
sh ./scripts/build_macos.sh
The script will run uniffi
and generate the loroFFI.xcframework.zip
.
- Automerge-swift:
loro-swift
uses many ofautomerge-swift
's scripts for building and CI.