{"id":13815845,"url":"https://github.com/factoriolab/factoriolab","last_synced_at":"2026-06-08T07:06:02.081Z","repository":{"id":37233787,"uuid":"251332078","full_name":"factoriolab/factoriolab","owner":"factoriolab","description":"Angular-based calculator for factory games like Factorio and Dyson Sphere Program","archived":false,"fork":false,"pushed_at":"2025-05-12T20:54:37.000Z","size":2196829,"stargazers_count":647,"open_issues_count":66,"forks_count":146,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-12T21:40:59.793Z","etag":null,"topics":["angular","calculator","nodejs"],"latest_commit_sha":null,"homepage":"https://factoriolab.github.io","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/factoriolab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"dcbroad3","ko_fi":"dcbroad3"}},"created_at":"2020-03-30T14:35:07.000Z","updated_at":"2025-05-12T05:58:19.000Z","dependencies_parsed_at":"2023-10-13T03:23:19.210Z","dependency_job_id":"bdf89dda-2aea-413d-a099-c361603b44ec","html_url":"https://github.com/factoriolab/factoriolab","commit_stats":null,"previous_names":["factoriolab/factorio-lab"],"tags_count":123,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factoriolab%2Ffactoriolab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factoriolab%2Ffactoriolab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factoriolab%2Ffactoriolab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/factoriolab%2Ffactoriolab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/factoriolab","download_url":"https://codeload.github.com/factoriolab/factoriolab/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254314202,"owners_count":22050190,"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":["angular","calculator","nodejs"],"created_at":"2024-08-04T04:04:13.968Z","updated_at":"2026-06-08T07:06:02.074Z","avatar_url":"https://github.com/factoriolab.png","language":"TypeScript","funding_links":["https://github.com/sponsors/dcbroad3","https://ko-fi.com/dcbroad3","https://ko-fi.com/dcbroad3)!"],"categories":["TypeScript"],"sub_categories":[],"readme":"# FactorioLab\n\n[![build](https://github.com/factoriolab/factoriolab/actions/workflows/build.yml/badge.svg)](https://github.com/factoriolab/factoriolab/actions/workflows/build.yml) [![tests](https://github.com/factoriolab/factoriolab/actions/workflows/tests.yml/badge.svg)](https://github.com/factoriolab/factoriolab/actions/workflows/tests.yml)\n\nThis is the repository for the [FactorioLab](https://factoriolab.github.io) project, a tool for calculating resource and factory requirements for factory games.\n\n| Supported games                                                   |                                                              |                                                                            |\n| ----------------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------------------------------------------------- |\n| [Factorio](https://factorio.com)                                  | [Calculator](https://factoriolab.github.io/factorio)         | [Steam](https://store.steampowered.com/app/427520/Factorio/)               |\n| Dyson Sphere Program                                              | [Calculator](https://factoriolab.github.io/dsp)              | [Steam](https://store.steampowered.com/app/1366540/Dyson_Sphere_Program/)  |\n| [Satisfactory](https://www.satisfactorygame.com/)                 | [Calculator](https://factoriolab.github.io/satisfactory)     | [Steam](https://store.steampowered.com/app/526870/Satisfactory/)           |\n| [Captain of Industry](https://www.captain-of-industry.com/)       | [Calculator](https://factoriolab.github.io/coi)              | [Steam](https://store.steampowered.com/app/1594320/Captain_of_Industry/)   |\n| [Techtonica](https://techtonicagame.com/)                         | [Calculator](https://factoriolab.github.io/techtonica)       | [Steam](https://store.steampowered.com/app/1457320/Techtonica/)            |\n| Final Factory                                                     | [Calculator](https://factoriolab.github.io/final-factory)    | [Steam](https://store.steampowered.com/app/1383150/Final_Factory/)         |\n| [Factor Y](https://buckmartin.de/products/factor-y.html)          | [Calculator](https://factoriolab.github.io/fay)              | [Steam](https://store.steampowered.com/app/2220850?utm_source=FactorioLab) |\n| [Foundry](https://www.paradoxinteractive.com/games/foundry/about) | [Calculator](https://factoriolab.github.io/foundry)          | [Steam](https://store.steampowered.com/app/983870/FOUNDRY/)                |\n| Outworld Station                                                  | [Calculator](https://factoriolab.github.io/outworld-station) | [Steam](https://store.steampowered.com/app/3242950/Outworld_Station/)      |\n\nThis project is intended to build on the features of the Kirk McDonald [Factorio Calculator](https://kirkmcdonald.github.io) ([GitHub](https://github.com/KirkMcDonald/kirkmcdonald.github.io)). It is built from the ground up using Angular, Redux, and TypeScript.\n\n**To submit suggestions or issues,** please check out the [issues page](https://github.com/factoriolab/factoriolab/issues).\n\n**To discuss the calculator,** join the [Discord](https://discord.gg/N4FKV687x2).\n\n**If you love FactorioLab,** consider supporting it by [buying me a ☕](https://ko-fi.com/dcbroad3)!\n\n## Running online\n\nThe calculator can be found at \u003chttps://factoriolab.github.io\u003e.  \nThe staging environment, for testing pull requests, can be found at \u003chttps://factoriolab.github.io/staging\u003e.\n\n## Running locally\n\nTo run this project locally:\n\n1. Install [NodeJS](https://nodejs.org/en/)\n1. Install dependencies, using `npm ci`\n1. Build and serve the project, using `npm start`\n1. Open a browser at \u003chttp://localhost:4200\u003e\n\nThe app will reload automatically if source code is changed.\n\n## Running tests\n\nTo run the automated unit tests:\n\n1. Install NodeJs, Angular CLI, and the dependencies as described above\n2. Build and run the tests, using `npm test`\n\n## Contributing language data\n\nLanguage data is stored in the [i18n](./public/i18n/) folder. Translations are managed via an automated script. The English file, [en.json](./public/i18n/en.json), is the main translation data file; any keys added to that file will be added to all other files, and any keys missing from that file will be removed from other files.\n\n### Setup\n\nIn order to fully contribute, you must first fork FactorioLab in GitHub and clone your fork. If you are not experienced with GitHub and git, you are also welcome to copy and modify the raw JSON files, and share them via the [Discord](https://discord.gg/N4FKV687x2).\n\n### Updating files\n\nThe main script that maintains translation data is `npm run sync-i18n`. This command:\n\n1. Sorts all of the translation keys in all files, including the English file\n1. Removes any translation keys in non-English data files that are not found in the English file\n1. Adds English translation values to non-English data files where they are missing\n\nAs such, one of the best ways to contribute is to browse the non-English files and replace any English strings with a proper translation, or improve existing translations.\n\n### Adding a new language\n\nIn order to add support for a new language, there are a few additional steps.\n\n1. Add a new file in the `i18n` folder, using the localization key for the language. This is usually a two-letter locale code but may include a country code as well where relevant (e.g. pt-BR is Brazilian Portuguese).\n1. Enter `{}` in the file for an empty JSON object.\n1. Run `npm run sync-i18n`. This should fill in the file with English translations.\n1. Replace the English strings with translations.\n1. Add the code (which should match the file name) to the Language string union type in [language.ts](./src/translate/language.ts)\n1. Add the langage as an `Option` in the `languageOptions` array in the same file.\n1. Open a Pull Request with your changes.\n\nThanks for your help in improving FactorioLab!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffactoriolab%2Ffactoriolab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffactoriolab%2Ffactoriolab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffactoriolab%2Ffactoriolab/lists"}