{"id":13472465,"url":"https://github.com/cloudpeers/tlfs","last_synced_at":"2025-10-23T06:42:47.325Z","repository":{"id":43332237,"uuid":"409507010","full_name":"cloudpeers/tlfs","owner":"cloudpeers","description":"The Local-First SDK","archived":false,"fork":false,"pushed_at":"2022-04-13T15:23:47.000Z","size":2023,"stargazers_count":65,"open_issues_count":19,"forks_count":4,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-23T20:34:23.548Z","etag":null,"topics":["local-first","p2p"],"latest_commit_sha":null,"homepage":"https://cloudpeers.co","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/cloudpeers.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["dvc94ch"]}},"created_at":"2021-09-23T08:19:01.000Z","updated_at":"2025-02-20T00:15:44.000Z","dependencies_parsed_at":"2022-07-21T22:17:57.114Z","dependency_job_id":null,"html_url":"https://github.com/cloudpeers/tlfs","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudpeers%2Ftlfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudpeers%2Ftlfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudpeers%2Ftlfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudpeers%2Ftlfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudpeers","download_url":"https://codeload.github.com/cloudpeers/tlfs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245681480,"owners_count":20655205,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["local-first","p2p"],"created_at":"2024-07-31T16:00:54.869Z","updated_at":"2025-10-23T06:42:42.308Z","avatar_url":"https://github.com/cloudpeers.png","language":"Rust","funding_links":["https://github.com/sponsors/dvc94ch"],"categories":["Rust"],"sub_categories":[],"readme":"# The Local-First SDK\n\n[![License](https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg)](https://github.com/cloudpeers/tlfs)\n[![dependency status](https://deps.rs/repo/github/cloudpeers/tlfs/status.svg?style=flat-square)](https://deps.rs/repo/github/cloudpeers/tlfs)\n\n[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](#contributing)\n![commits](https://img.shields.io/github/commit-activity/m/cloudpeers/tlfs?style=flat-square)\n![contributors](https://img.shields.io/github/contributors/cloudpeers/tlfs?style=flat-square)\n\n\n## Philosophy\n\n\u003e There is no cloud, it's just someone else's computer.\n\nThe Local-First SDK offers a stack to write applications as productively as when\nusing state-of-the-art cloud-based architectures, while providing the Seven\nIdeals for Local-First Software [0] -- basically for free:\n* Software can respond near-instantaneously to user input.\n  _(No waiting on server round-trips, no spinners.)_\n* Cross-device synchronization.\n  _(Pick up work on your mobile device just where you left off with your laptop.)_\n* \"Offline-First\" as a subset of Local-First.\n  _(Connectivity is irrelevant when interacting with the application\u003e0_\n* Seamless collaboration with other peers.\n  _(Edit and sync shared data without fear of conflicts.)_\n* Full data agency.\n  _(Do what you want with your data, it's yours only.)_\n* Secure and private data management.\n  _(Everything is encrypted, only you have the keys.)_\n* Full ownership and control over the application's data.\n  _(No one can take away a service from you.)_\n\n[0]: https://martin.kleppmann.com/papers/local-first.pdf\n\n--------\n\n## Components\n\nThe Local-First SDK comprises the following components:\n1. User and Access Control:\n   ... (key management, acl)\n1. Multi-Device Support and Collaboration:\n   ... (device auth, p2p, peer discovery (mdns and via cloud peer))\n1. Data Persistence\n   ... (cloud peer or self-hosted)\n1. Multi device support and interoperability\n   ... (browser, native, android/ios?)\n\n--------\n\n## Artifacts\n\nThe Local-First SDK comes in three flavours:\n1. An opinionated Javascript package (with Typescript bindings) to write\n   Local-First applications targeting the browser.\n1. A library which can be embedded into other applications, either as a rust\n   library or a C-compatible FFI.\n1. A native, permanent process shepherding the user's data. Applications can\n   interface with this daemon via HTTP.\n\n### The Local-First Javascript SDK\n\nAs the browser's API guarantees are weak, its environment has to be considered\nephemeral[^1]. This is why the optional Cloud-Peer supplemental services\ncomplement the browser environment very well (data persistence, peer discovery).\n\nAs of now, the SDK is just offered as an ES module, requiring asynchronous\nimport:\n```js\nimport * as localFirst from 'local-first';\n\nawait localFirst.init();\n```\n\n[..]\n\n[^1]: Most notably this is about persistence of user data (key material and\napplication data). However, it's easy to lose one's browsing data by switching\nto another browser profile/container, etc.\n\n\n--------\n\n## Under the hood\n\nRust, libp2p, crdts, cambria, .. \n--\u003e INSERT AWESOMENESS HERE \u003c--\n\n--------\n\n## License\n\nLicensed under either of\n\n * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n### Contributing\nBe respectful. Check out our [Contribution Guidelines](./CONTRIBUTING.md) for\nspecifics.\nAny contribution intentionally submitted for inclusion in the work by you, as\ndefined in the Apache-2.0 license, shall be dual licensed as above, without any\nadditional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudpeers%2Ftlfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudpeers%2Ftlfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudpeers%2Ftlfs/lists"}