{"id":25480091,"url":"https://github.com/grashjs/cmms","last_synced_at":"2025-10-26T08:37:34.350Z","repository":{"id":278095985,"uuid":"934441434","full_name":"Grashjs/cmms","owner":"Grashjs","description":"#1 Locally hosted CMMS web application that allows you to manage maintenance","archived":false,"fork":false,"pushed_at":"2025-02-18T01:01:23.000Z","size":8427,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-02-18T01:26:56.709Z","etag":null,"topics":["cmms","expo","gmao","java","maintenance","react","react-native","spring-boot"],"latest_commit_sha":null,"homepage":"","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/Grashjs.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":"2025-02-17T20:53:50.000Z","updated_at":"2025-02-18T01:01:27.000Z","dependencies_parsed_at":"2025-02-18T01:38:02.652Z","dependency_job_id":null,"html_url":"https://github.com/Grashjs/cmms","commit_stats":null,"previous_names":["grashjs/cmms"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Grashjs%2Fcmms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Grashjs%2Fcmms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Grashjs%2Fcmms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Grashjs%2Fcmms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Grashjs","download_url":"https://codeload.github.com/Grashjs/cmms/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239495863,"owners_count":19648390,"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":["cmms","expo","gmao","java","maintenance","react","react-native","spring-boot"],"created_at":"2025-02-18T15:27:20.861Z","updated_at":"2025-10-26T08:37:34.318Z","avatar_url":"https://github.com/Grashjs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"frontend/public/static/images/logo/logo.png\" width=\"80\"\u003e\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eAtlas CMMS\u003c/h1\u003e\n\n[Atlas CMMS](https://github.com/grashjs/cmms) is a powerful, self-hosted maintenance management system designed for both\nweb and mobile platforms using Docker. It simplifies and automates the management of maintenance activities, making it\nideal for IT managers or developers looking to implement solutions that keep their organization's assets running\nsmoothly.\nThink of it like **Jira for technicians**.\n\n**Example industries**\n\n- Facilities Managers (buildings, property, real estate)\n- Manufacturing/Production Teams (machinery and equipment)\n- Healthcare Facilities (medical equipment maintenance)\n- Hospitality Managers (hotels and resorts)\n- Public Sector (infrastructure and public buildings)\n- Educational Institutions (campus maintenance)\n- Utility Companies (power, water, and energy systems)\n\n**Demo website**\n\n- https://atlas-cmms.com\n\n**Screenshots**:\n\u003cdiv align=\"center\"\u003e\n\n![work_orders_screenshot.png](images/work_orders_screenshot.png)\n\n![](https://i.ibb.co/7tGYCtv/Screenshot-502.png)\n\n\u003cimg src=\"https://i.ibb.co/B39dVjC/Screenshot-20230320-110652.jpg\" width=\"300\"/\u003e\n\u003c/div\u003e\n\n## ⚡ **Features**\n\n### Work Orders \u0026 Maintenance\n\n- 📝 Create, assign, and track work orders.\n- ⏱️ Log time, set priorities, and track history.\n- 🤖 Automate work orders with triggers.\n- 📊 Export reports and view analytics.\n\n### Analytics \u0026 Reporting\n\n- 💼 Work order compliance and cost analysis.\n- 🛠️ Equipment downtime and reliability insights.\n- 💵 Cost trends and labor tracking.\n\n### Equipment \u0026 Inventory\n\n- ⚙️ Track equipment, downtime, and maintenance costs.\n- 📦 Manage inventory with stock alerts.\n- 🛒 Automate purchase orders and approvals.\n\n### User \u0026 Workflow Management\n\n- 👥 Assign tasks to teams or service providers.\n- 🧑‍💼 Customizable user roles and permissions.\n- 🔄 Define workflows with automation logic.\n\n### Locations \u0026 Requests\n\n- 📍 Manage locations with Google Maps integration.\n- 📑 Create and track service requests.\n\nYou can check out the [complete list of features](api/Current%20features.pdf).\n\nWe'd love to have **new contributors**, so feel free to join us!  \n⭐ **Star this repo to support us!**\n\n## Self Host / Run locally\n\n### Set environment variables\n\nDownload this file [.env.example](.env.example), rename it to `.env` and configure the environment variables inside it.\nDo not delete the .env file\n\n| Name                        | Required | Description                                                                                                                                                                                                                                                                                                 | Default Value         |\n|-----------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|\n| POSTGRES_USER               | Yes      | Postgres user                                                                                                                                                                                                                                                                                               | rootUser              |\n| POSTGRES_PWD                | Yes      | Postgres password                                                                                                                                                                                                                                                                                           | mypassword            |\n| MINIO_USER                  | Yes      | MiniO user                                                                                                                                                                                                                                                                                                  | minio                 |\n| MINIO_PWD                   | Yes      | MiniO password                                                                                                                                                                                                                                                                                              | minio123              |\n| ENABLE_EMAIL_NOTIFICATIONS  | No       | Enables or disables email notifications (`true` or `false`). Requires SMTP if enabled.                                                                                                                                                                                                                      | false                 |\n| INVITATION_VIA_EMAIL        | No       | Enables or disables user invitations via email (`true` or `false`). Requires SMTP and ENABLE_EMAIL_NOTIFICATIONS if enabled.                                                                                                                                                                                | false                 |\n| SMTP_HOST                   | No       | The SMTP host                                                                                                                                                                                                                                                                                               | smtp.gmail.com        |\n| SMTP_PORT                   | No       | The SMTP port                                                                                                                                                                                                                                                                                               | 587                   |\n| SMTP_USER                   | No       | The SMTP username. If using Gmail, [Learn how to create an app password](https://support.google.com/accounts/answer/185833?hl=en)                                                                                                                                                                           | (empty)               |\n| SMTP_PWD                    | No       | The SMTP password. If using Gmail, [Learn how to create an app password](https://support.google.com/accounts/answer/185833?hl=en)                                                                                                                                                                           | (empty)               |\n| JWT_SECRET_KEY              | No       | JWT secret key                                                                                                                                                                                                                                                                                              | your_jwt_secret       |\n| ALLOWED_ORGANIZATION_ADMINS | No       | Comma separated email addresses allowed to sign up without being invited, hence allowed to create organizations. Empty means everyone can create an organization                                                                                                                                            | (empty)               |\n| GOOGLE_KEY                  | No       | Google Maps API key                                                                                                                                                                                                                                                                                         | (empty)               |\n| GOOGLE_TRACKING_ID          | No       | Google Analytics tracking ID                                                                                                                                                                                                                                                                                | (empty)               |\n| PUBLIC_FRONT_URL            | No       | Frontend URL in this format `http://your.public.ip:3000` . Multiple addresses may open the website but only this one will work with the backend because of CORS.                                                                                                                                            | http://localhost:3000 |\n| PUBLIC_API_URL              | No       | Public API URL in this format `http://your.public.ip:8080`                                                                                                                                                                                                                                                  | http://localhost:8080 |\n| STORAGE_TYPE                | No       | Type of storage either local MinIO or Google Cloud Storage `gcp` or `minio`                                                                                                                                                                                                                                 | minio                 |\n| PUBLIC_MINIO_ENDPOINT       | No       | Public Mini endpoint in format `http://public.ip:9000`                                                                                                                                                                                                                                                      | http://localhost:9000 |\n| GCP_JSON                    | No       | The Google Cloud JSON key after following [these instructions](./GCP-setup.md).                                                                                                                                                                                                                             | (empty)               |\n| GCP_PROJECT_ID              | No       | The Google Cloud project ID, also found in the `GCP_JSON` file.                                                                                                                                                                                                                                             | (empty)               |\n| GCP_BUCKET_NAME             | No       | GCP Bucket Name                                                                                                                                                                                                                                                                                             | (empty)               |\n| MAIL_RECIPIENTS             | No       | Comma-separated email addresses of the super admins where to send information emails like new signups. You can provide your email address.                                                                                                                                                                  | (empty)               |\n| LICENSE_KEY                 | No       | Atlas CMMS license key to get access to advanced features like SSO.                                                                                                                                                                                                                                         | (empty)               |\n| MUI_X_LICENSE               | No       | [Mui Pro](https://mui.com/store/items/mui-x-pro) license key. 1 dev and 1 year license is perpetual in production                                                                                                                                                                                           | (empty)               |\n| ENABLE_SSO                  | No       | Enables or disables SSO. (`true` or `false` ) Requires `OAUTH2_PROVIDER`, `OAUTH2_CLIENT_ID` and `OAUTH2_CLIENT_SECRET`. Make sure to add `PUBLIC_FRONT_URL` as authorized origin and `${PUBLIC_API_URL}/oauth2/callback/${OAUTH2_PROVIDER}` as authorized redirection URI in your Oauth2 provider settings | false                 |\n| OAUTH2_PROVIDER             | No       | Oauth2 provider `google` or `microsoft`                                                                                                                                                                                                                                                                     | (empty)               |\n| OAUTH2_CLIENT_ID            | No       | Oauth2 Client ID                                                                                                                                                                                                                                                                                            | (empty)               |\n| OAUTH2_CLIENT_SECRET        | No       | Oauth2 client secret                                                                                                                                                                                                                                                                                        | (empty)               |\n| LOGO_PATHS                  | No       | Logo names in this format. `{\"dark\": \"dark.png\",\"white\": \"white.png\", }`. Add 2 logos in a folder named `logo` in the same folder as the `docker-compose.yml`.  Needs a license.                                                                                                                            | (empty)               |\n| CUSTOM_COLORS               | No       | Custom colors in JSON format. All colors should be in hexadecimal format. `{\"emailColors\":\"#00A0E3\",\"primary\":\"#EE4B2B\",\"secondary\":\"#6E759F\",\"success\":\"#57CA22\",\"warning\":\"#FFA319\",\"error\":\"#FF1943\",\"info\":\"#33C2FF\",\"black\":\"#223354\",\"white\":\"#ffffff\",\"primaryAlt\":\"#000C57\"}`                       | (empty)               |\n| BRAND_CONFIG                | No       | Brand config for white labeling. Requires license. In format `{ \"name\": \"Quantum Labs\", \"shortName\": \"QL\", \"website\": \"https://example.io\", mail: \"contact@example.io\" }`                                                                                                                                   | (empty)               |\n\nFor production deployments, it’s strongly recommended to use unique credentials and not rely on defaults.\n\n#### For remote servers\n\n- You need to update every env variable starting with `PUBLIC_`.\n\n- Open ports if necessary: make sure to open `PUBLIC_API_URL`, `PUBLIC_FRONT_URL` ports numbers by default\n  8080, and 3000. Same for `PUBLIC_MINIO_ENDPOINT` port 9000 if you use Minio.\n- Make sure the backend and frontend use the same protocol: https or http\n\n### Run\n\nDownload this [docker-compose.yml file](./docker-compose.yml). At this point you should have 2 files `.env` and\n`docker-compose.yml`.\nNow run\n\n```sh\ndocker-compose up -d\n```\n\nGo to http://localhost:3000 or your custom `PUBLIC_FRONT_URL`\n\nCelebrate on how easy this was\n\n### Mobile app\n\nYou can use the [live Android app](https://play.google.com/store/apps/details?id=com.atlas.cmms) and configure it with\nyour custom backend server url\n\n## Getting help\n\n### Docs\n\n[Usage guide](https://docs.atlas-cmms.com)\n\n[Super admin docs](./dev-docs)\n\n[Join our Discord server](https://discord.gg/cHqyVRYpkA)\n\nIf you still have questions after reading the docs, concerns, bug reports, etc, please file an issue in this\nrepository's Issue Tracker or send an\nemail at [contact@atlas-cmms.com](mailto:contact@atlas-cmms.com).\n\n## Supported languages\n\n- English\n- Spanish\n- French\n- German\n- Turkish\n- Polish\n- Portuguese (Brazil)\n- Arabic\n- Swedish\n- Italian\n\n## 🏗️ **Tech Stack**\n\n- [Api](api) with java Spring Boot\n- [Website](frontend) with React/Typescript\n- [Mobile](mobile) with React Native.\n\n## Need Professional Help?\n\nDon't want to handle the maintenance and management yourself? We offer a complete done-for-you\nservice. [Please reach out to us](mailto:contact@atlas-cmms.com)\n\n## 🤝 Looking to contribute?\n\nWe welcome contributions! You can help by:\n\n- ✅ Reporting bugs\n- ✅ Suggesting new features\n- ✅ Improving documentation\n- ✅ Submitting pull requests\n\nCheck CONTRIBUTING.md inside each subproject for details.\n\nYou can also join our [Discord server](https://discord.gg/cHqyVRYpkA)\n\n## Open source licensing info\n\nAtlas CMMS is dual-licensed:\n\n- [GPLv3 License](./LICENSE) — Free and open source.\n- [Commercial License](./COMMERCIAL_LICENSE.MD) — Required for white labeling, custom branding, and advanced features\n  like SSO.\n\nTo enable commercial features, you must set a valid `LICENSE_KEY`.  \nContact us at [contact@atlas-cmms.com](mailto:contact@atlas-cmms.com) to purchase a commercial license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrashjs%2Fcmms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrashjs%2Fcmms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrashjs%2Fcmms/lists"}