{"id":22871205,"url":"https://github.com/yetanotherclown/yetanothernet","last_synced_at":"2026-01-08T18:34:17.142Z","repository":{"id":175761795,"uuid":"654432473","full_name":"YetAnotherClown/YetAnotherNet","owner":"YetAnotherClown","description":"A Data-Driven Networking Library, inspired by Bevy_Renet \u0026 BridgeNet2, made for ECS.","archived":false,"fork":false,"pushed_at":"2025-01-22T04:04:02.000Z","size":4439,"stargazers_count":17,"open_issues_count":9,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-06T20:47:19.835Z","etag":null,"topics":["ecs","luau","matter","networking","roblox","roblox-library","roblox-lua","roblox-ts"],"latest_commit_sha":null,"homepage":"https://yetanotherclown.github.io/YetAnotherNet/","language":"Luau","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/YetAnotherClown.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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-06-16T05:52:47.000Z","updated_at":"2025-02-08T21:08:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"b18ba861-38af-430d-816e-d36fda1e55c0","html_url":"https://github.com/YetAnotherClown/YetAnotherNet","commit_stats":null,"previous_names":["yetanotherclown/net"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YetAnotherClown%2FYetAnotherNet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YetAnotherClown%2FYetAnotherNet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YetAnotherClown%2FYetAnotherNet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YetAnotherClown%2FYetAnotherNet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YetAnotherClown","download_url":"https://codeload.github.com/YetAnotherClown/YetAnotherNet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246460753,"owners_count":20781202,"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":["ecs","luau","matter","networking","roblox","roblox-library","roblox-lua","roblox-ts"],"created_at":"2024-12-13T13:17:34.643Z","updated_at":"2026-01-08T18:34:12.094Z","avatar_url":"https://github.com/YetAnotherClown.png","language":"Luau","readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg alt=\"YetAnotherNet — A Data-Driven Networking Library, inspired by Bevy_Renet \u0026 BridgeNet2, made for ECS.\" src=\".moonwave/static/Banner.svg\"\u003e\n\u003c/div\u003e\n\n## Quick Start\n\n- [**Documentation**]\n- [**Basic Use**]\n- [**To-do**]\n- **Getting Started**\n    - [**Routes**]\n    - [**Middleware**]\n    - [**Hooks**]\n- **Setup Guides**\n    - [**Matter**]\n    - [**Other**]\n- [**Support \u0026 Contribution**]\n- **Installation**\n    - [**Wally**]\n    - [**NPM**]\n\n[**Documentation**]: https://yetanotherclown.github.io/YetAnotherNet/\n[**Basic Use**]: #basic-usage\n[**To-do**]: #to-do\n[**Routes**]: https://yetanotherclown.github.io/YetAnotherNet/docs/getting-started/routes\n[**Middleware**]: https://yetanotherclown.github.io/YetAnotherNet/docs/getting-started/middleware\n[**Hooks**]: https://yetanotherclown.github.io/YetAnotherNet/docs/getting-started/hooks\n[**Matter**]: https://yetanotherclown.github.io/YetAnotherNet/docs/setup/matter\n[**Other**]: https://yetanotherclown.github.io/YetAnotherNet/docs/setup/other\n[**Support \u0026 Contribution**]: #support-and-contribution\n[**Wally**]: #wally\n[**NPM**]: #npm-for-roblox-typescript\n\n## About\n\nYetAnotherNet is a Networking Library for Roblox, which wraps around Roblox's RemoteEvents to improve developer experience, offer efficient networking, and provide other tools, utilities, and features relating to Networking on Roblox.\n\n### Features\n\n- Hassle-free Buffer Compression\n- Complete Typechecking \u0026 Intellisense\n- No Overhead from RemoteEvents\n- Ordered Networking\n- Middleware\n- Data-Driven Design\n- Simple Integration \u0026 API\n- Hot-reloading Support with [Rewire]\n\n[Rewire]: https://github.com/sayhisam1/Rewire\n\n### Data-driven by design\n\nOne thing that separates YetAnotherNet from other networking libraries on Roblox is this key design choice. YetAnotherNet was made to work with ECS, a Data-driven approach to game design, which has influenced the design of the library largely and makes it unique from the rest.\n\nWith inspiration from [Bevy_Renet], a Networking crate for use with the Bevy ECS in Rust, and another networking library on Roblox, [BridgeNet2], YetAnotherNet pushes to provide similar functionality to these two libraries for ECS on Roblox.\n\n[Bevy_Renet]: https://github.com/lucaspoffo/renet/tree/master/bevy_renet\n[BridgeNet2]: https://ffrostfall.github.io/BridgeNet2/\n\n#### Why go for Data-Driven Design?\n\nData-driven design opposes Event-driven design, which is what you can commonly see on Roblox, such as RemoteEvents themselves. Event-driven design has it's woes, which is why we opt for ECS and generally Data-driven design.\n\nEvent-driven design is sensitive to ordering, this makes it difficult to know when you might get data from an event. To solve this, YetAnotherNet does not use Events, it encourages you to query and send data in an ordered manner frame-by-frame, preferably with ECS.\n\nSince it's encouraged to use ECS with YetAnotherNet, though not required, we suggest reading [Matter — Why ECS?] by Evaera.\n\n[Matter — Why ECS?]: https://matter-ecs.github.io/matter/docs/WhyECS\n\n---\n\n## To-do\n\nTasks to complete before version 1.0.0 is released.\n\n- [x] Basic Functionality\n- [x] Stable Core API\n- [x] Strict Typing\n- [x] Unreliable Channel\n- [X] Middleware\n- [X] Typescript Support\n- [X] Automatic Buffer Compression\n- [x] Unit + Integration Tests w/ Jest \n- [ ] Rate limiting\n- [ ] Debugger\n\nOther Tasks\n- [ ] Support more [Unsupported Datatypes] in internal Ser/Des library\n- [ ] More extensive tests with Jest\n- [ ] Minimal Example\n- [ ] ECR Setup Guide\n- [ ] ECR Example\n- [ ] Flamework Binary Serializer Example\n- [ ] Docs Page for Technical Details\n\n[Unsupported Datatypes]: https://yetanotherclown.github.io/YetAnotherNet/docs/getting-started/buffer-compression#unsupported-datatypes\n\n---\n\n## Basic Usage\n\n\u003e [!TIP]\n\u003e See full documentation on [How to Use Routes] and [How to Setup with Matter] on the Documentation Site.\n\n[How to Use Routes]: https://yetanotherclown.github.io/YetAnotherNet/docs/getting-started/routes\n[How to Setup with Matter]: https://yetanotherclown.github.io/YetAnotherNet/docs/setup/matter\n\n### Setup\n\nBasic Setup for Routes\n```lua\nlocal YetAnotherNet = require(\"@packages/YetAnotherNet\")\n\nlocal Route = YetAnotherNet.Route\ntype Route\u003cU...\u003e = YetAnotherNet.Route\u003cU...\u003e;\n\n-- You can specify the type(s) between the \u003c\u003e for Typechecking + Intellisense\nlocal ExampleRoute: Route\u003cany\u003e = Route.new()\n\nreturn {\n    ExampleRoute = ExampleRoute\n}\n```\n\n### Example Use\n\nExample of how to use YetAnotherNet in a [Matter] System\n```lua\nlocal routes = require(\"@shared/routes\")\nlocal ExampleRoute = routes.ExampleOne\n\nlocal function exampleSystem(world)\n    -- Query through every networking call that frame on the Server\n    for i, player, ...data in ExampleRoute:query() do\n        -- Do something\n    end\n\n    -- Query through every networking call that frame on the Client\n    for i, _, ...data in ExampleRoute:query() do\n        -- Do something\n    end\n\n    -- Send data from the Client to the Server\n    ExampleRoute:send(...)\n\n    -- Send data to a Client from the Server\n    ExampleRoute:send(...):to(Player)\nend\n```\n\n[Matter]: https://github.com/matter-ecs/matter\n\n---\n\n## Support and Contribution\n\n### Discord\n\nWe have a Project Thread in the [Roblox OSS Community Server](https://quenty.org/oss/conduct), please read the Code of Conduct on that link before joining.\nYou can find the Project thread under the [#Projects](https://discord.com/channels/385151591524597761/1019724676265676930) threads channel titled as \"YetAnotherNet,\" or you can follow [this link](https://discord.com/channels/385151591524597761/1179944163844825209).\n\n**Please be mindful that the Roblox OSS Community is a professional workspace and not a general help desk, please keep questions and discussions about YetAnotherNet in our Project Thread and keep any other appropriate conversations in their respective channels.**\n\nPlease also be patient when awaiting a response in the thread, I will get to it when I can.\n\n### Contributing\n\nSee the [CONTRIBUTING.md](CONTRIBUTING.md) file for a detailed guide on contributing. If you need any assistance, don't hesitate to ping me in the project thread or on GitHub.\n\n---\n\n## Installation\n\n### Wally\n\nAdd YetAnotherNet to your project with [Wally] by adding the following to your ``wally.toml`` file:\n```toml\n[dependencies]\nYetAnotherNet = \"yetanotherclown/yetanothernet@0.10.0-alpha.5\"\n```\n\n\u003e [!NOTE]\n\u003e Wally does not export types automatically, if you wish to use Strict Typing with YetAnotherNet, install [Wally Package Types] with Aftman.\n\n[Wally]: https://github.com/UpliftGames/wally\n[Wally Package Types]: https://github.com/JohnnyMorganz/wally-package-types\n\n### NPM for Roblox Typescript\n\nYou can find YetAnotherNet on [NPM], or install it with the command line:\n\n```\nnpm i @rbxts/yetanothernet\n```\n\n[NPM]: https://www.npmjs.com/package/@rbxts/yetanothernet\n\n## Building\n\nTo build yourself with Rojo, use: \n```bash\n./scripts/build.sh\n```\n\nFor more help, check out [the Rojo documentation].\n\n[the Rojo documentation]: https://rojo.space/docs\n\n## Derived Works\n\nThe Darklua setup and Github Workflows are inspired and built off of the work of **grilme99**'s [roblox-project-template](https://github.com/grilme99/roblox-project-template).","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyetanotherclown%2Fyetanothernet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyetanotherclown%2Fyetanothernet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyetanotherclown%2Fyetanothernet/lists"}