{"id":22656902,"url":"https://github.com/icelk/agde","last_synced_at":"2025-04-12T04:53:50.645Z","repository":{"id":43324230,"uuid":"425293813","full_name":"Icelk/agde","owner":"Icelk","description":"A general decentralized real-time sync library supporting text and binary.","archived":false,"fork":false,"pushed_at":"2025-03-11T03:14:10.000Z","size":673,"stargazers_count":4,"open_issues_count":3,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-12T04:53:39.680Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Icelk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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}},"created_at":"2021-11-06T16:34:03.000Z","updated_at":"2024-10-13T14:54:05.000Z","dependencies_parsed_at":"2024-02-10T15:45:16.594Z","dependency_job_id":null,"html_url":"https://github.com/Icelk/agde","commit_stats":{"total_commits":388,"total_committers":2,"mean_commits":194.0,"dds":0.01804123711340211,"last_synced_commit":"0ef8aa9ae4fc18796fb3eaac42512787f9b83da2"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Icelk%2Fagde","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Icelk%2Fagde/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Icelk%2Fagde/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Icelk%2Fagde/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Icelk","download_url":"https://codeload.github.com/Icelk/agde/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248519472,"owners_count":21117757,"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":[],"created_at":"2024-12-09T10:16:50.974Z","updated_at":"2025-04-12T04:53:50.618Z","avatar_url":"https://github.com/Icelk.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# agde\n\n\u003e A general decentralized real-time sync library supporting text and binary.\n\n`agde` is a set of _libraries_ to handle _syncing_ clients in a network.\n\nIt can sync whenever, like Git, but doesn't store a history. This means the storage it uses is much lower. It's also faster, and merging is automatic. This enables real-time cooperation.\n\n# Components\n\n## dach\n\n`dach` is the low-level underlying difference algorithm. It works on _general_ data, both binary and text.\n\nIt supports both syncing a local file with a remote's using a cheap, rsync-esque algo and obtaining a diff between local files to share with others.\n\n## agde\n\n`agde` takes the local diff function of [`dach`](#dach) and builds a framework around it to provide _asynchronous_ arrival of events.\nThis enables unreliable networks (such as the internet) to be used in a live environment, without any data getting lost.\nIt also takes care of validating data integrity.\n\nThe architecture is a _decentralized pier-to-pier network_.\nThe implementer can choose to transmit data via _WebSockets_, _WebRTC_, or _any other_ (semi-reliable) protocol.\n\nFor most cases, you should use [`agde-io`](#agde-io), which takes care of most of the heavy-lifting.\n\n## agde-io\n\nThis builds a async runtime to simplify accessing files and network IO with other clients.\n`agde-io` also takes care of all the types of messages and when to call check-up functions. This is all configurable.\n\n## agde-tokio\n\nA native binary implementation of agde-io using Tokio and WebSockets. This might be expanded in the future to include WebRTC.\nUseful for desktop applications and servers. It's currently lacking [clean detection](#clean-detection).\n\n## agde-web\n\nAn implementation of agde-io on the web, requiring the user to give JS functions for saving, reading, and listing resources.\nIt uses WebSockets for communication. This might be expanded in the future to include WebRTC.\n\n## agde-web.js\n\nAn implementation of agde-web using localforage to store the data.\n\n# Clean detection\n\nTo know when to push and pull changes, agde benefits from knowing when the\nresources are up to date and modifiable by agde (e.g. written to disk).\n\nOn the web, this is achieved by manually saving the data and calling `commit_and_send` on a regular interval.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficelk%2Fagde","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ficelk%2Fagde","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficelk%2Fagde/lists"}