[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-5665":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},5665,"loro","loro-dev\u002Floro","loro-dev","Make your JSON data collaborative and version-controlled with CRDTs","https:\u002F\u002Floro.dev",null,"Rust",5717,150,37,28,0,9,38,110,46,37.54,"MIT License",false,"main",true,[27,28,29,30,31,32,33],"collaborative-editing","crdt","local-first","offline-first","p2p","privacy-first","rich-text","2026-06-12 02:01:13","\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Floro.dev\">\n    \u003Cpicture>\n      \u003Cimg src=\".\u002Fdocs\u002FLoro.svg\" width=\"200\"\u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Ch1 align=\"center\">\n\u003Ca href=\"https:\u002F\u002Floro.dev\" alt=\"loro-site\">Loro\u003C\u002Fa>\n\u003C\u002Fh1>\n\u003Cp align=\"center\">\n  \u003Cb>Make your JSON data collaborative and version-controlled 🦜\u003C\u002Fb>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F4964\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F4964\" alt=\"loro-dev%2Floro | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Floro.dev\u002Fdocs\">\n    \u003Cb>Documentation\u003C\u002Fb>\n  \u003C\u002Fa>\n  |\n  \u003Ca href=\"https:\u002F\u002Floro.dev\u002Fdocs\u002Ftutorial\u002Fget_started\">\n    \u003Cb>Getting Started\u003C\u002Fb>\n  \u003C\u002Fa>\n  |\n  \u003Ca href=\"https:\u002F\u002Fdocs.rs\u002Floro\">\n    \u003Cb>Rust Doc\u003C\u002Fb>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ca aria-label=\"X\" href=\"https:\u002F\u002Fx.com\u002Floro_dev\" target=\"_blank\">\n    \u003Cimg alt=\"\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTwitter-black?style=for-the-badge&logo=Twitter\">\n  \u003C\u002Fa>\n  \u003Ca aria-label=\"Discord-Link\" href=\"https:\u002F\u002Fdiscord.gg\u002FtUsBSVfqzf\" target=\"_blank\">\n    \u003Cimg alt=\"\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-black?style=for-the-badge&logo=discord\">\n  \u003C\u002Fa>\n  \u003Ca aria-label=\"Gurubase\" href=\"https:\u002F\u002Fgurubase.io\u002Fg\u002Floro\" target=\"_blank\">\n    \u003Cimg alt=\"\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAsk%20Loro%20Guru-000000?style=for-the-badge\">\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\nhttps:\u002F\u002Fgithub.com\u002Floro-dev\u002Floro\u002Fassets\u002F18425020\u002Ffe246c47-a120-44b3-91d4-1e7232a5b4ac\n\n\u003Ch4 align=\"center\">\n  ✨ Loro 1.0 is out! Read the \u003Ca href=\"https:\u002F\u002Floro.dev\u002Fblog\u002Fv1.0\">announcement\u003C\u002Fa>.\n\u003C\u002Fh4>\n\nLoro is a [CRDTs(Conflict-free Replicated Data Types)](https:\u002F\u002Fcrdt.tech\u002F) 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:\u002F\u002Floro.dev\u002Fblog\u002Floro-richtext)\n- 🌲 [Moveable Tree](https:\u002F\u002Floro.dev\u002Fdocs\u002Ftutorial\u002Ftree)\n- 🚗 [Moveable List](https:\u002F\u002Floro.dev\u002Fdocs\u002Ftutorial\u002Flist)\n- 🗺️ [Last-Write-Wins Map](https:\u002F\u002Floro.dev\u002Fdocs\u002Ftutorial\u002Fmap)\n\n**Advanced Features in Loro**\n\n- 🚀 [Fast Document Loading](https:\u002F\u002Floro.dev\u002Fblog\u002Fv1.0)\n- ⏱️ Fast [Time Travel](https:\u002F\u002Floro.dev\u002Fdocs\u002Ftutorial\u002Ftime_travel) Through History\n- 🏛️ [Version Control with Real-Time Collaboration](https:\u002F\u002Floro.dev\u002Fblog\u002Fv1.0#version-control)\n- 📦 [Shallow Snapshot](https:\u002F\u002Floro.dev\u002Fdocs\u002Fadvanced\u002Fshallow_snapshot) that Works like Git Shallow Clone\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F68e0017a-4987-4f71-b2cf-4ed28a210987\n\n> In this example, we demonstrate importing an entire Loro codebase into a Loro-powered\n> version controller, preserving the complete Git DAG history while enabling fast version switching.\n\n# Example\n\n[![Open in StackBlitz](https:\u002F\u002Fdeveloper.stackblitz.com\u002Fimg\u002Fopen_in_stackblitz.svg)](https:\u002F\u002Fstackblitz.com\u002Fedit\u002Floro-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\", () => {\n  \u002F\u002F Sync two docs with two rounds of exchanges\n\n  \u002F\u002F 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  \u002F\u002F Export all updates from docA\n  const bytes: Uint8Array = docA.export({ mode: \"update\" });\n\n  \u002F\u002F Simulate sending `bytes` across the network to another peer, B\n\n  const docB = new LoroDoc();\n  \u002F\u002F Peer B imports the updates from A\n  docB.import(bytes);\n\n  \u002F\u002F B's state matches A's state\n  expect(docB.toJSON()).toStrictEqual({\n    list: [\"A\", \"B\", \"C\"],\n  });\n\n  \u002F\u002F Get the current version of docB\n  const version = docB.oplogVersion();\n\n  \u002F\u002F Simulate editing at B: delete item 'B'\n  const listB: LoroList = docB.getList(\"list\");\n  listB.delete(1, 1);\n\n  \u002F\u002F Export the updates from B since the last sync point\n  const bytesB: Uint8Array = docB.export({ mode: \"update\", from: version });\n\n  \u002F\u002F Simulate sending `bytesB` back across the network to A\n\n  \u002F\u002F A imports the updates from B\n  docA.import(bytesB);\n\n  \u002F\u002F 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:\u002F\u002Finspector.loro.dev) to inspect the state and history of a Loro document.\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fceeb7450-80ce-42f2-aef4-2e08fa2d1f1b\n\n# Bindings\n\nYou can find bindings for other programming languages in [loro-ffi](https:\u002F\u002Fgithub.com\u002Floro-dev\u002Floro-ffi).\n\n# Blog\n\n- [Loro 1.0](https:\u002F\u002Floro.dev\u002Fblog\u002Fv1.0)\n- [Movable tree CRDTs and Loro's implementation](https:\u002F\u002Floro.dev\u002Fblog\u002Fmovable-tree)\n- [Introduction to Loro's Rich Text CRDT](https:\u002F\u002Floro.dev\u002Fblog\u002Floro-richtext)\n- [Loro: Reimagine State Management with CRDTs](https:\u002F\u002Floro.dev\u002Fblog\u002Floro-now-open-source)\n\n# Sponsors\n\n[![Sponsors](.\u002Fsponsorkit\u002Fsponsors.svg)](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Floro-dev)\n\n# Credits\n\nLoro draws inspiration from the innovative work of the following projects and individuals:\n\n- [Diamond-types](https:\u002F\u002Fgithub.com\u002Fjosephg\u002Fdiamond-types): The [Event Graph Walker (Eg-walker)](https:\u002F\u002Floro.dev\u002Fdocs\u002Fadvanced\u002Fevent_graph_walker) algorithm from @josephg has been adapted to reduce the computation and space usage of CRDTs.\n- [Automerge](https:\u002F\u002Fgithub.com\u002Fautomerge\u002Fautomerge): Their use of columnar encoding for CRDTs has informed our strategies for efficient data encoding.\n- [Yjs](https:\u002F\u002Fgithub.com\u002Fyjs\u002Fyjs): We have incorporated a similar algorithm for effectively merging collaborative editing operations, thanks to their pioneering work.\n- [Matthew Weidner](https:\u002F\u002Fmattweidner.com\u002F): His work on the [Fugue](https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.00583) algorithm has been invaluable, enhancing our text editing capabilities.\n- [Martin Kleppmann](https:\u002F\u002Fmartin.kleppmann.com\u002F): His work on CRDTs has significantly influenced our comprehension of the field.\n\n[local-first]: https:\u002F\u002Fwww.inkandswitch.com\u002Flocal-first\u002F\n[Fugue]: https:\u002F\u002Farxiv.org\u002Fabs\u002F2305.00583\n","Loro 是一个基于 CRDTs（无冲突复制数据类型）的库，旨在简化本地优先和协作应用的开发。其核心功能包括点对点同步、自动合并、本地可用性、可扩展性和增量更新。支持多种 CRDT 算法，如文本编辑、富文本、可移动树和列表等。此外，Loro 提供快速文档加载、时间旅行、版本控制以及类似 Git 的浅快照等高级特性。该库非常适合需要实时协作和离线工作的场景，如多人在线文档编辑、代码协作平台等。使用 Rust 编写，并可通过 WASM 在 JavaScript 和 Swift 中使用。",2,"2026-06-11 03:04:36","top_language"]