{"id":13575940,"url":"https://github.com/openremote/openremote","last_synced_at":"2026-02-04T11:48:44.403Z","repository":{"id":37470685,"uuid":"50994619","full_name":"openremote/openremote","owner":"openremote","description":"100% open-source IoT Platform - Integrate your devices, create rules, and analyse and visualise your data","archived":false,"fork":false,"pushed_at":"2026-01-11T22:36:39.000Z","size":301474,"stargazers_count":1612,"open_issues_count":337,"forks_count":399,"subscribers_count":64,"default_branch":"master","last_synced_at":"2026-01-12T00:17:45.671Z","etag":null,"topics":["asset-management","building","dashboard","dataplatform","energy","energy-management","energy-monitor","fleet-management","fleet-telematics","iot","iot-platform","iot-projects","knx","mqtt","mqtt-broker","rules-engine","smartcity","websocket"],"latest_commit_sha":null,"homepage":"https://openremote.io","language":"Java","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/openremote.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-02-03T11:14:02.000Z","updated_at":"2026-01-11T22:36:42.000Z","dependencies_parsed_at":"2024-04-23T15:30:43.933Z","dependency_job_id":"641d42ae-b8b1-42dc-9750-a24454d65a68","html_url":"https://github.com/openremote/openremote","commit_stats":{"total_commits":4201,"total_committers":58,"mean_commits":72.43103448275862,"dds":0.7093549154963104,"last_synced_commit":"a165bd57aeee6bfac9a3e62193e632e4007a9077"},"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"purl":"pkg:github/openremote/openremote","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openremote%2Fopenremote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openremote%2Fopenremote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openremote%2Fopenremote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openremote%2Fopenremote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openremote","download_url":"https://codeload.github.com/openremote/openremote/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openremote%2Fopenremote/sbom","scorecard":{"id":112971,"data":{"date":"2025-08-04","repo":{"name":"github.com/openremote/openremote","commit":"2eea97c961e288fe8231e3da843d484345a5416a"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":5.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 11 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":9,"reason":"Found 28/30 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci_cd.yml:1","Warn: no topLevel permission defined: .github/workflows/provision-account.yml:1","Warn: no topLevel permission defined: .github/workflows/provision-host.yml:1","Warn: topLevel 'actions' permission set to 'write': .github/workflows/release.yml:23","Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:24","Warn: no topLevel permission defined: .github/workflows/start-stop-host.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1","Warn: binary detected: model/libs/mbknor-jackson-jsonschema_2.12-1.0.40-SNAPSHOT.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci_cd.yml:99"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":7,"reason":"dependency not pinned by hash detected -- score normalized to 7","details":["Warn: containerImage not pinned by hash: balena/manager.Dockerfile:1: pin your Docker image by updating registry.access.redhat.com/ubi9/openjdk-21-runtime to registry.access.redhat.com/ubi9/openjdk-21-runtime@sha256:06d60e73be11d96b4cedc4bd1807e503a6196e9b01be9e4405b6b6d3b816202d","Warn: containerImage not pinned by hash: deployment/Dockerfile:4: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Warn: containerImage not pinned by hash: manager/Dockerfile:1: pin your Docker image by updating registry.access.redhat.com/ubi9/openjdk-21-runtime to registry.access.redhat.com/ubi9/openjdk-21-runtime@sha256:06d60e73be11d96b4cedc4bd1807e503a6196e9b01be9e4405b6b6d3b816202d","Warn: containerImage not pinned by hash: manager/swarm.Dockerfile:2","Warn: containerImage not pinned by hash: manager/swarm.Dockerfile:4: pin your Docker image by updating openremote/manager:latest to openremote/manager:latest@sha256:7c0b77724571f1657070de18680c308f9d3a8291bbc49387b623e2c350b52648","Info:  11 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:  12 out of  12 third-party GitHubAction dependencies pinned","Info:   0 out of   5 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"30 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-pppg-cpfq-h7wr","Warn: Project is vulnerable to: GHSA-hw8r-x6gr-5gjp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-5fg8-2547-mr8q","Warn: Project is vulnerable to: GHSA-crh6-fp67-6883"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T15:38:54.026Z","repository_id":37470685,"created_at":"2025-08-15T15:38:54.026Z","updated_at":"2025-08-15T15:38:54.026Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28480056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["asset-management","building","dashboard","dataplatform","energy","energy-management","energy-monitor","fleet-management","fleet-telematics","iot","iot-platform","iot-projects","knx","mqtt","mqtt-broker","rules-engine","smartcity","websocket"],"created_at":"2024-08-01T15:01:05.648Z","updated_at":"2026-01-16T16:40:08.550Z","avatar_url":"https://github.com/openremote.png","language":"Java","readme":"# OpenRemote\n\n[![CI/CD](https://github.com/openremote/openremote/actions/workflows/ci_cd.yml/badge.svg?branch=master\u0026event=push)](https://github.com/openremote/openremote/actions/workflows/ci_cd.yml?query=event%3Apush+branch%3Amaster)\n[![Open Source? Yes!](https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github)](https://github.com/Naereen/badges/)\n\u003c!-- ![tests](https://github.com/openremote/openremote/workflows/tests/badge.svg) --\u003e\n\n[Source](https://github.com/openremote/openremote) **·** [Documentation](https://docs.openremote.io) **·** [Forum](https://forum.openremote.io) **·** [Issues](https://github.com/openremote/openremote/issues) **·** [Docker Images](https://hub.docker.com/u/openremote/) **·** [OpenRemote Inc.](https://openremote.io)\n\nWelcome to OpenRemote; an intuitive user-friendly 100% open source IoT platform. You can build a complete IoT device management solution including: device management and auto provisioning, customisation of asset types, automation via when-then, flow, javascript and groovy rules, data analytics, connectivity via several protocol agents and manager APIs (e.g. MQTT broker, HTTP/REST, WS), Multi-tenancy (realms), Users and roles management, Edge gateway, Front-end UI web components and consoles, and an Insights dashboard builder. \n\nAs the code base is 100% open source, applications are limitless. Here's an architecture overview:\n\n\u003cimg src=\"https://openremote.io/wp-content/uploads/2023/09/OpenRemote_Architecture-scaled.jpg\" width=\"900\"\u003e\n\n## Quickstart\n\nYou can quickly try the online demo with restricted access, login credentials are `smartcity:smartcity`:\n\n[Online demo](https://demo.openremote.app/manager/?realm=smartcity)\n\nThe quickest way to get your own environment with full access is to make use of our docker images (both `amd64` and `arm64` are supported). \n1. Make sure you have [Docker Desktop](https://www.docker.com/products/docker-desktop) installed (v18+). \n2. Download the docker compose file:\n[OpenRemote Stack](https://raw.githubusercontent.com/openremote/openremote/master/docker-compose.yml) (Right click 'Save link as...')\n3. In a terminal `cd` to where you just saved the compose file and then run:\n```\ndocker compose pull\ndocker compose -p openremote up\n```\nIf all goes well then you should now be able to access the OpenRemote Manager UI at [https://localhost](https://localhost). You will need to accept the self-signed \ncertificate, see [here](https://www.technipages.com/google-chrome-bypass-your-connection-is-not-private-message) for details how to do this in Chrome (similar for other browsers).\n\n\n### Login credentials\nUsername: admin  \nPassword: secret\n\n### Changing host and/or port\nThe URL you use to access the system is important, the default is configured as `https://localhost` if you are using a VM then you will need to set the `OR_HOSTNAME` environment variable, so if for example you will be accessing using `https://192.168.1.1` then use the following startup command:\n\nBASH: \n```shell\nOR_HOSTNAME=192.168.1.1 docker-compose -p openremote up -d\n```\nor\n\nCMD:\n```shell\ncmd /C \"set OR_HOSTNAME=192.168.1.1 \u0026\u0026 docker-compose -p openremote up -d\"\n```\n\n## What next\nTry creating assets, agents, rules, users, realms, etc. using the Manager UI, please refer to the [documentation](https://docs.openremote.io) for more information, some things to try:\n\n- [Manager UI Guide](https://docs.openremote.io/docs/user-guide/manager-ui/) - Learn more about the User Interface\n- [Creating an HTTP Agent tutorial](https://docs.openremote.io/docs/tutorials/open-weather-api-using-http-agent) - Connect to an online weather service\n- [Custom Deployment](https://docs.openremote.io/docs/user-guide/deploying/custom-deployment) - Style the Manager to your brand\n- [Setting up an IDE](https://docs.openremote.io/docs/developer-guide/setting-up-an-ide) - Set up your development environment\n- [Working on the UI](https://docs.openremote.io/docs/developer-guide/working-on-ui-and-apps) - Create a web application compatible with OpenRemote\n- [Creating a custom project](https://docs.openremote.io/docs/developer-guide/creating-a-custom-project) - Create a project with custom protocols, asset types and setup code\n\n## Where's the data stored?\nPersistent data is stored in a PostgreSQL DB which is stored in the `openremote_postgresql-data` docker volume which is durably stored independently of the running containers (see all with `docker volume ls`).\nNote that historical attribute data is purged daily based on value of `OR_DATA_POINTS_MAX_AGE_DAYS`; this value can also be overridden for individual attributes by using the `dataPointsMaxAgeDays` configuration item.\nSee the [Developer Guide](https://docs.openremote.io/docs/developer-guide/useful-commands-and-queries/#backuprestore-openremote-db) for details on making backups of the database.\n\n\n## Contributing to OpenRemote\n\nFor information and how to set up a development environment, see the [Developer Guide](https://docs.openremote.io/docs/category/developer-guide).\n\nWe work with Java, Groovy, TypeScript, Gradle, Docker, and a wide range of APIs and protocol implementations.\n\nWe follow the [GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow) workflow with tags and releases for published versions of our components; when working on the codebase create descriptive branch names (e.g. `feature/cool_feature_x`, `hotfix/flux_capacitor`, `issue/123`, etc.).\n\nWhen your changes are complete then create a Pull Request ensuring that your branch is up-to-date with the source branch and that code changes are covered by tests and that the full test suite passes.\n\n## Discuss OpenRemote\n\nJoin us on the [community forum](https://forum.openremote.io/).\n","funding_links":[],"categories":["Online ML Learning Resources","Java","Apps","Tools","Tools \u0026 Platforms","Edge / Fog / IoT"],"sub_categories":["Interfaces","IoT","Middleware"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenremote%2Fopenremote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenremote%2Fopenremote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenremote%2Fopenremote/lists"}