{"id":27102573,"url":"https://github.com/arthuro555/thnk","last_synced_at":"2025-04-06T15:53:04.580Z","repository":{"id":52282611,"uuid":"519473878","full_name":"arthuro555/THNK","owner":"arthuro555","description":"An authoritative multiplayer games framework for GDevelop.","archived":false,"fork":false,"pushed_at":"2024-04-03T10:21:32.000Z","size":19602,"stargazers_count":62,"open_issues_count":20,"forks_count":15,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-02T04:20:28.703Z","etag":null,"topics":["authoritative","authoritative-server","collaborate","framework","gamedev","gdevelop","gdevelop-extension","hacktoberfest","multiplayer","multiplayer-game","multiplayer-game-server","server","typescript"],"latest_commit_sha":null,"homepage":"https://thnk.cloud","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arthuro555.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"ko_fi":"arthuro555","github":"arthuro555"}},"created_at":"2022-07-30T09:30:28.000Z","updated_at":"2024-04-16T05:57:26.000Z","dependencies_parsed_at":"2023-11-28T15:46:54.069Z","dependency_job_id":"6b7f1415-3544-4814-a9ea-43c0bfce23d1","html_url":"https://github.com/arthuro555/THNK","commit_stats":{"total_commits":75,"total_committers":5,"mean_commits":15.0,"dds":"0.10666666666666669","last_synced_commit":"b09147cf2948556c54e1e91186c22a573c9de08c"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthuro555%2FTHNK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthuro555%2FTHNK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthuro555%2FTHNK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arthuro555%2FTHNK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arthuro555","download_url":"https://codeload.github.com/arthuro555/THNK/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509164,"owners_count":20950233,"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":["authoritative","authoritative-server","collaborate","framework","gamedev","gdevelop","gdevelop-extension","hacktoberfest","multiplayer","multiplayer-game","multiplayer-game-server","server","typescript"],"created_at":"2025-04-06T15:53:04.016Z","updated_at":"2025-04-06T15:53:04.574Z","avatar_url":"https://github.com/arthuro555.png","language":"TypeScript","funding_links":["https://ko-fi.com/arthuro555","https://github.com/sponsors/arthuro555"],"categories":[],"sub_categories":[],"readme":"# 🤔 THNK\n\n![The THNK Framework Banner](./banner.png \"He do be thonkin\")\n\nAn authoritative multiplayer games framework for the FLOSS engine GDevelop.\n\n## Links\n\n- [🌐 Website](https://thnk.cloud/)\n- [📰 Introduction blog post](https://bit.ly/thnk-introduction)\n- [📅 Roadmap](https://bit.ly/thnk-roadmap)\n- [💖 Support the project](https://ko-fi.com/arthuro555)\n- [📄 Documentation](https://thnk.cloud/docs/getting-started/)\n\n## Contributors\n\nThanks to all the contributors to THNK! Here is the full list of all contributors of all kinds to the project:\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://ko-fi.com/arthuro555\"\u003e\u003cimg src=\"https://storage.ko-fi.com/cdn/brandasset/kofi_s_logo_nolabel.png?s=100\" width=\"100px;\" alt=\"Ko-fi contributors\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKo-fi contributors\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#financial\" title=\"Financial\"\u003e💵\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/arthuro555\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/19349038?v=4?s=100\" width=\"100px;\" alt=\"Arthur Pacaud\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArthur Pacaud\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-arthuro555\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/arthuro555/THNK/commits?author=arthuro555\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/arthuro555/THNK/commits?author=arthuro555\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#blog-arthuro555\" title=\"Blogposts\"\u003e📝\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/MyNameIsRinax\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40387061?v=4?s=100\" width=\"100px;\" alt=\"Rinax\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRinax\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/arthuro555/THNK/issues?q=author%3AMyNameIsRinax\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Midhil457\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/73597906?v=4?s=100\" width=\"100px;\" alt=\"Leo_Red\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLeo_Red\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#design-Midhil457\" title=\"Design\"\u003e🎨\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Entr0py404\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/75917656?v=4?s=100\" width=\"100px;\" alt=\"Tim\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTim\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/arthuro555/THNK/commits?author=Entr0py404\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/triloute\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/45915223?v=4?s=100\" width=\"100px;\" alt=\"triloute\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003etriloute\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/arthuro555/THNK/commits?author=triloute\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://discord.io/wemg\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/67420178?v=4?s=100\" width=\"100px;\" alt=\"Emily Lemonly\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEmily Lemonly\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/arthuro555/THNK/commits?author=EmilyLemonly\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dartpk\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/84038852?v=4?s=100\" width=\"100px;\" alt=\"dartpk\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003edartpk\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/arthuro555/THNK/issues?q=author%3Adartpk\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/arthuro555/THNK/commits?author=dartpk\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n## Contributing\n\n### Installing\n\nTo install all dependencies, run `yarn`. You may use `npm`, but note that only a yarn lockfile will be provided and accepted in PRs.\nIf you have disabled postinstall scripts, run `yarn generate-protocol` to run the code generator on the flatbuffer files.\n\n### Building\n\nRun `yarn build` to execute the full build pipeline. You can also build individual parts with the other build scripts in package.json:\n\nBuilding THNK with `yarn build:thnk` and the adapters with `yarn build:adapters` outputs a bundle to the `dist` folder. `yarn build:extensions` automatically inserts those into the THNK extensions in `extensions`.\n\nTo test your changes, import the extension with your changes into GDevelop. If you make changes to the extension itself, don't forget to export it back to the `extensions` folder.\n\n### Submitting changes\n\nBefore submitting a PR, make sure that your code builds \u0026 fully functions within the extension, and that it passes both typescript \u0026 jest tests.\nRun `yarn ts \u0026\u0026 yarn test` to run both checks.\nMake sure the extensions in `extensions` are properly generated with the latest version of your code. In case of doubts, run `yarn build` again before committing.\n\n### Understanding the file structure\n\nThere are a few main folders that you need to keep in mind while contributing:\n\n- `extensions` - Contains the GDevelop extensions files. While most of the important code is in `code`, the extensions themselves need to be modified to add actions, conditions, etc. You also need them to actually use the built THNK code.\n- `protocol` - Contains FlatBuffers protocol definitions. Anything that transits between the server and client **must** be defined through a FlatBuffer `ServerMessage` or `ClientMessage`, depending on which side will be sending that message.\n  - After changing a file there, you need to run `yarn generate-protocol` to run codegen for the FlatBuffers files before using the modified interfaces in `code`\n- `types` - GDJS type definitions. They were generated automatically with TSC.\n- `docs` - The docusaurus website and documentation.\n- `scripts` - A few scripts used for building.\n- `code` - Contains all the THNK extension's typescript code. All imports are relative to this directory: `import \"server\";` would import `code/server`.\n  - `server` - All the server-relevant code.\n  - `client` - All the client-relevant code.\n  - `adapters` - Contains the different adapters' implementations.\n  - `types` - Useful type definitions: `global.d.ts` defines the `THNK` global namespace and `thnk.d.ts` overrides GDevelop type definitions with the additional properties THNK adds.\n  - `utils` - Misc. Code that is relevant for both server and client.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthuro555%2Fthnk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farthuro555%2Fthnk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farthuro555%2Fthnk/lists"}