{"id":23087721,"url":"https://github.com/maibornwolff/retro","last_synced_at":"2025-08-16T07:30:38.927Z","repository":{"id":39565965,"uuid":"133424444","full_name":"MaibornWolff/retro","owner":"MaibornWolff","description":"A self-hostable web application designed for remote retrospectives","archived":false,"fork":false,"pushed_at":"2024-01-24T14:37:50.000Z","size":17504,"stargazers_count":35,"open_issues_count":30,"forks_count":10,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-01-24T17:06:37.716Z","etag":null,"topics":["board","nodejs","organisation","planning-poker","react","remote","remote-retrospectives","retro","retrospectives","socket-io","typescript"],"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/MaibornWolff.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"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}},"created_at":"2018-05-14T21:37:35.000Z","updated_at":"2024-01-25T21:32:30.363Z","dependencies_parsed_at":"2024-01-25T21:42:37.656Z","dependency_job_id":null,"html_url":"https://github.com/MaibornWolff/retro","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaibornWolff%2Fretro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaibornWolff%2Fretro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaibornWolff%2Fretro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MaibornWolff%2Fretro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MaibornWolff","download_url":"https://codeload.github.com/MaibornWolff/retro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230019773,"owners_count":18160599,"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":["board","nodejs","organisation","planning-poker","react","remote","remote-retrospectives","retro","retrospectives","socket-io","typescript"],"created_at":"2024-12-16T19:59:59.184Z","updated_at":"2024-12-16T19:59:59.961Z","avatar_url":"https://github.com/MaibornWolff.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Retro - Reflect, Refine, Repeat\n\n![github_workflow](https://github.com/MaibornWolff/retro/actions/workflows/ci.yml/badge.svg) ![GitHub release](https://img.shields.io/github/release/yduman/retro.svg?style=flat-square) ![GitHub](https://img.shields.io/github/license/yduman/retro.svg?style=flat-square) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)\n\n## What is Retro?\n\nRetro is a tool that is used for retrospectives and planning poker sessions. The goal of Retro is to have an easy to use\nand secure way of having retro and planning poker sessions.\n\nRetro uses a peer-to-peer approach, where all communication including retro and poker information is shared between\nusers only and never reaches a backend server. The backend server is only used for signaling, which is the initial\nhandshake between the participants in a room. This is possible by following the [WebRTC](https://webrtc.org/) protocol.\n\n## Retrospective\n\n![retro_example](./assets/retro_example_page.png)\n\n## Planning Poker\n\n![planning_poker_example](./assets/poker_example_page.png)\n\n## Requirements\n\n- Latest Node.js LTS version\n- NPM version \u003e= 7\n\n## Hosting\n\nThis application requires three services to be running and configured correctly.\n\n| Docker image                                                       | Exposed port |\n| ------------------------------------------------------------------ | ------------ |\n| [Retro Frontend](https://hub.docker.com/r/retroapp/retro-frontend) | 80           |\n| [Retro Backend](https://hub.docker.com/r/retroapp/retro-backend)   | 3001         |\n| [Signaling Server](https://hub.docker.com/r/peerjs/peerjs-server)  | 9000         |\n\n### WebRTC\n\nBy default, the clients identify the IP address of the other peers by using a public STUN server by Google. A TURN\nserver is not provided by default and must be hosted additionally. The frontend can be configured to overwrite the ice\nserver urls.\n\n### Environment variables example\n\n#### Frontend\n\n- RETRO_MAX_VOTE_COUNT = 3\n- BACKEND_PROTOCOL = \"https\"\n- BACKEND_HOST = \"my-api-domain.com\"\n- BACKEND_PORT = 443\n- SIGNALING_SERVER_PROTOCOL = \"https\"\n- SIGNALING_SERVER_HOST = \"my-signaling-domain.com\"\n- SIGNALING_SERVER_PORT = 443\n- ICE_SERVER_URLS = \"stun://stun.l.google.com:19302,turn://user:password@test.turn.server:1914\"\n\n#### Backend\n\n- CORS_ORIGIN = \"my-api-domain.com,my-signaling-domain.com\"\n\n## Development\n\nQuick start guide can be found [here](./documentation/development.md)\n\n## Contributing\n\nFor information on how to contribute,\nsee [Contributing](https://github.com/MaibornWolff/retro/blob/master/CONTRIBUTING.md)\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\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://github.com/mrpatpat\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2622069?v=4?s=100\" width=\"100px;\" alt=\"Adrian Endrich\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAdrian Endrich\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=mrpatpat\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/NearW\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12533626?v=4?s=100\" width=\"100px;\" alt=\"Ben Willenbring\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBen Willenbring\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=NearW\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-NearW\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-NearW\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#projectManagement-NearW\" title=\"Project Management\"\u003e📆\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ClaasBusemann\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/65392929?v=4?s=100\" width=\"100px;\" alt=\"Claas Busemann\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eClaas Busemann\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=ClaasBusemann\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/sillydomnom\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18489820?v=4?s=100\" width=\"100px;\" alt=\"Dominik Schumann\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDominik Schumann\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=sillydomnom\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dostulataa\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/7762085?v=4?s=100\" width=\"100px;\" alt=\"Lukas Richter\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLukas Richter\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=dostulataa\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-dostulataa\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-dostulataa\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#projectManagement-dostulataa\" title=\"Project Management\"\u003e📆\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Hall-Ma\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/72517530?v=4?s=100\" width=\"100px;\" alt=\"Maria Hallmann\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaria Hallmann\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=Hall-Ma\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=Hall-Ma\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/2mawi2\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/17811051?v=4?s=100\" width=\"100px;\" alt=\"Marius Wichtner\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarius Wichtner\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=2mawi2\" title=\"Code\"\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/xWorkerBeex\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8974341?v=4?s=100\" width=\"100px;\" alt=\"Martin Schröder\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMartin Schröder\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=xWorkerBeex\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/PaulaBre\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/65403162?v=4?s=100\" width=\"100px;\" alt=\"PaulaBre\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePaulaBre\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=PaulaBre\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tobim-dev\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/15176413?v=4?s=100\" width=\"100px;\" alt=\"Tobias\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTobias\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=tobim-dev\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://yduman.github.io/\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/11931774?v=4?s=100\" width=\"100px;\" alt=\"Yadullah Duman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYadullah Duman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=yduman\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/MaibornWolff/retro/pulls?q=is%3Apr+reviewed-by%3Ayduman\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#ideas-yduman\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ravensinth\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1155772?v=4?s=100\" width=\"100px;\" alt=\"ravensinth\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eravensinth\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=ravensinth\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n        \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Nomandes\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/15905668?v=4?s100\" width=\"100px;\" alt=\"Manuel Lehé\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eManuel Lehé\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/MaibornWolff/retro/commits?author=Nomandes\" 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\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.\nContributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaibornwolff%2Fretro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaibornwolff%2Fretro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaibornwolff%2Fretro/lists"}