{"id":222,"name":null,"description":"A terminal spinner for tasks that have non-deterministic time frame.","url":"https://github.com/piotrmurach/tty-spinner","last_synced_at":"2026-04-30T17:00:24.021Z","repository":{"id":23332915,"uuid":"26693253","full_name":"piotrmurach/tty-spinner","owner":"piotrmurach","description":"A terminal spinner for tasks that have non-deterministic time frame.","archived":false,"fork":false,"pushed_at":"2024-08-19T22:25:43.000Z","size":406,"stargazers_count":440,"open_issues_count":12,"forks_count":30,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-04-19T20:46:39.452Z","etag":null,"topics":["animation","ruby-gem","spinner","terminal","tty","tty-components"],"latest_commit_sha":null,"homepage":"https://ttytoolkit.org","language":"Ruby","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/piotrmurach.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"piotrmurach"}},"created_at":"2014-11-15T20:42:25.000Z","updated_at":"2026-04-01T18:28:17.000Z","dependencies_parsed_at":"2024-05-28T18:21:46.560Z","dependency_job_id":"4c2e9604-639d-4cd5-a66e-aedc8f9167f5","html_url":"https://github.com/piotrmurach/tty-spinner","commit_stats":{"total_commits":316,"total_committers":14,"mean_commits":"22.571428571428573","dds":"0.11392405063291144","last_synced_commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95"},"previous_names":["peter-murach/tty-spinner"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/piotrmurach/tty-spinner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/sbom","scorecard":{"id":734850,"data":{"date":"2025-08-11","repo":{"name":"github.com/piotrmurach/tty-spinner","commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"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":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":"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/ci.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/piotrmurach/tty-spinner/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/piotrmurach/tty-spinner/ci.yml/master?enable=pin","Info:   0 out of   1 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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt: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":-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":-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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T15:28:39.488Z","repository_id":23332915,"created_at":"2025-08-22T15:28:39.488Z","updated_at":"2025-08-22T15:28:39.488Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32046393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"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"}},"owner":{"login":"piotrmurach","name":"Piotr Murach","uuid":"444312","kind":"user","description":"Tender loving command line.","email":"","website":"https://piotrmurach.com","location":"Sheffield / Olsztyn","twitter":"piotr_murach","company":null,"icon_url":"https://avatars.githubusercontent.com/u/444312?v=4","repositories_count":89,"last_synced_at":"2025-11-23T03:03:05.684Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/piotrmurach","funding_links":["https://github.com/sponsors/piotrmurach"],"total_stars":12891,"followers":648,"following":42,"created_at":"2022-11-02T16:41:01.260Z","updated_at":"2025-11-23T03:03:05.684Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach/repositories"},"packages":[{"id":12346188,"name":"tty-spinner","ecosystem":"rubygems","description":"A terminal spinner for tasks that have non-deterministic time frame.","homepage":"https://ttytoolkit.org","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/piotrmurach/tty-spinner","keywords_array":[],"namespace":null,"versions_count":13,"first_release_published_at":"2014-11-15T21:01:06.488Z","latest_release_published_at":"2020-01-28T18:32:09.710Z","latest_release_number":"0.9.3","last_synced_at":"2026-04-29T14:33:20.255Z","created_at":"2025-10-07T06:37:57.363Z","updated_at":"2026-04-29T17:12:29.984Z","registry_url":"https://gem.coop/gems/tty-spinner","install_command":"gem install tty-spinner -s https://gem.coop","documentation_url":"http://www.rubydoc.info/gems/tty-spinner/","metadata":{"funding":null},"repo_metadata":{"id":23332915,"uuid":"26693253","full_name":"piotrmurach/tty-spinner","owner":"piotrmurach","description":"A terminal spinner for tasks that have non-deterministic time frame.","archived":false,"fork":false,"pushed_at":"2024-08-19T22:25:43.000Z","size":406,"stargazers_count":440,"open_issues_count":12,"forks_count":30,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-04-19T20:46:39.452Z","etag":null,"topics":["animation","ruby-gem","spinner","terminal","tty","tty-components"],"latest_commit_sha":null,"homepage":"https://ttytoolkit.org","language":"Ruby","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/piotrmurach.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"piotrmurach"}},"created_at":"2014-11-15T20:42:25.000Z","updated_at":"2026-04-01T18:28:17.000Z","dependencies_parsed_at":"2024-05-28T18:21:46.560Z","dependency_job_id":"4c2e9604-639d-4cd5-a66e-aedc8f9167f5","html_url":"https://github.com/piotrmurach/tty-spinner","commit_stats":{"total_commits":316,"total_committers":14,"mean_commits":"22.571428571428573","dds":"0.11392405063291144","last_synced_commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95"},"previous_names":["peter-murach/tty-spinner"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/piotrmurach/tty-spinner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/sbom","scorecard":{"id":734850,"data":{"date":"2025-08-11","repo":{"name":"github.com/piotrmurach/tty-spinner","commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"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":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":"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/ci.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/piotrmurach/tty-spinner/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/piotrmurach/tty-spinner/ci.yml/master?enable=pin","Info:   0 out of   1 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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt: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":-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":-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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T15:28:39.488Z","repository_id":23332915,"created_at":"2025-08-22T15:28:39.488Z","updated_at":"2025-08-22T15:28:39.488Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32046393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"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"},"owner_record":{"login":"piotrmurach","name":"Piotr Murach","uuid":"444312","kind":"user","description":"Tender loving command line.","email":"","website":"https://piotrmurach.com","location":"Sheffield / Olsztyn","twitter":"piotr_murach","company":null,"icon_url":"https://avatars.githubusercontent.com/u/444312?v=4","repositories_count":89,"last_synced_at":"2025-11-23T03:03:05.684Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/piotrmurach","funding_links":["https://github.com/sponsors/piotrmurach"],"total_stars":12891,"followers":648,"following":42,"created_at":"2022-11-02T16:41:01.260Z","updated_at":"2025-11-23T03:03:05.684Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach/repositories"},"tags":[{"name":"v0.9.3","sha":"fe28df1640f1383beeb2e0a559e6f94bcef43f57","kind":"tag","published_at":"2020-01-28T18:31:35.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.3","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.3/manifests"},{"name":"v0.9.2","sha":"8d5efd21669de93ff70386a72e40f26ed793dafa","kind":"tag","published_at":"2019-12-08T21:18:06.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.2","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.2/manifests"},{"name":"v0.9.1","sha":"876512806d579075434a008f3b6f79a4d4dda25e","kind":"tag","published_at":"2019-05-29T20:11:27.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.1","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.1/manifests"},{"name":"v0.9.0","sha":"a63f2df6acd0811c66d0b548ebcd7626b3cfc150","kind":"tag","published_at":"2018-12-01T22:54:00.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"0eca788a2e7c93ae79b1c466bb4a05d1883ae3d1","kind":"tag","published_at":"2018-01-11T20:53:13.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.8.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.8.0/manifests"},{"name":"v0.7.0","sha":"448fd23402cbd15dbb8b2967e3d547713120ba3c","kind":"tag","published_at":"2017-09-11T21:33:18.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.7.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"cd0c4d5a0e5db4c2d15dd94798377c7893e29f95","kind":"tag","published_at":"2017-09-07T21:48:51.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.6.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"bd60b31f2066f6dab073abfad0e29cb7a3e79bfc","kind":"tag","published_at":"2017-08-09T22:13:57.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.5.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.5.0/manifests"},{"name":"v0.4.1","sha":"792ed5c3601c8c734f8b30fe8519dd472bb9538b","kind":"tag","published_at":"2016-08-07T20:23:33.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.4.1","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.1/manifests"},{"name":"v0.4.0","sha":"be2485f8c0e02f2fc5a56aad3df9e2727210b8c3","kind":"tag","published_at":"2016-08-07T17:45:18.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.4.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.0/manifests"},{"name":"v0.3.0","sha":"d5ac79869dbb20385972e8bc646b583b98506e13","kind":"tag","published_at":"2016-07-14T22:02:23.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.3.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.3.0/manifests"},{"name":"v0.2.0","sha":"0ed72f53d709efc781d10114f7f28ccfc1e9d843","kind":"tag","published_at":"2016-03-13T18:09:22.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.2.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.2.0/manifests"},{"name":"v0.1.0","sha":"1540d2efe47d29f04e6c6ff1c3ccf4ff85ea1fba","kind":"tag","published_at":"2014-11-15T21:00:55.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.1.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.1.0/manifests"}]},"repo_metadata_updated_at":"2026-04-29T17:12:29.160Z","dependent_packages_count":0,"downloads":145587876,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":0.19138549038477135,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":0.3000535230608703,"average":0.12285975336141042},"purl":"pkg:gem/tty-spinner?repository_url=https://gem.coop","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/tty-spinner","docker_dependents_count":533,"docker_downloads_count":434418155,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/tty-spinner","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/tty-spinner/dependencies","status":null,"funding_links":["https://github.com/sponsors/piotrmurach"],"critical":null,"issue_metadata":{"last_synced_at":"2026-04-16T10:00:29.744Z","issues_count":29,"pull_requests_count":27,"avg_time_to_close_issue":3984398.4545454546,"avg_time_to_close_pull_request":2011116.857142857,"issues_closed_count":22,"pull_requests_closed_count":21,"pull_request_authors_count":17,"issue_authors_count":20,"avg_comments_per_issue":2.9310344827586206,"avg_comments_per_pull_request":4.851851851851852,"merged_pull_requests_count":19,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/issues","maintainers":[{"login":"piotrmurach","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/piotrmurach"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/tty-spinner/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/tty-spinner/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/tty-spinner/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/tty-spinner/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/tty-spinner/codemeta","maintainers":[{"uuid":"54662","login":"piotrmurach","name":null,"email":null,"url":null,"packages_count":65,"html_url":"https://gem.coop/profiles/piotrmurach","role":null,"created_at":"2025-10-09T23:57:03.618Z","updated_at":"2025-10-09T23:57:03.618Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/piotrmurach/packages"}],"registry":{"name":"gem.coop","url":"https://gem.coop","ecosystem":"rubygems","default":false,"packages_count":190413,"maintainers_count":67488,"namespaces_count":0,"keywords_count":0,"github":"gem-coop","metadata":{"funded_packages_count":6507},"icon_url":"https://github.com/gem-coop.png","created_at":"2025-10-06T17:24:20.932Z","updated_at":"2026-04-03T06:45:05.763Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/namespaces"}},{"id":320397,"name":"tty-spinner","ecosystem":"rubygems","description":"A terminal spinner for tasks that have non-deterministic time frame.","homepage":"https://ttytoolkit.org","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/piotrmurach/tty-spinner","keywords_array":[],"namespace":null,"versions_count":13,"first_release_published_at":"2014-11-15T21:01:06.488Z","latest_release_published_at":"2020-01-28T18:32:09.710Z","latest_release_number":"0.9.3","last_synced_at":"2026-04-29T23:00:43.632Z","created_at":"2022-04-06T11:58:22.093Z","updated_at":"2026-04-29T23:03:17.755Z","registry_url":"https://rubygems.org/gems/tty-spinner","install_command":"gem install tty-spinner -s https://rubygems.org","documentation_url":"http://www.rubydoc.info/gems/tty-spinner/","metadata":{"funding":null},"repo_metadata":{"id":23332915,"uuid":"26693253","full_name":"piotrmurach/tty-spinner","owner":"piotrmurach","description":"A terminal spinner for tasks that have non-deterministic time frame.","archived":false,"fork":false,"pushed_at":"2024-08-19T22:25:43.000Z","size":406,"stargazers_count":440,"open_issues_count":12,"forks_count":30,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-04-19T20:46:39.452Z","etag":null,"topics":["animation","ruby-gem","spinner","terminal","tty","tty-components"],"latest_commit_sha":null,"homepage":"https://ttytoolkit.org","language":"Ruby","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/piotrmurach.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"piotrmurach"}},"created_at":"2014-11-15T20:42:25.000Z","updated_at":"2026-04-01T18:28:17.000Z","dependencies_parsed_at":"2024-05-28T18:21:46.560Z","dependency_job_id":"4c2e9604-639d-4cd5-a66e-aedc8f9167f5","html_url":"https://github.com/piotrmurach/tty-spinner","commit_stats":{"total_commits":316,"total_committers":14,"mean_commits":"22.571428571428573","dds":"0.11392405063291144","last_synced_commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95"},"previous_names":["peter-murach/tty-spinner"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/piotrmurach/tty-spinner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/sbom","scorecard":{"id":734850,"data":{"date":"2025-08-11","repo":{"name":"github.com/piotrmurach/tty-spinner","commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"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":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":"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/ci.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/piotrmurach/tty-spinner/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/piotrmurach/tty-spinner/ci.yml/master?enable=pin","Info:   0 out of   1 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":"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":"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":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt: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":-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":-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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T15:28:39.488Z","repository_id":23332915,"created_at":"2025-08-22T15:28:39.488Z","updated_at":"2025-08-22T15:28:39.488Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32046393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"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"},"owner_record":{"login":"piotrmurach","name":"Piotr Murach","uuid":"444312","kind":"user","description":"Tender loving command line.","email":"","website":"https://piotrmurach.com","location":"Sheffield / Olsztyn","twitter":"piotr_murach","company":null,"icon_url":"https://avatars.githubusercontent.com/u/444312?v=4","repositories_count":89,"last_synced_at":"2025-11-23T03:03:05.684Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/piotrmurach","funding_links":["https://github.com/sponsors/piotrmurach"],"total_stars":12891,"followers":648,"following":42,"created_at":"2022-11-02T16:41:01.260Z","updated_at":"2025-11-23T03:03:05.684Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/piotrmurach/repositories"},"tags":[{"name":"v0.9.3","sha":"fe28df1640f1383beeb2e0a559e6f94bcef43f57","kind":"tag","published_at":"2020-01-28T18:31:35.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.3","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.3/manifests"},{"name":"v0.9.2","sha":"8d5efd21669de93ff70386a72e40f26ed793dafa","kind":"tag","published_at":"2019-12-08T21:18:06.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.2","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.2/manifests"},{"name":"v0.9.1","sha":"876512806d579075434a008f3b6f79a4d4dda25e","kind":"tag","published_at":"2019-05-29T20:11:27.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.1","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.1/manifests"},{"name":"v0.9.0","sha":"a63f2df6acd0811c66d0b548ebcd7626b3cfc150","kind":"tag","published_at":"2018-12-01T22:54:00.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.9.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"0eca788a2e7c93ae79b1c466bb4a05d1883ae3d1","kind":"tag","published_at":"2018-01-11T20:53:13.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.8.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.8.0/manifests"},{"name":"v0.7.0","sha":"448fd23402cbd15dbb8b2967e3d547713120ba3c","kind":"tag","published_at":"2017-09-11T21:33:18.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.7.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"cd0c4d5a0e5db4c2d15dd94798377c7893e29f95","kind":"tag","published_at":"2017-09-07T21:48:51.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.6.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"bd60b31f2066f6dab073abfad0e29cb7a3e79bfc","kind":"tag","published_at":"2017-08-09T22:13:57.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.5.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.5.0/manifests"},{"name":"v0.4.1","sha":"792ed5c3601c8c734f8b30fe8519dd472bb9538b","kind":"tag","published_at":"2016-08-07T20:23:33.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.4.1","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.1/manifests"},{"name":"v0.4.0","sha":"be2485f8c0e02f2fc5a56aad3df9e2727210b8c3","kind":"tag","published_at":"2016-08-07T17:45:18.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.4.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.4.0/manifests"},{"name":"v0.3.0","sha":"d5ac79869dbb20385972e8bc646b583b98506e13","kind":"tag","published_at":"2016-07-14T22:02:23.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.3.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.3.0/manifests"},{"name":"v0.2.0","sha":"0ed72f53d709efc781d10114f7f28ccfc1e9d843","kind":"tag","published_at":"2016-03-13T18:09:22.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.2.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.2.0/manifests"},{"name":"v0.1.0","sha":"1540d2efe47d29f04e6c6ff1c3ccf4ff85ea1fba","kind":"tag","published_at":"2014-11-15T21:00:55.000Z","download_url":"https://codeload.github.com/piotrmurach/tty-spinner/tar.gz/v0.1.0","html_url":"https://github.com/piotrmurach/tty-spinner/releases/tag/v0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/piotrmurach/tty-spinner@v0.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/tags/v0.1.0/manifests"}]},"repo_metadata_updated_at":"2026-04-29T23:03:17.754Z","dependent_packages_count":182,"downloads":145708470,"downloads_period":"total","dependent_repos_count":20741,"rankings":{"downloads":0.24252628761945116,"dependent_repos_count":0.24921666796757394,"dependent_packages_count":0.20795932248748342,"stargazers_count":2.7647996788617433,"forks_count":4.976527915612002,"docker_downloads_count":0.7588006378162598,"average":1.5333050850607524},"purl":"pkg:gem/tty-spinner","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/tty-spinner","docker_dependents_count":533,"docker_downloads_count":434418155,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/tty-spinner","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/tty-spinner/dependencies","status":null,"funding_links":["https://github.com/sponsors/piotrmurach"],"critical":true,"issue_metadata":{"last_synced_at":"2026-04-16T10:00:29.744Z","issues_count":29,"pull_requests_count":27,"avg_time_to_close_issue":3984398.4545454546,"avg_time_to_close_pull_request":2011116.857142857,"issues_closed_count":22,"pull_requests_closed_count":21,"pull_request_authors_count":17,"issue_authors_count":20,"avg_comments_per_issue":2.9310344827586206,"avg_comments_per_pull_request":4.851851851851852,"merged_pull_requests_count":19,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/issues","maintainers":[{"login":"piotrmurach","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/piotrmurach"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/tty-spinner/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/tty-spinner/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/tty-spinner/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/tty-spinner/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/tty-spinner/codemeta","maintainers":[{"uuid":"54662","login":"piotrmurach","name":null,"email":null,"url":null,"packages_count":65,"html_url":"https://rubygems.org/profiles/piotrmurach","role":null,"created_at":"2022-11-09T09:54:54.965Z","updated_at":"2022-11-09T09:54:54.965Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/piotrmurach/packages"}],"registry":{"name":"rubygems.org","url":"https://rubygems.org","ecosystem":"rubygems","default":true,"packages_count":205560,"maintainers_count":68480,"namespaces_count":0,"keywords_count":0,"github":"rubygems","metadata":{"funded_packages_count":7260},"icon_url":"https://github.com/rubygems.png","created_at":"2022-04-04T15:19:23.446Z","updated_at":"2026-04-03T06:42:17.024Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/namespaces"}}],"commits":{"id":19600,"full_name":"piotrmurach/tty-spinner","default_branch":"master","total_commits":316,"total_committers":14,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":22.571428571428573,"dds":0.11392405063291144,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-29T23:04:01.892Z","last_synced_commit":"ea9be11dc539a0f03ea247a6dc1e9cffd9e03f95","created_at":"2023-03-07T11:41:35.516Z","updated_at":"2026-04-29T23:03:28.421Z","committers":[{"name":"Piotr Murach","email":"pmurach@gmail.com","login":"piotrmurach","count":280},{"name":"Austin Blatt","email":"austinblatt@gmail.com","login":"austb","count":10},{"name":"Martin Becker","email":"mbeckerwork@gmail.com","login":"Thermatix","count":5},{"name":"Igor Kapkov","email":"igasgeek@me.com","login":null,"count":4},{"name":"Andrew Kane","email":"andrew@chartkick.com","login":"ankane","count":3},{"name":"Ben Klopfenstein","email":"bklopfenstein@vmware.com","login":null,"count":3},{"name":"moe","email":"moe@busyloop.net","login":"m-o-e","count":2},{"name":"ReadmeCritic","email":"frankensteinbot@gmail.com","login":"ReadmeCritic","count":2},{"name":"Jared Ning","email":"jared@redningja.com","login":"ordinaryzelig","count":2},{"name":"benklop","email":"benklop@gmail.com","login":"benklop","count":1},{"name":"Shane Cavanaugh","email":"shane@shanecav.net","login":"shanecav84","count":1},{"name":"Robert Qualls","email":"robert@robertqualls.com","login":"rlqualls","count":1},{"name":"Kristofer Rye","email":"kristofer.rye@gmail.com","login":"rye","count":1},{"name":"Jan Piotrowski","email":"piotrowski+github@gmail.com","login":"janpio","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-30T00:00:07.427Z","repositories_count":6223650,"commits_count":899978483,"contributors_count":34901312,"owners_count":1147619,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"piotrmurach/tty-spinner","html_url":"https://github.com/piotrmurach/tty-spinner","last_synced_at":"2026-04-16T10:00:29.744Z","status":"error","issues_count":29,"pull_requests_count":27,"avg_time_to_close_issue":3984398.4545454546,"avg_time_to_close_pull_request":2011116.857142857,"issues_closed_count":22,"pull_requests_closed_count":21,"pull_request_authors_count":17,"issue_authors_count":20,"avg_comments_per_issue":2.9310344827586206,"avg_comments_per_pull_request":4.851851851851852,"merged_pull_requests_count":19,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-12T18:39:09.186Z","updated_at":"2026-04-16T10:00:29.744Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/piotrmurach%2Ftty-spinner/issues","issue_labels_count":{"enhancement":7,"bug":3},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":17,"OWNER":7,"CONTRIBUTOR":5},"pull_request_author_associations_count":{"CONTRIBUTOR":20,"NONE":7},"issue_authors":{"piotrmurach":7,"austb":2,"merqlove":2,"dipanm":2,"bluegod":1,"vlad-pisanov":1,"jason-o-matic":1,"benklop":1,"marwal-88":1,"ordinaryzelig":1,"smackesey":1,"cyclotron3k":1,"ankane":1,"KrauseFx":1,"quirinux":1,"andrcuns":1,"johncadengo":1,"RoUS":1,"d4rky-pl":1,"ragurney":1},"pull_request_authors":{"igas":4,"austb":4,"ankane":2,"orgads":2,"KevSlashNull":2,"ReadmeCritic":2,"rye":1,"benklop":1,"shanecav84":1,"ordinaryzelig":1,"rlqualls":1,"GetOutOfMyBakery":1,"janpio":1,"tyler-ball":1,"Thermatix":1,"capripot":1,"m-o-e":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-24T00:00:07.455Z","repositories_count":14385013,"issues_count":34474521,"pull_requests_count":112853134,"authors_count":11244179,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[{"login":"piotrmurach","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/piotrmurach"}],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":1,"IssuesEvent":2,"WatchEvent":8,"IssueCommentEvent":1},"last_year":{"PullRequestEvent":1,"IssuesEvent":2,"WatchEvent":5,"IssueCommentEvent":1}},"keywords":["animation","ruby-gem","spinner","terminal","tty","tty-components"],"dependencies":[{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-09-13T20:11:03.635Z","updated_at":"2022-09-13T20:11:03.635Z","repository_link":"https://github.com/piotrmurach/tty-spinner/blob/master/Gemfile","dependencies":[{"id":4759683762,"package_name":"json","ecosystem":"rubygems","requirements":"= 2.4.1","direct":true,"kind":"runtime","optional":false},{"id":4759683763,"package_name":"rake","ecosystem":"rubygems","requirements":"= 12.3.3","direct":true,"kind":"runtime","optional":false},{"id":4759683764,"package_name":"pastel","ecosystem":"rubygems","requirements":"~\u003e 0.8.0","direct":true,"kind":"runtime","optional":false},{"id":4759683765,"package_name":"coveralls_reborn","ecosystem":"rubygems","requirements":"~\u003e 0.21.0","direct":true,"kind":"runtime","optional":false},{"id":4759683766,"package_name":"simplecov","ecosystem":"rubygems","requirements":"~\u003e 0.21.0","direct":true,"kind":"runtime","optional":false},{"id":4759683767,"package_name":"yardstick","ecosystem":"rubygems","requirements":"~\u003e 0.9.9","direct":true,"kind":"development","optional":false}]},{"ecosystem":"rubygems","filepath":"tty-spinner.gemspec","sha":null,"kind":"manifest","created_at":"2022-09-13T20:11:03.792Z","updated_at":"2022-09-13T20:11:03.792Z","repository_link":"https://github.com/piotrmurach/tty-spinner/blob/master/tty-spinner.gemspec","dependencies":[{"id":4759683814,"package_name":"tty-cursor","ecosystem":"rubygems","requirements":"~\u003e 0.7","direct":true,"kind":"runtime","optional":false},{"id":4759683815,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"development","optional":false},{"id":4759683816,"package_name":"rspec","ecosystem":"rubygems","requirements":"\u003e= 3.0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ci.yml","sha":null,"kind":"manifest","created_at":"2023-12-09T00:50:21.675Z","updated_at":"2023-12-09T00:50:21.675Z","repository_link":"https://github.com/piotrmurach/tty-spinner/blob/master/.github/workflows/ci.yml","dependencies":[{"id":14981719759,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":14981719762,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]}],"score":29.62455865814369,"created_at":"2024-12-15T21:38:07.334Z","updated_at":"2026-04-30T17:00:24.288Z","avatar_url":"https://github.com/piotrmurach.png","language":"Ruby","monthly_downloads":0,"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://ttytoolkit.org\"\u003e\u003cimg width=\"130\" src=\"https://github.com/piotrmurach/tty/raw/master/images/tty.png\" alt=\"tty logo\" /\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n# TTY::Spinner\n\n[![Gem Version](https://badge.fury.io/rb/tty-spinner.svg)][gem]\n[![Actions CI](https://github.com/piotrmurach/tty-spinner/actions/workflows/ci.yml/badge.svg)][gh_actions_ci]\n[![Build status](https://ci.appveyor.com/api/projects/status/2i5lx3tvyi5l8x3j?svg=true)][appveyor]\n[![Maintainability](https://api.codeclimate.com/v1/badges/d5ae2219e194ac99be58/maintainability)][codeclimate]\n[![Coverage Status](https://coveralls.io/repos/piotrmurach/tty-spinner/badge.svg)][coverage]\n\n[gem]: https://badge.fury.io/rb/tty-spinner\n[gh_actions_ci]: https://github.com/piotrmurach/tty-spinner/actions/workflows/ci.yml\n[appveyor]: https://ci.appveyor.com/project/piotrmurach/tty-spinner\n[codeclimate]: https://codeclimate.com/github/piotrmurach/tty-spinner/maintainability\n[coverage]: https://coveralls.io/r/piotrmurach/tty-spinner\n\n\u003e A terminal spinner for tasks that have non-deterministic time frame.\n\n**TTY::Spinner** provides independent spinner component for [TTY](https://github.com/piotrmurach/tty) toolkit.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg alt=\"Available spinner formats demo\" src=\"demo.gif\" width=\"370\" height=\"376\"\u003e\n\u003c/div\u003e\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem \"tty-spinner\"\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install tty-spinner\n\n## Contents\n\n* [1. Usage](#1-usage)\n* [2. TTY::Spinner API](#2-ttyspinner-api)\n  * [2.1 spin](#21-spin)\n  * [2.2 auto_spin](#22-auto_spin)\n    * [2.2.1 pause](#221-pause)\n    * [2.2.2 resume](#222-resume)\n  * [2.3 run](#23-run)\n  * [2.4 start](#24-start)\n  * [2.5 stop](#25-stop)\n    * [2.5.1 success](#251-success)\n    * [2.5.2 error](#252-error)\n  * [2.6 update](#26-update)\n  * [2.7 reset](#27-reset)\n  * [2.8 join](#28-join)\n  * [2.9 tty?](#29-tty)\n  * [2.10 log](#210-log)\n* [3. Configuration](#3-configuration)\n  * [3.1 :format](#31-format)\n  * [3.2 :frames](#32-frames)\n  * [3.3 :interval](#33-interval)\n  * [3.4 :hide_cursor](#34-hide_cursor)\n  * [3.5 :clear](#35-clear)\n  * [3.6 :success_mark](#36-success_mark)\n  * [3.7 :error_mark](#37-error_mark)\n  * [3.8 :output](#38-output)\n* [4. Events](#4-events)\n  * [4.1 done](#41-done)\n  * [4.2 success](#42-success)\n  * [4.3 error](#43-error)\n* [5. TTY::Spinner::Multi API](#5-ttyspinnermulti-api)\n  * [5.1 register](#51-register)\n  * [5.2 auto_spin](#52-auto_spin)\n    * [5.2.1 manual async](#521-manual-async)\n    * [5.2.2 auto async tasks](#522-auto-async-tasks)\n  * [5.3 stop](#53-stop)\n    * [5.3.1 success](#531-success)\n    * [5.3.2 error](#532-error)\n  * [5.4 :style](#54-style)\n\n## 1. Usage\n\n**TTY::Spinner** by default uses `:classic` type of formatter and requires no parameters:\n\n```ruby\nspinner = TTY::Spinner.new\n```\n\nIn addition you can provide a message with `:spinner` token and format type you would like for the spinning display:\n\n```ruby\nspinner = TTY::Spinner.new(\"[:spinner] Loading ...\", format: :pulse_2)\n\nspinner.auto_spin # Automatic animation with default interval\n\nsleep(2) # Perform task\n\nspinner.stop(\"Done!\") # Stop animation\n```\n\nThis would produce animation in your terminal:\n\n```\n⎺ Loading ...\n```\n\nAnd when finished output:\n\n```\n_ Loading ... Done!\n```\n\nUse **TTY::Spinner::Multi** to synchronize multiple spinners:\n\n```ruby\nspinners = TTY::Spinner::Multi.new(\"[:spinner] top\")\n\nsp1 = spinners.register \"[:spinner] one\"\n# or sp1 = ::TTY::Spinner.new(\"[:spinner] one\")\n# spinners.register sp1\nsp2 = spinners.register \"[:spinner] two\"\n\nsp1.auto_spin\nsp2.auto_spin\n\nsleep(2) # Perform work\n\nsp1.success\nsp2.success\n```\n\nThe spinners when done will display:\n\n```\n┌ [✔] top\n├── [✔] one\n└── [✔] two\n```\n\nFor more usage examples please see [examples directory](https://github.com/piotrmurach/tty-spinner/tree/master/examples)\n\n## 2. TTY::Spinner API\n\n### 2.1 spin\n\nThe main workhorse of the spinner is the `spin` method.\n\nLooping over `spin` method will animate a given spinner.\n\n```ruby\nloop do\n  spinner.spin\nend\n```\n\n### 2.2 auto_spin\n\nTo perform automatic spinning animation use `auto_spin` method like so:\n\n```ruby\nspinner.auto_spin\n```\n\nThe speed with which the spinning happens is determined by the `:interval` parameter. All the spinner formats have their default intervals specified ([see](https://github.com/piotrmurach/tty-spinner/blob/master/lib/tty/spinner/formats.rb)).\n\n### 2.2.1 pause\n\nAfter calling `auto_spin` you can pause spinner execution:\n\n```ruby\nspinner.pause\n```\n\n### 2.2.2 resume\n\nYou can continue any paused spinner:\n\n```ruby\nspinner.resume\n```\n\n### 2.3 run\n\nUse `run` passing a block with a job that will automatically display spinning animation while the block executes and finish animation when the block terminates. The block yields a spinner instance.\n\n```ruby\nspinner.run do |spinner|\n  ...\nend\n```\n\nOptionally you can provide a stop message to display when animation is finished.\n\n```ruby\nspinner.run(\"Done!\") do |spinner|\n  ...\nend\n```\n\n### 2.4 start\n\nIn order to set start time or reuse the same spinner after it has stopped, call `start` method:\n\n```ruby\nspinner.start\n```\n\n### 2.5 stop\n\nIn order to stop the spinner call `stop`. This will finish drawing the spinning animation and return to new line.\n\n```ruby\nspinner.stop\n```\n\nYou can further pass a message to print when animation is finished.\n\n```ruby\nspinner.stop(\"Done!\")\n```\n\n#### 2.5.1 success\n\nUse `success` call to stop the spinning animation and replace the spinning symbol with check mark character to indicate successful completion.\n\n```ruby\nspinner = TTY::Spinner.new(\"[:spinner] Task name\")\nspinner.success(\"(successful)\")\n```\n\nThis will produce:\n\n```\n[✔] Task name (successful)\n```\n\n#### 2.5.2 error\n\nUse `error` call to stop the spinning animation and replace the spinning symbol with cross character to indicate error completion.\n\n```ruby\nspinner = TTY::Spinner.new(\"[:spinner] Task name\")\nspinner.error(\"(error)\")\n```\n\nThis will produce:\n\n```\n[✖] Task name (error)\n```\n\n### 2.6 update\n\nUse `update` call to dynamically change label name(s).\n\nProvide an arbitrary token name(s) in the message string, such as `:title`\n\n```ruby\nspinner = TTY::Spinner.new(\"[:spinner] :title\")\n```\n\nand then pass token name and value:\n\n```ruby\nspinner.update(title: \"Downloading file1\")\n```\n\nnext start animation:\n\n```ruby\nspinner.run { ... }\n# =\u003e | Downloading file1\n```\n\nOnce animation finishes you can kick start another one with a different name:\n\n```ruby\nspinner.update(title: \"Downloading file2\")\nspinner.run { ... }\n```\n\n### 2.7 reset\n\nIn order to reset the spinner to its initial frame do:\n\n```ruby\nspinner.reset\n```\n\n### 2.8 join\n\nOne way to wait while the spinning animates is to join the thread started with `start` method:\n\n```ruby\nspinner.join\n```\n\nOptionally you can provide timeout:\n\n```ruby\nspinner.join(0.5)\n```\n\n### 2.9 tty?\n\nThe spinner will not write any output if the output stream is not a TTY. You can check this with:\n\n```ruby\nspinner.tty?\n```\n\n### 2.10 log\n\nTo output log messages to the console above a spinner use the `log` method:\n\n```ruby\nspinner.log(\"Print this log message to the console\")\n```\n\n## 3. Configuration\n\nThere are number of configuration options that can be provided to customise the behaviour of a spinner.\n\n### 3.1 :format\n\nUse one of the predefined spinner styles by passing the formatting token `:format`\n\n```ruby\nspinner = TTY::Spinner.new(format: :pulse_2)\n```\n\nAll spinner formats that **TTY::Spinner** accepts are defined in [/lib/tty/spinner/formats.rb](https://github.com/piotrmurach/tty-spinner/blob/master/lib/tty/spinner/formats.rb)\n\nIf you wish to see all available formats in action run the `formats.rb` file in examples folder like so:\n\n```ruby\nbundle exec ruby examples/formats.rb\n```\n\n### 3.2 :frames\n\nIf you wish to use custom formatting use the `:frames` option with either `array` or `string` of characters.\n\n```ruby\nspinner = TTY::Spinner.new(frames: [\".\", \"o\", \"0\", \"@\", \"*\"])\n```\n\n### 3.3 :interval\n\nThe `:interval` option  accepts `integer` representing number of `Hz` units, for instance, frequency of 10 will mean that the spinning animation will be displayed 10 times per second.\n\n```ruby\nspinner = TTY::Spinner.new(interval: 20) # 20 Hz (20 times per second)\n```\n\n### 3.4 :hide_cursor\n\nHides cursor when spinning animation performs. Defaults to `false`.\n\n```ruby\nspinner = TTY::Spinner.new(hide_cursor: true)\n```\n\n### 3.5 :clear\n\nAfter spinner is finished clears its output. Defaults to `false`.\n\n```ruby\nspinner = TTY::Spinner.new(clear: true)\n```\n\n### 3.6 :success_mark\n\nTo change marker indicating successful completion use the `:success_mark` option:\n\n```ruby\nspinner = TTY::Spinner.new(success_mark: \"+\")\n```\n\n### 3.7 :error_mark\n\nTo change marker indicating error completion use the `:error_mark` option:\n\n```ruby\nspinner = TTY::Spinner.new(error_mark: \"x\")\n```\n\n### 3.8 :output\n\nThe spinner only outputs to a console and when output is redirected to a file or a pipe it does nothing. This is so, for example, your error logs do not overflow with spinner output.\n\nYou can change where console output is streamed with `:output` option:\n\n```ruby\nspinner = TTY::Spinner.new(output: $stdout)\n```\n\nThe output stream defaults to `stderr`.\n\n## 4. Events\n\n**TTY::Spinner** emits `:done`, `:success` and `:error` event types when spinner is stopped.\n\n### 4.1 done\n\nThis event is emitted irrespective of the completion method. In order to listen for this event you need to register callback:\n\n```ruby\nspinner.on(:done) { ... }\n```\n\n### 4.2 success\n\nThis event is fired when `success` call is made. In order to respond to the event, you need to register callback:\n\n```ruby\nspinner.on(:success) { ... }\n```\n\n### 4.3 error\n\nThis event is fired when `error` completion is called. In order to respond to the event, you need to register callback:\n\n```ruby\nspinner.on(:error) { ... }\n```\n\n## 5. TTY::Spinner::Multi API\n\n### 5.1 register\n\nCreate and register a `TTY::Spinner` under the multispinner\n\n```ruby\nnew_spinner = multi_spinner.register(\"[:spinner] Task 1 name\", options)\n# or\n#   spinner = ::TTY::Spinner.new(\"[:spinner] one\")\n#   sp1 = multi_spinner.register(spinner)\n```\n\nIf no options are given it will use the options given to the multi_spinner when it was initialized to create the new spinner.\nIf options are passed, they will override any options given to the multi spinner.\n\n### 5.2 auto_spin\n\nTo create a top level spinner that tracks activity of all the registered spinners, the multispinner has to have been given a message on initialization:\n\n```ruby\nmulti_spinner = TTY::Spinner::Multi.new(\"[:spinner] Top level spinner\")\n```\n\nThe top level multi spinner will perform spinning animation automatically when at least one of the registered spinners starts spinning.\n\nIf you register spinners without any tasks then you will have to manually control when the `multi_spinner` finishes by calling `stop`, `success` or `error` (see [manual](#521-manual-async)).\n\nAlternatively, you can register spinners with tasks that will automatically animate and finish spinners when respective tasks are done (see [async tasks](#522-auto-async-tasks)).\n\nThe speed with which the spinning happens is determined by the `:interval` parameter. All the spinner formats have their default intervals specified ([see](https://github.com/piotrmurach/tty-spinner/blob/master/lib/tty/spinner/formats.rb)).\n\n#### 5.2.1 manual async\n\nIn case when you wish to have full control over multiple spinners, you will need to perform all actions manually.\n\nFor example, create a multi spinner that will track status of all registered spinners:\n\n```ruby\nmulti_spinner = TTY::Spinner::Multi.new(\"[:spinner] top\")\n```\n\nand then register spinners with their formats:\n\n```\nspinner_1 = spinners.register \"[:spinner] one\"\nspinner_2 = spinners.register \"[:spinner] two\"\n```\n\nOnce registered, you can set spinners running in separate threads:\n\n```ruby\nspinner_1.auto_spin\nspinner_2.auto_spin\n```\n\nFinally, you need to stop each spinner manually, in our case we mark the second spinner as failure which in turn will stop the top level multi spinner automatically and mark it as failure:\n\n```ruby\nspinner_1.success\nspinner_2.error\n```\n\nThe result may look like this:\n\n```ruby\n┌ [✖] top\n├── [✔] one\n└── [✖] two\n```\n\n#### 5.2.2 auto async tasks\n\nIn case when you wish to execute async tasks and update individual spinners automatically, in any order, about their task status use `#register` and pass additional block parameter with the job to be executed.\n\nFor example, create a multi spinner that will track status of all registered spinners:\n\n```ruby\nmulti_spinner = TTY::Spinner::Multi.new(\"[:spinner] top\")\n```\n\nand then register spinners with their respective tasks:\n\n```ruby\nmulti_spinner.register(\"[:spinner] one\") { |sp| sleep(2); sp.success(\"yes 2\") }\nmulti_spinner.register(\"[:spinner] two\") { |sp| sleep(3); sp.error(\"no 2\") }\n```\n\nFinally, call `#auto_spin` to kick things off:\n\n```ruby\nmulti_spinner.auto_spin\n```\n\nIf any of the child spinner stops with error then the top level spinner will be marked as failure.\n\n### 5.3 stop\n\nIn order to stop the multi spinner call `stop`. This will stop the top level spinner, if it exists, and any sub-spinners still spinning.\n\n```ruby\nmulti_spinner.stop\n```\n\n#### 5.3.1 success\n\nUse `success` call to stop the spinning animation and replace the spinning symbol with a check mark character to indicate successful completion.\nThis will also call `#success` on any sub-spinners that are still spinning.\n\n```ruby\nmulti_spinner.success\n```\n\n#### 5.3.2 error\n\nUse `error` call to stop the spinning animation and replace the spinning symbol with cross character to indicate error completion.\nThis will also call `#error` on any sub-spinners that are still spinning.\n\n```ruby\nmulti_spinner.error\n```\n\n### 5.4 :style\n\nIn addition to all [configuration options](#3-configuration) you can style multi spinner like so:\n\n```ruby\nmulti_spinner = TTY::Spinner::Multi.new(\"[:spinner] parent\", style: {\n  top: \". \"\n  middle: \"|-\u003e \"\n  bottom: \"|__ \"\n})\n```\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/piotrmurach/tty-spinner. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/piotrmurach/tty-spinner/blob/master/CODE_OF_CONDUCT.md).\n\n1. Fork it ( https://github.com/piotrmurach/tty-spinner/fork )\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n## Code of Conduct\n\nEveryone interacting in the TTY::Spinner project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/piotrmurach/tty-spinner/blob/master/CODE_OF_CONDUCT.md).\n\n## Copyright\n\nCopyright (c) 2014 Piotr Murach. See LICENSE for further details.\n","funding_links":["https://github.com/sponsors/piotrmurach"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["apps","deployment","fastlane","screenshots","cursor-moves","cursor-position","escape-sequences","string-styling","terminal-emulators","terminal-themes"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/222","html_url":"https://ruby.ecosyste.ms/projects/222"}