{"id":13456971,"url":"https://github.com/loro-dev/loro","last_synced_at":"2026-04-12T16:33:46.739Z","repository":{"id":206959619,"uuid":"513221555","full_name":"loro-dev/loro","owner":"loro-dev","description":"Make your JSON data collaborative and version-controlled with CRDTs","archived":false,"fork":false,"pushed_at":"2026-04-09T11:22:52.000Z","size":13385,"stargazers_count":5495,"open_issues_count":40,"forks_count":138,"subscribers_count":38,"default_branch":"main","last_synced_at":"2026-04-09T13:15:51.461Z","etag":null,"topics":["collaborative-editing","crdt","local-first","offline-first","p2p","privacy-first","rich-text"],"latest_commit_sha":null,"homepage":"https://loro.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/loro-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"loro-dev"}},"created_at":"2022-07-12T16:48:23.000Z","updated_at":"2026-04-09T12:52:53.000Z","dependencies_parsed_at":"2026-03-16T12:07:05.671Z","dependency_job_id":null,"html_url":"https://github.com/loro-dev/loro","commit_stats":null,"previous_names":["loro-dev/loro"],"tags_count":410,"template":false,"template_full_name":null,"purl":"pkg:github/loro-dev/loro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loro-dev","download_url":"https://codeload.github.com/loro-dev/loro/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31722563,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-12T13:21:33.774Z","status":"ssl_error","status_checked_at":"2026-04-12T13:21:29.265Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaborative-editing","crdt","local-first","offline-first","p2p","privacy-first","rich-text"],"created_at":"2024-07-31T08:01:31.058Z","updated_at":"2026-04-12T16:33:46.722Z","avatar_url":"https://github.com/loro-dev.png","language":"Rust","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://loro.dev\"\u003e\n    \u003cpicture\u003e\n      \u003cimg src=\"./docs/Loro.svg\" width=\"200\"/\u003e\n    \u003c/picture\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003e\n\u003ca href=\"https://loro.dev\" alt=\"loro-site\"\u003eLoro\u003c/a\u003e\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eMake your JSON data collaborative and version-controlled 🦜\u003c/b\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://trendshift.io/repositories/4964\" target=\"_blank\"\u003e\u003cimg src=\"https://trendshift.io/api/badge/repositories/4964\" alt=\"loro-dev%2Floro | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://loro.dev/docs\"\u003e\n    \u003cb\u003eDocumentation\u003c/b\u003e\n  \u003c/a\u003e\n  |\n  \u003ca href=\"https://loro.dev/docs/tutorial/get_started\"\u003e\n    \u003cb\u003eGetting Started\u003c/b\u003e\n  \u003c/a\u003e\n  |\n  \u003ca href=\"https://docs.rs/loro\"\u003e\n    \u003cb\u003eRust Doc\u003c/b\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca aria-label=\"X\" href=\"https://x.com/loro_dev\" target=\"_blank\"\u003e\n    \u003cimg alt=\"\" src=\"https://img.shields.io/badge/Twitter-black?style=for-the-badge\u0026logo=Twitter\"\u003e\n  \u003c/a\u003e\n  \u003ca aria-label=\"Discord-Link\" href=\"https://discord.gg/tUsBSVfqzf\" target=\"_blank\"\u003e\n    \u003cimg alt=\"\" src=\"https://img.shields.io/badge/Discord-black?style=for-the-badge\u0026logo=discord\"\u003e\n  \u003c/a\u003e\n  \u003ca aria-label=\"Gurubase\" href=\"https://gurubase.io/g/loro\" target=\"_blank\"\u003e\n    \u003cimg alt=\"\" src=\"https://img.shields.io/badge/Ask%20Loro%20Guru-000000?style=for-the-badge\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nhttps://github.com/loro-dev/loro/assets/18425020/fe246c47-a120-44b3-91d4-1e7232a5b4ac\n\n\u003ch4 align=\"center\"\u003e\n  ✨ Loro 1.0 is out! Read the \u003ca href=\"https://loro.dev/blog/v1.0\"\u003eannouncement\u003c/a\u003e.\n\u003c/h4\u003e\n\nLoro is a [CRDTs(Conflict-free Replicated Data Types)](https://crdt.tech/) library that makes building [local-first][local-first] and collaborative apps easier. You can now use it in Rust, JS (via WASM), and Swift.\n\n# Features\n\n**Features Provided by CRDTs**\n\n- P2P Synchronization\n- Automatic Merging\n- Local Availability\n- Scalability\n- Delta Updates\n\n**Supported CRDT Algorithms**\n\n- 📝 Text Editing with [Fugue]\n- 📙 [Rich Text CRDT](https://loro.dev/blog/loro-richtext)\n- 🌲 [Moveable Tree](https://loro.dev/docs/tutorial/tree)\n- 🚗 [Moveable List](https://loro.dev/docs/tutorial/list)\n- 🗺️ [Last-Write-Wins Map](https://loro.dev/docs/tutorial/map)\n\n**Advanced Features in Loro**\n\n- 🚀 [Fast Document Loading](https://loro.dev/blog/v1.0)\n- ⏱️ Fast [Time Travel](https://loro.dev/docs/tutorial/time_travel) Through History\n- 🏛️ [Version Control with Real-Time Collaboration](https://loro.dev/blog/v1.0#version-control)\n- 📦 [Shallow Snapshot](https://loro.dev/docs/advanced/shallow_snapshot) that Works like Git Shallow Clone\n\nhttps://github.com/user-attachments/assets/68e0017a-4987-4f71-b2cf-4ed28a210987\n\n\u003e In this example, we demonstrate importing an entire Loro codebase into a Loro-powered\n\u003e version controller, preserving the complete Git DAG history while enabling fast version switching.\n\n# Example\n\n[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/edit/loro-basic-test?file=test%2Floro-sync.test.ts)\n\n```ts\nimport { expect, test } from \"vitest\";\nimport { LoroDoc, LoroList } from \"loro-crdt\";\n\ntest(\"sync example\", () =\u003e {\n  // Sync two docs with two rounds of exchanges\n\n  // Initialize document A\n  const docA = new LoroDoc();\n  const listA: LoroList = docA.getList(\"list\");\n  listA.insert(0, \"A\");\n  listA.insert(1, \"B\");\n  listA.insert(2, \"C\");\n\n  // Export all updates from docA\n  const bytes: Uint8Array = docA.export({ mode: \"update\" });\n\n  // Simulate sending `bytes` across the network to another peer, B\n\n  const docB = new LoroDoc();\n  // Peer B imports the updates from A\n  docB.import(bytes);\n\n  // B's state matches A's state\n  expect(docB.toJSON()).toStrictEqual({\n    list: [\"A\", \"B\", \"C\"],\n  });\n\n  // Get the current version of docB\n  const version = docB.oplogVersion();\n\n  // Simulate editing at B: delete item 'B'\n  const listB: LoroList = docB.getList(\"list\");\n  listB.delete(1, 1);\n\n  // Export the updates from B since the last sync point\n  const bytesB: Uint8Array = docB.export({ mode: \"update\", from: version });\n\n  // Simulate sending `bytesB` back across the network to A\n\n  // A imports the updates from B\n  docA.import(bytesB);\n\n  // A has the same state as B\n  expect(docA.toJSON()).toStrictEqual({\n    list: [\"A\", \"C\"],\n  });\n});\n```\n\n# DevTools\n\n## Loro Inspector\n\nYou can use the [Loro Inspector](https://inspector.loro.dev) to inspect the state and history of a Loro document.\n\nhttps://github.com/user-attachments/assets/ceeb7450-80ce-42f2-aef4-2e08fa2d1f1b\n\n# Bindings\n\nYou can find bindings for other programming languages in [loro-ffi](https://github.com/loro-dev/loro-ffi).\n\n# Blog\n\n- [Loro 1.0](https://loro.dev/blog/v1.0)\n- [Movable tree CRDTs and Loro's implementation](https://loro.dev/blog/movable-tree)\n- [Introduction to Loro's Rich Text CRDT](https://loro.dev/blog/loro-richtext)\n- [Loro: Reimagine State Management with CRDTs](https://loro.dev/blog/loro-now-open-source)\n\n# Sponsors\n\n[![Sponsors](./sponsorkit/sponsors.svg)](https://github.com/sponsors/loro-dev)\n\n# Credits\n\nLoro draws inspiration from the innovative work of the following projects and individuals:\n\n- [Diamond-types](https://github.com/josephg/diamond-types): The [Event Graph Walker (Eg-walker)](https://loro.dev/docs/advanced/event_graph_walker) algorithm from @josephg has been adapted to reduce the computation and space usage of CRDTs.\n- [Automerge](https://github.com/automerge/automerge): Their use of columnar encoding for CRDTs has informed our strategies for efficient data encoding.\n- [Yjs](https://github.com/yjs/yjs): We have incorporated a similar algorithm for effectively merging collaborative editing operations, thanks to their pioneering work.\n- [Matthew Weidner](https://mattweidner.com/): His work on the [Fugue](https://arxiv.org/abs/2305.00583) algorithm has been invaluable, enhancing our text editing capabilities.\n- [Martin Kleppmann](https://martin.kleppmann.com/): His work on CRDTs has significantly influenced our comprehension of the field.\n\n[local-first]: https://www.inkandswitch.com/local-first/\n[Fugue]: https://arxiv.org/abs/2305.00583\n","funding_links":["https://github.com/sponsors/loro-dev"],"categories":["Rust","p2p","Packages","其他_大数据"],"sub_categories":["资源传输下载"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floro-dev%2Floro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floro-dev%2Floro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floro-dev%2Floro/lists"}