{"id":13998508,"url":"https://github.com/kettle11/tangle","last_synced_at":"2025-05-16T06:05:40.119Z","repository":{"id":65933130,"uuid":"585365899","full_name":"kettle11/tangle","owner":"kettle11","description":"Radically simple multiplayer / networked WebAssembly","archived":false,"fork":false,"pushed_at":"2024-07-14T19:42:57.000Z","size":532,"stargazers_count":1191,"open_issues_count":13,"forks_count":39,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-08T15:14:54.539Z","etag":null,"topics":["multiplayer","networking","webassembly"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/kettle11.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}},"created_at":"2023-01-05T01:37:09.000Z","updated_at":"2025-04-01T04:32:31.000Z","dependencies_parsed_at":"2024-01-15T19:44:48.466Z","dependency_job_id":"6ad21713-bb32-40e7-ae72-4dcf64d37ff5","html_url":"https://github.com/kettle11/tangle","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kettle11%2Ftangle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kettle11%2Ftangle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kettle11%2Ftangle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kettle11%2Ftangle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kettle11","download_url":"https://codeload.github.com/kettle11/tangle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254478188,"owners_count":22077676,"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":["multiplayer","networking","webassembly"],"created_at":"2024-08-09T19:01:43.971Z","updated_at":"2025-05-16T06:05:38.541Z","avatar_url":"https://github.com/kettle11.png","language":"TypeScript","readme":"## WARNING\n\nThis library is incredibly new. I value building in public so I'm making Tangle available *very* early. As a result Tangle has major bugs, TODOs, and known issues. The library is not stable: it will change constantly! Give it a try, be patient, and consider contributing!\n\n# Tangle\n\nTangle is a library that aims to make multiplayer apps and games far easier to build.\n\nTangle 'magically' wraps WebAssembly so you can write programs without worrying about message passing, serialization, or consensus.\n\n\n[Play with a live demo:](https://tanglesync.com)\n[![1500x500](https://user-images.githubusercontent.com/4565191/219482853-ac964fbd-a40f-4507-851a-5152c12d71f8.jpeg)](https://tanglesync.com)\n\n[Check out the examples to get started!](examples)\n\n## Questions\n\n### What is this for?\n\nTangle is a great fit for small games and apps that want to add multiplayer. In the future it may be useful for all sorts of things including (but not limited to): syncing programs between servers / clients, untrusted plugins in networked software, 'metaverse'-like scripting, and backend-less collaborative software.\n\n### Does this use WebSockets or WebRTC? \nUnder the hood Tangle uses peer to peer WebRTC connections. This may change!\n\n### How is this hosted?\n\nConnections are peer to peer but the initial connection needs to be facilitated by a central server. Right now I run a free instance of that server but if it gets serious traffic I may offer a paid version.\n\n### How does it work?\n\nTangle syncs initial state and networks all subsequent inputs that could cause simulations to diverge. Tangle keeps every bit identical between all connected Wasm instances.\n'Snapshots' are taken at each simulation step to enable 'rewinding' and 'replaying' events to ensure all peers apply events in the same order, without adding latency to user input.\n\nTODO: Write a more detailed explainer.\n\n### What are its limitations?\n\nDue to how rollback works frequently updated programs will have increased input latency if they do not keep CPU and memory usage low. This is an area that will see future improvement.\n\nTangle does nothing to merge long stretches of offline editing. It is not a CRDT.\n\n### What languages does this support?\n\nIn theory: Any language that targets WebAssembly. In practice I've only tested [AssemblyScript](https://www.assemblyscript.org) and [Rust](https://www.rust-lang.org).\n\n### Is this web only?\n\nRight now Tangle is implemented as a TypeScript library for web but its fundamental architecture *could* eventually be made to work on native platforms.\n","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkettle11%2Ftangle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkettle11%2Ftangle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkettle11%2Ftangle/lists"}