{"id":44288371,"url":"https://github.com/jnovack/cloudkey","last_synced_at":"2026-02-10T23:07:57.729Z","repository":{"id":57620403,"uuid":"147929057","full_name":"jnovack/cloudkey","owner":"jnovack","description":"Rewrite of ck-ui to write to the Framebuffer LCD on the Ubiquiti CloudKey Gen2","archived":false,"fork":false,"pushed_at":"2022-05-12T02:19:53.000Z","size":139,"stargazers_count":22,"open_issues_count":6,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T15:03:28.862Z","etag":null,"topics":["cloudkey","framebuffer","go","golang","ubiquiti"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/jnovack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-08T11:51:35.000Z","updated_at":"2024-06-20T15:03:28.862Z","dependencies_parsed_at":"2022-09-02T17:32:25.032Z","dependency_job_id":null,"html_url":"https://github.com/jnovack/cloudkey","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jnovack/cloudkey","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnovack%2Fcloudkey","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnovack%2Fcloudkey/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnovack%2Fcloudkey/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnovack%2Fcloudkey/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jnovack","download_url":"https://codeload.github.com/jnovack/cloudkey/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jnovack%2Fcloudkey/sbom","scorecard":{"id":525237,"data":{"date":"2025-08-11","repo":{"name":"github.com/jnovack/cloudkey","commit":"19347bf6e408760ef0e339422828a151a96b9385"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"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":"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":"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":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md: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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/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/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"}}]},"last_synced_at":"2025-08-20T04:10:08.285Z","repository_id":57620403,"created_at":"2025-08-20T04:10:08.285Z","updated_at":"2025-08-20T04:10:08.285Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29321277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T20:44:44.282Z","status":"ssl_error","status_checked_at":"2026-02-10T20:44:43.393Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["cloudkey","framebuffer","go","golang","ubiquiti"],"created_at":"2026-02-10T23:07:57.633Z","updated_at":"2026-02-10T23:07:57.719Z","avatar_url":"https://github.com/jnovack.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cloudkey\n\n**cloudkey** is a replacement for `/usr/bin/ck-ui` on your Ubiquity Cloud Key\nGeneration 2 device.\n\n![screenshot](https://raw.githubusercontent.com/jnovack/cloudkey/master/doc/screenshot.gif)\n\n*Note: Delay is slowed down to show fading between screens.*\n\n## Installation\n\n### Quick Start\n\n1. `ssh ubnt@UniFi-CloudKeyG2`\n2. `mv /usr/bin/ck-ui /usr/bin/ck-ui.original`\n3. `curl -Lo /usr/local/ck-ui LINK_FROM_RELEASES_PAGE`\n\n### Developers\n\n1. Have a working Go environment.\n2. `GOOS=linux GOARCH=arm go build cloudkey.go`\n3. SCP the file over to your Cloud Key.\n\nAt this point, you can choose to backup and overwrite the `/usr/bin/ck-ui`\nfile or create a new systemd service, depending on your linux experience.\n\n#### Using the `systemd` Service\n\nDisable the old service first.\n\n1. `systemctl disable ck-ui`\n2. `systemctl stop ck-ui`\n\nInstall this one.\n\n1. scp `cloudkey.service` to the `/lib/systemd/system/` directory.\n2. `touch /etc/cloudkey.env`\n3. `systemctl enable cloudkey`\n4. `systemctl start cloudkey`\n\n## Why?\n\nI am an edge case.  I do not use my Cloud Key device for Unifi.  I think it is\na great sexy little hardware device, but to manage a network off of what is\nessentially a POE SDCard, you are insane.\n\nIssues with stability are [very well documented](https://help.ubnt.com/hc/en-us/articles/360000128688-UniFi-Troubleshooting-Offline-Cloud-Key-and-Other-Stability-Issues#4).\nUsing mongodb on an sdcard (limited write cycles) without *automatically*\nreparing has lead me to have to recover 4 times in 2 years even with the\nsecondary USB power from the UPS. That is NOT remotely production stable.\nRun Unifi on a server, not a \"raspberry pi\".\n\nWith that said, I am sure you are asking yourself *\"Why do you have it all?\"*\nThe Ubiquity Cloud Key Gen2 is a POE, ARMv7, Single-Board-Computer with\non-board battery backup and a 160x60 framebuffer display built-in.  It is\nsexy, for under $200. It looks like an iDevice.\n\nSure, you can buy a $35 Raspberry Pi, add a case, with a touchscreen, with\na power-supply, and blah blah, but I'll pay for quality and craftmanship so\nit does not look like another Frankenstein project around my house.\n\nI can ship it to my parents, tell them to plug one cable into the new-fangled\ndoo-hickey and tell them to call their ISP when it has a sad face on it\n(feature not developed yet).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjnovack%2Fcloudkey","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjnovack%2Fcloudkey","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjnovack%2Fcloudkey/lists"}