{"id":36464621,"url":"https://github.com/naueramant/mir","last_synced_at":"2026-01-12T00:01:15.536Z","repository":{"id":64306057,"uuid":"237011454","full_name":"naueramant/mir","owner":"naueramant","description":"YAML configurable web dashboard viewer written in Go","archived":false,"fork":false,"pushed_at":"2024-06-15T09:28:37.000Z","size":5170,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-15T21:49:56.097Z","etag":null,"topics":["basic-auth","cronjobs","css-injection","dashboard","devops","go","golang","grafana","js-injection","web-dashboard","yaml"],"latest_commit_sha":null,"homepage":"","language":"Go","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/naueramant.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":"2020-01-29T15:09:27.000Z","updated_at":"2024-06-15T09:26:05.000Z","dependencies_parsed_at":"2024-06-20T14:30:41.249Z","dependency_job_id":"1d923599-90af-4a5c-90b8-7100e244eaf2","html_url":"https://github.com/naueramant/mir","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/naueramant/mir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naueramant%2Fmir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naueramant%2Fmir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naueramant%2Fmir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naueramant%2Fmir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naueramant","download_url":"https://codeload.github.com/naueramant/mir/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naueramant%2Fmir/sbom","scorecard":{"id":676251,"data":{"date":"2025-08-11","repo":{"name":"github.com/naueramant/mir","commit":"6058521e54d28a139b056eb8ffe65f43fbd3e8f8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.1,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yaml: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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/naueramant/mir/release.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yaml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/naueramant/mir/release.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yaml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/naueramant/mir/release.yaml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.0.4 not signed: https://api.github.com/repos/naueramant/mir/releases/160613847","Warn: release artifact v0.0.3 not signed: https://api.github.com/repos/naueramant/mir/releases/51598657","Warn: release artifact v0.0.2 not signed: https://api.github.com/repos/naueramant/mir/releases/29806390","Warn: release artifact v0.0.1 not signed: https://api.github.com/repos/naueramant/mir/releases/28225419","Warn: release artifact v0.0.4 does not have provenance: https://api.github.com/repos/naueramant/mir/releases/160613847","Warn: release artifact v0.0.3 does not have provenance: https://api.github.com/repos/naueramant/mir/releases/51598657","Warn: release artifact v0.0.2 does not have provenance: https://api.github.com/repos/naueramant/mir/releases/29806390","Warn: release artifact v0.0.1 does not have provenance: https://api.github.com/repos/naueramant/mir/releases/28225419"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T21:35:16.544Z","repository_id":64306057,"created_at":"2025-08-21T21:35:16.544Z","updated_at":"2025-08-21T21:35:16.544Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28328659,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T22:11:01.104Z","status":"ssl_error","status_checked_at":"2026-01-11T22:10:58.990Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["basic-auth","cronjobs","css-injection","dashboard","devops","go","golang","grafana","js-injection","web-dashboard","yaml"],"created_at":"2026-01-12T00:01:14.787Z","updated_at":"2026-01-12T00:01:15.519Z","avatar_url":"https://github.com/naueramant.png","language":"Go","readme":"# Mir\n\nYAML configurable web dashboard viewer written in Go\n\n## Features\n\n- Fully declarable in YAML\n- Multiple tabs cycling\n- Basic Auth login\n- Injection of custom CSS and JS\n- Cron jobs\n  - System commands\n  - Message flashing\n- Detect failed page loads and retry\n\n## About\n\nMir is an easy and consistent way of configuring web driven dashboards originally created to run on a Raspberry PI connected to a TV and display dashboards such a grafana etc.\n\nMir is fully declarable in YAML and is therefor easy to version control and copy to new screens.\n\n## Deployment\n\nBinary releases can be found in [releases](https://github.com/naueramant/mir/releases).\n\nThe system where Mir will be running needs Chrome or Chromium to be installed.\n\nMir will look for a `screen.yaml` file in it's working directory to use as configuration. Mir can also be started with a `--config` flag where a configuration file can be specified ex.\n\n```sh\nmir --config foo/bar.yaml\n```\n\n## Configuration\n\nThe Mir configuration file consist of two main sections, _tabs_ where the tabs which will be cycled through is specified and _jobs_ where cron jobs can be specified. A simple example could one tab with xkcd comics and rebooting the system every night at 03:00, which would look like this:\n\n```yaml\nsyntax: v1\n\ntabs:\n  - url: https://xkcd.com/\n\njobs:\n  - type: command\n    when: \"0 0 3 * *\"\n    options:\n      command: sudo\n      args:\n        - reboot\n```\n\nMore configuration examples can be found in [examples](examples). Full documentation of the configuration can be found below:\n\n| name   | type   | usage                                                                     |\n| ------ | ------ | ------------------------------------------------------------------------- |\n| syntax | string | The syntax version of the configuration, only valid version is v1 for now |\n| tabs   | Tab[]  | An array of _Tab_ configurations                                          |\n| jobs   | Job[]  | An array of _Job_ configurations                                          |\n\n**Tab**:\n\n| name     | type   | usage                                                                                                                       |\n| -------- | ------ | --------------------------------------------------------------------------------------------------------------------------- |\n| url      | string | The URL which the tab will load                                                                                             |\n| duration | number | _(optional)_ If more than one tab is specified the duration will be the number of seconds before the next tab will be shown |\n| reload   | bool   | _(optional)_ Reload the tab before it is switched to                                                                        |\n| css      | string | _(optional)_ Path to a css file which should be injected into the tab                                                       |\n| js       | string | _(optional)_ Path to a js file which should be injected into the tab                                                        |\n| auth     | Auth   | _(optional)_ Basic auth login options                                                                                       |\n\n**Auth**:\n\n| name     | type   | usage               |\n| -------- | ------ | ------------------- |\n| username | string | Basic Auth username |\n| password | string | Basic Auth password |\n\n### Jobs\n\nThe _jobs_ field is an array of _job_ configurations:\n\n**Job**:\n\n| name    | type    | usage                                                                           |\n| ------- | ------- | ------------------------------------------------------------------------------- |\n| type    | string  | Job type identifier, see Options for available types                            |\n| when    | string  | cron job expression in format minute, hour, day of month, month and day of week |\n| options | Options | A option object for the specific job type                                       |\n\n**Options**:\n\n**Type**: _command_\n\n| name    | type     | usage                      |\n| ------- | -------- | -------------------------- |\n| command | string   | Command to run             |\n| args    | string[] | Array of command arguments |\n\n**Type**: _tab_\n\n| name     | type     | usage                                                |\n| -------- | -------- | ---------------------------------------------------- |\n| url      | string   | The URL which the tab will load                      |\n| duration | number   | Duration in seconds of which the tab will be visible |\n\n**Type**: _message_\n\n| name            | type   | usage                                                                         |\n| --------------- | ------ | ----------------------------------------------------------------------------- |\n| duration        | number | Duration in seconds of which the message will be visible                      |\n| message         | string | Text message to display                                                       |\n| fontSize        | number | Message font size in pixel                                                    |\n| textColor       | string | Text color                                                                    |\n| backgroundColor | string | Background color                                                              |\n| blink           | bool   | Switch text color and background color every second to make the message blink |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaueramant%2Fmir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaueramant%2Fmir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaueramant%2Fmir/lists"}