simlock
병렬 코딩 에이전트가 동일 시뮬레이터를 놓고 충돌하지 않도록 제어 평면 제공
CRDT로 JSON 데이터를 협업하고 버전 관리하세요
Make your JSON data collaborative and version-controlled with CRDTs
개발 도구Rust · TypeScriptGitHub @loro-dev직접 설치운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗https://github.com/loro-dev/loro/assets/18425020/fe246c47-a120-44b3-91d4-1e7232a5b4ac
Loro is a CRDTs(Conflict-free Replicated Data Types) library that makes building local-first and collaborative apps easier. You can now use it in Rust, JS (via WASM), and Swift.
Features Provided by CRDTs
Supported CRDT Algorithms
ensureMergeable* / ensure_mergeable_* for lazy child container creationAdvanced Features in Loro
https://github.com/user-attachments/assets/68e0017a-4987-4f71-b2cf-4ed28a210987
In this example, we demonstrate importing an entire Loro codebase into a Loro-powered version controller, preserving the complete Git DAG history while enabling fast version switching.
import { expect, test } from "vitest";
import { LoroDoc, LoroList } from "loro-crdt";
test("sync example", () => {
// Sync two docs with two rounds of exchanges
// Initialize document A
const docA = new LoroDoc();
const listA: LoroList = docA.getList("list");
listA.insert(0, "A");
listA.insert(1, "B");
listA.insert(2, "C");
// Export all updates from docA
const bytes: Uint8Array = docA.export({ mode: "update" });
// Simulate sending `bytes` across the network to another peer, B
const docB = new LoroDoc();
// Peer B imports the updates from A
docB.import(bytes);
// B's state matches A's state
expect(docB.toJSON()).toStrictEqual({
list: ["A", "B", "C"],
});
// Get the current version of docB
const version = docB.oplogVersion();
// Simulate editing at B: delete item 'B'
const listB: LoroList = docB.getList("list");
listB.delete(1, 1);
// Export the updates from B since the last sync point
const bytesB: Uint8Array = docB.export({ mode: "update", from: version });
// Simulate sending `bytesB` back across the network to A
// A imports the updates from B
docA.import(bytesB);
// A has the same state as B
expect(docA.toJSON()).toStrictEqual({
list: ["A", "C"],
});
});
You can use the Loro Inspector to inspect the state and history of a Loro document.
https://github.com/user-attachments/assets/ceeb7450-80ce-42f2-aef4-2e08fa2d1f1b
You can find bindings for other programming languages in loro-ffi.
Loro draws inspiration from the innovative work of the following projects and individuals: