{"id":42229430,"url":"https://github.com/loro-dev/loro-ffi","last_synced_at":"2026-01-27T02:43:08.005Z","repository":{"id":297554828,"uuid":"997124673","full_name":"loro-dev/loro-ffi","owner":"loro-dev","description":"FFI binding for loro","archived":false,"fork":false,"pushed_at":"2025-09-23T13:59:19.000Z","size":285,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-13T03:34:35.017Z","etag":null,"topics":["bindings","crdt","loro","uniffi"],"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":null,"funding":null,"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":null,"dco":null,"cla":null}},"created_at":"2025-06-06T02:08:40.000Z","updated_at":"2025-09-23T13:59:19.000Z","dependencies_parsed_at":"2025-06-06T04:32:37.172Z","dependency_job_id":"0909adb5-8ce7-4029-9449-96abbf2409aa","html_url":"https://github.com/loro-dev/loro-ffi","commit_stats":null,"previous_names":["loro-dev/loro-ffi"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/loro-dev/loro-ffi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro-ffi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro-ffi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro-ffi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro-ffi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loro-dev","download_url":"https://codeload.github.com/loro-dev/loro-ffi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loro-dev%2Floro-ffi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28796987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T01:07:07.743Z","status":"online","status_checked_at":"2026-01-27T02:00:07.755Z","response_time":168,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bindings","crdt","loro","uniffi"],"created_at":"2026-01-27T02:43:07.326Z","updated_at":"2026-01-27T02:43:07.998Z","avatar_url":"https://github.com/loro-dev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Loro FFI\n\n[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fgithub.com%2Floro-dev%2Floro-ffi%2Fraw%2Frefs%2Fheads%2Fmain%2FCargo.toml\u0026query=%24.package.version\u0026label=version)](Cargo.toml)\n[![Rust](https://img.shields.io/badge/rust-1.0+-orange.svg)](https://www.rust-lang.org)\n\nForeign Function Interface (FFI) bindings for [Loro](https://loro.dev), a high-performance CRDT library for building collaborative applications.\n\n## Overview\n\nLoro FFI provides cross-language bindings for the Loro CRDT library, enabling developers to use Loro's powerful collaborative editing capabilities in various programming languages. Built with [UniFFI](https://mozilla.github.io/uniffi-rs/), this library generates clean, idiomatic bindings for multiple target languages.\n\nJSONPath tooling now includes `subscribe_jsonpath`, a lightweight notification hook that fires (with possible false positives) when changes might affect a query—ideal for debounced or throttled watchers.\n\n## Supported Languages\n\n- [loro-swift](https://github.com/loro-dev/loro-swift): **Swift** Binding for Loro\n- [loro-py](https://github.com/loro-dev/loro-py): **Python** Binding (pyo3) for Loro\n- [loro-react-native](https://github.com/loro-dev/loro-react-native): **React Native** Turbo Module Binding for Loro\n- [loro-cs](https://github.com/sensslen/loro-cs): **C#** Binding for Loro (community)\n- [loro-go](https://github.com/aholstenson/loro-go): **Go** Binding for Loro (community)\n\n## CHANGE LOG\n\nYou can find the updates [here](./doc/CHANGELOG.md)\n\n## Build Binding\n\nRead the UniFFI [documentation](https://mozilla.github.io/uniffi-rs/) and modify the [uniffi.toml](./uniffi.toml) configuration in this repository as needed.\n\nAdd this repository as a git submodule for your bindings:\n\n```bash\ngit submodule add https://github.com/loro-dev/loro-ffi.git loro-ffi\ngit add .gitmodules loro-ffi\n```\n\nBuild language-specific wrapper layers around the current UniFFI binding results to provide a better developer experience, including but not limited to:\n\n- **Callback Function Wrapping**: Provide direct closure support for functions that require callback parameters, such as `LoroDoc::subscribe()`, `UndoManager::set_on_push()`, and `EphemeralStore::subscribe()`.\n\n- **Native Type Extensions**: Implement `LoroValueLike` `ContainerIdLike` extensions for built-in types in target languages, enabling direct parameter usage:\n  ```ts\n  LoroMap.insert(\"key\", \"value\");\n  LoroMap.insert(\"key\", 123);\n  LoroMap.insert(\"key\", true);\n  LoroMap.insert(\"key\", [1, 2, 3]);\n  // ... and more\n  ```\n\n- **Unified Export Interface**: Create a unified entry point for `LoroDoc::export`:\n  ```ts\n  class LoroDoc {\n    function export(mode: ExportMode) {\n        // Wraps:\n        // exportSnapshot()\n        // exportUpdates(from)\n        // exportUpdatesInRange(spans)\n        // exportShallowSnapshot(frontiers)\n        // exportStateOnly(frontiers)\n        // exportSnapshotAt(frontiers)\n    }\n  }\n  ```\n\n- **Unified Container Creation Interface**: Provide unified entry points for creating child containers in `LoroMap`/`LoroList`/`LoroMovableList`:\n  ```ts\n  class LoroMap {\n    function insertContainer(key: string, child: Container) {\n        // Wraps:\n        // insertListContainer\n        // insertMapContainer\n        // insertTextContainer\n        // insertTreeContainer\n        // insertMovableListContainer\n        // insertCounterContainer\n    }\n    function getOrCreateContainer() {}\n    // ... and more\n  }\n  ```\n\n- **Standard Language Interfaces**: Implement essential interfaces (equality, comparison, ordering, etc.) for necessary data types as required by target programming languages.\n\n- **Additional Enhancements**: And many other improvements to enhance usability and developer experience.\n\n## Community\n\n- **Discord**: [Join our Discord server](https://discord.gg/tUsBSVfqzf)\n- **Twitter**: [@loro_dev](https://twitter.com/loro_dev)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floro-dev%2Floro-ffi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floro-dev%2Floro-ffi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floro-dev%2Floro-ffi/lists"}