{"id":373,"name":null,"description":"Preview mail in the browser instead of sending.","url":"https://github.com/ryanb/letter_opener","last_synced_at":"2026-04-30T04:02:41.413Z","repository":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2026-04-25T13:24:46.000Z","size":234,"stargazers_count":3838,"open_issues_count":4,"forks_count":242,"subscribers_count":31,"default_branch":"master","last_synced_at":"2026-04-26T02:09:13.361Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2026-04-25T13:24:51.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ryanb/letter_opener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/sbom","scorecard":{"id":791716,"data":{"date":"2025-08-11","repo":{"name":"github.com/ryanb/letter_opener","commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":3,"reason":"Found 9/26 approved changesets -- score normalized to 3","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":"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/ruby.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T07:44:42.237Z","repository_id":671278,"created_at":"2025-08-23T07:44:42.237Z","updated_at":"2025-08-23T07:44:42.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32348058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T17:12:42.749Z","status":"ssl_error","status_checked_at":"2026-04-27T17:12:41.658Z","response_time":128,"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":"ryanb","name":"Ryan Bates","uuid":"161","kind":"user","description":null,"email":"","website":"http://railscasts.com","location":"Southern Oregon","twitter":null,"company":"RailsCasts","icon_url":"https://avatars.githubusercontent.com/u/161?v=4","repositories_count":63,"last_synced_at":"2023-04-09T06:01:35.951Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ryanb","funding_links":[],"total_stars":24765,"followers":null,"following":null,"created_at":"2022-11-02T16:21:35.929Z","updated_at":"2024-03-25T17:33:02.038Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb/repositories"},"packages":[{"id":13406859,"name":"ruby-letter-opener","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-06T15:29:43.051Z","latest_release_published_at":"2026-02-06T15:29:43.051Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-06T16:00:50.799Z","created_at":"2026-02-06T15:29:42.438Z","updated_at":"2026-03-06T16:00:50.799Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{},"purl":"pkg:deb/ubuntu/ruby-letter-opener?arch=source\u0026distro=ubuntu-24.04","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"ubuntu-24.04","url":"https://launchpad.net/ubuntu/noble","ecosystem":"ubuntu","default":true,"packages_count":37306,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"noble"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:45.928Z","updated_at":"2026-04-27T18:20:35.701Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/namespaces"}},{"id":13605699,"name":"ruby-letter-opener","ecosystem":"debian","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["misc"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-11T11:22:11.342Z","latest_release_published_at":"2026-02-11T11:22:11.342Z","latest_release_number":"1.7.0-1","last_synced_at":"2026-03-13T19:04:32.928Z","created_at":"2026-02-11T11:22:11.145Z","updated_at":"2026-03-13T19:04:32.928Z","registry_url":"https://tracker.debian.org/pkg/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":"https://packages.debian.org/buster/ruby-letter-opener","metadata":{"component":"main","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2024-08-02T07:09:54.000Z","size":237,"stargazers_count":3836,"open_issues_count":5,"forks_count":241,"subscribers_count":31,"default_branch":"master","last_synced_at":"2026-02-05T20:43:01.485Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2026-01-31T11:37:23.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ryanb/letter_opener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/sbom","scorecard":{"id":791716,"data":{"date":"2025-08-11","repo":{"name":"github.com/ryanb/letter_opener","commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":3,"reason":"Found 9/26 approved changesets -- score normalized to 3","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":"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/ruby.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T07:44:42.237Z","repository_id":671278,"created_at":"2025-08-23T07:44:42.237Z","updated_at":"2025-08-23T07:44:42.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"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"}},"repo_metadata_updated_at":"2026-02-11T15:15:10.728Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-letter-opener?arch=source\u0026distro=debian-10\u0026repository_url=https://packages.debian.org/buster","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"debian-10","url":"https://packages.debian.org/buster","ecosystem":"debian","default":false,"packages_count":28836,"maintainers_count":0,"namespaces_count":3,"keywords_count":915,"github":"debian","metadata":{"codename":"buster","mirror":"http://archive.debian.org/debian"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.156Z","updated_at":"2026-04-27T18:20:39.693Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-10/namespaces"}},{"id":13751287,"name":"ruby-letter-opener","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-13T07:16:49.658Z","latest_release_published_at":"2026-02-13T07:16:49.658Z","latest_release_number":"1.7.0-1","last_synced_at":"2026-03-13T20:23:45.695Z","created_at":"2026-02-13T07:16:49.467Z","updated_at":"2026-03-13T20:23:45.695Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-13T07:16:50.209Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-letter-opener?arch=source\u0026distro=ubuntu-20.04\u0026repository_url=https://launchpad.net/ubuntu/focal","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"ubuntu-20.04","url":"https://launchpad.net/ubuntu/focal","ecosystem":"ubuntu","default":false,"packages_count":30789,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"focal"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:47.233Z","updated_at":"2026-04-27T18:20:36.874Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-20.04/namespaces"}},{"id":12263353,"name":"letter_opener","ecosystem":"rubygems","description":"When mail is sent from your application, Letter Opener will open a preview in the browser instead of sending.","homepage":"https://github.com/ryanb/letter_opener","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":[],"namespace":null,"versions_count":18,"first_release_published_at":"2011-09-07T21:19:43.405Z","latest_release_published_at":"2024-03-30T14:23:27.136Z","latest_release_number":"1.10.0","last_synced_at":"2026-04-29T00:32:05.736Z","created_at":"2025-10-07T03:58:35.210Z","updated_at":"2026-04-29T00:32:18.850Z","registry_url":"https://gem.coop/gems/letter_opener","install_command":"gem install letter_opener -s https://gem.coop","documentation_url":"http://www.rubydoc.info/gems/letter_opener/","metadata":{"funding":null},"repo_metadata":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2026-04-25T13:24:46.000Z","size":234,"stargazers_count":3838,"open_issues_count":4,"forks_count":242,"subscribers_count":31,"default_branch":"master","last_synced_at":"2026-04-26T02:09:13.361Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2026-04-25T13:24:51.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ryanb/letter_opener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/sbom","scorecard":{"id":791716,"data":{"date":"2025-08-11","repo":{"name":"github.com/ryanb/letter_opener","commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":3,"reason":"Found 9/26 approved changesets -- score normalized to 3","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":"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/ruby.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T07:44:42.237Z","repository_id":671278,"created_at":"2025-08-23T07:44:42.237Z","updated_at":"2025-08-23T07:44:42.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32348058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T17:12:42.749Z","status":"ssl_error","status_checked_at":"2026-04-27T17:12:41.658Z","response_time":128,"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":"ryanb","name":"Ryan Bates","uuid":"161","kind":"user","description":null,"email":"","website":"http://railscasts.com","location":"Southern Oregon","twitter":null,"company":"RailsCasts","icon_url":"https://avatars.githubusercontent.com/u/161?v=4","repositories_count":63,"last_synced_at":"2023-04-09T06:01:35.951Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ryanb","funding_links":[],"total_stars":24765,"followers":null,"following":null,"created_at":"2022-11-02T16:21:35.929Z","updated_at":"2024-03-25T17:33:02.038Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb/repositories"},"tags":[{"name":"v1.10.0","sha":"f6a925b0232be166fabdb63e75509b03aa659c54","kind":"tag","published_at":"2024-03-30T14:22:17.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.10.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.10.0/manifests"},{"name":"v1.9.0","sha":"3a19eff5ef1d2998e4ca50b2b44dc0cbd1934ece","kind":"tag","published_at":"2024-02-13T14:15:18.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.9.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.9.0/manifests"},{"name":"v1.8.1","sha":"cb03dc8beaf10edfd457af5d380e00ca71bf3581","kind":"tag","published_at":"2022-03-19T09:27:16.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.8.1","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.8.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.1/manifests"},{"name":"v1.8.0","sha":"c77ed5d3aae667f951c17f3fb4a9bcda18cdd2ef","kind":"tag","published_at":"2022-03-09T06:31:01.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.8.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.0/manifests"},{"name":"v1.7.0","sha":"fb72ee53010e91f93c002ebfcd1378329c2df359","kind":"tag","published_at":"2018-12-10T20:15:55.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.7.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.7.0/manifests"},{"name":"v1.6.0","sha":"e5786347f901f4e6ea42d67ef0689e0219c2cc21","kind":"tag","published_at":"2018-01-10T06:44:01.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.6.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.6.0/manifests"},{"name":"v1.5.0","sha":"b73a2ed04adcc3ab85bbb339d2bb65e35bc84954","kind":"tag","published_at":"2018-01-02T08:20:35.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.5.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.5.0/manifests"},{"name":"v1.4.1","sha":"1b3b49ebdb6ce0321cb30eccc9c7c145c7ee5d9f","kind":"tag","published_at":"2015-05-24T16:13:35.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.4.1","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.1/manifests"},{"name":"v1.4.0","sha":"8b3cabc23f58d88494073ce594e0dcddda8c43f3","kind":"tag","published_at":"2015-05-09T12:52:20.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.4.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.0/manifests"},{"name":"v1.3.0","sha":"ae92f80cbba6e520c089312492803b47a389f8d2","kind":"tag","published_at":"2014-12-06T18:40:38.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.3.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"ce66e957ab9ee664e9fb1b310e6ce51c97697a2a","kind":"tag","published_at":"2013-12-11T21:41:43.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.2.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.2.0/manifests"},{"name":"v1.1.2","sha":"414eea2c68112508851c488ef01b5c61e1ee0017","kind":"tag","published_at":"2013-06-28T20:23:02.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.1.2","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.2/manifests"},{"name":"v1.1.1","sha":"cd9d827198ba1f07490a913b2b0e6ed62a663091","kind":"tag","published_at":"2013-05-10T11:32:28.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.1.1","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.1.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.1/manifests"},{"name":"v1.1.0","sha":"6b3e6dc382df7d81eafb5917bcb2fddd10ac5c5f","kind":"tag","published_at":"2013-02-08T21:29:50.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.1.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@v1.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.0/manifests"},{"name":"1.0.0","sha":"06ef7a3336e59110349f8ae75615d09a5e3a8aec","kind":"tag","published_at":"2012-10-10T21:56:29.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/1.0.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@1.0.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/1.0.0/manifests"},{"name":"0.1.0","sha":"9729a333b36170024a43277b75a800c89713ad01","kind":"tag","published_at":"2012-10-01T21:18:35.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/0.1.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@0.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.1.0/manifests"},{"name":"0.0.2","sha":"2b19f1c61f5ccc37a829f71faaed2d89a7e3429b","kind":"tag","published_at":"2011-09-07T23:07:21.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/0.0.2","html_url":"https://github.com/ryanb/letter_opener/releases/tag/0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/ryanb/letter_opener@0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.0.2/manifests"}]},"repo_metadata_updated_at":"2026-04-29T00:32:18.828Z","dependent_packages_count":0,"downloads":109142596,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":0.2476197684917361,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":0.21247722492849846,"average":0.11502424835505864},"purl":"pkg:gem/letter_opener?repository_url=https://gem.coop","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/letter_opener","docker_dependents_count":320,"docker_downloads_count":481387397,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/letter_opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/letter_opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-04-26T11:00:29.542Z","issues_count":55,"pull_requests_count":67,"avg_time_to_close_issue":5128003.490566038,"avg_time_to_close_pull_request":4302031.5,"issues_closed_count":53,"pull_requests_closed_count":62,"pull_request_authors_count":43,"issue_authors_count":54,"avg_comments_per_issue":4.545454545454546,"avg_comments_per_pull_request":1.6567164179104479,"merged_pull_requests_count":49,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":3,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":22506955.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.3333333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/issues","maintainers":[{"login":"nashby","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nashby"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/letter_opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/letter_opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/letter_opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/letter_opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/packages/letter_opener/codemeta","maintainers":[{"uuid":"48635","login":"nashby","name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://gem.coop/profiles/nashby","role":null,"created_at":"2025-10-07T22:19:30.630Z","updated_at":"2025-10-07T22:19:30.630Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/nashby/packages"},{"uuid":"991","login":"ryanb","name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://gem.coop/profiles/ryanb","role":null,"created_at":"2025-10-07T22:19:30.964Z","updated_at":"2025-10-07T22:19:30.964Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/gem.coop/maintainers/ryanb/packages"}],"registry":{"name":"gem.coop","url":"https://gem.coop","ecosystem":"rubygems","default":false,"packages_count":190401,"maintainers_count":67480,"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":13804684,"name":"ruby-letter-opener","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-13T18:24:25.820Z","latest_release_published_at":"2026-02-13T18:24:25.820Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-14T03:14:57.366Z","created_at":"2026-02-13T18:24:25.599Z","updated_at":"2026-03-14T03:14:57.367Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-13T18:25:56.835Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-letter-opener?arch=source\u0026distro=ubuntu-23.10\u0026repository_url=https://launchpad.net/ubuntu/mantic","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"ubuntu-23.10","url":"https://launchpad.net/ubuntu/mantic","ecosystem":"ubuntu","default":false,"packages_count":36642,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"mantic","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.636Z","updated_at":"2026-04-27T18:20:38.051Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/namespaces"}},{"id":13530523,"name":"ruby-letter-opener","ecosystem":"debian","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["misc"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-10T23:33:25.490Z","latest_release_published_at":"2026-02-10T23:33:25.490Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-14T07:16:15.307Z","created_at":"2026-02-10T23:33:25.305Z","updated_at":"2026-03-14T07:16:15.308Z","registry_url":"https://tracker.debian.org/pkg/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":"https://packages.debian.org/bullseye/ruby-letter-opener","metadata":{"component":"main","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2024-08-02T07:09:54.000Z","size":237,"stargazers_count":3836,"open_issues_count":5,"forks_count":241,"subscribers_count":31,"default_branch":"master","last_synced_at":"2026-02-05T20:43:01.485Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2026-01-31T11:37:23.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ryanb/letter_opener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/sbom","scorecard":{"id":791716,"data":{"date":"2025-08-11","repo":{"name":"github.com/ryanb/letter_opener","commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":3,"reason":"Found 9/26 approved changesets -- score normalized to 3","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":"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/ruby.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T07:44:42.237Z","repository_id":671278,"created_at":"2025-08-23T07:44:42.237Z","updated_at":"2025-08-23T07:44:42.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"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"}},"repo_metadata_updated_at":"2026-02-11T14:26:40.345Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-letter-opener?arch=source\u0026distro=debian-11\u0026repository_url=https://packages.debian.org/bullseye","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"debian-11","url":"https://packages.debian.org/bullseye","ecosystem":"debian","default":false,"packages_count":31268,"maintainers_count":0,"namespaces_count":3,"keywords_count":0,"github":"debian","metadata":{"codename":"bullseye"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.702Z","updated_at":"2026-04-27T18:20:39.352Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-11/namespaces"}},{"id":13566691,"name":"ruby-letter-opener","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-11T06:42:42.361Z","latest_release_published_at":"2026-02-11T06:42:42.361Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-11T14:08:41.268Z","created_at":"2026-02-11T06:42:42.188Z","updated_at":"2026-03-11T14:08:41.564Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2024-08-02T07:09:54.000Z","size":237,"stargazers_count":3836,"open_issues_count":5,"forks_count":241,"subscribers_count":31,"default_branch":"master","last_synced_at":"2026-02-05T20:43:01.485Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2026-01-31T11:37:23.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ryanb/letter_opener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/sbom","scorecard":{"id":791716,"data":{"date":"2025-08-11","repo":{"name":"github.com/ryanb/letter_opener","commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":3,"reason":"Found 9/26 approved changesets -- score normalized to 3","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":"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/ruby.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T07:44:42.237Z","repository_id":671278,"created_at":"2025-08-23T07:44:42.237Z","updated_at":"2025-08-23T07:44:42.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29194000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"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"}},"repo_metadata_updated_at":"2026-02-11T14:56:47.480Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-letter-opener?arch=source\u0026distro=ubuntu-23.04\u0026repository_url=https://launchpad.net/ubuntu/lunar","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"ubuntu-23.04","url":"https://launchpad.net/ubuntu/lunar","ecosystem":"ubuntu","default":false,"packages_count":36116,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"lunar","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:49.117Z","updated_at":"2026-04-27T18:20:38.741Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/namespaces"}},{"id":243376,"name":"letter_opener","ecosystem":"rubygems","description":"When mail is sent from your application, Letter Opener will open a preview in the browser instead of sending.","homepage":"https://github.com/ryanb/letter_opener","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":[],"namespace":null,"versions_count":18,"first_release_published_at":"2011-09-07T21:19:43.405Z","latest_release_published_at":"2024-03-30T14:23:27.136Z","latest_release_number":"1.10.0","last_synced_at":"2026-04-29T16:40:36.171Z","created_at":"2022-04-06T03:02:34.522Z","updated_at":"2026-04-29T16:40:36.171Z","registry_url":"https://rubygems.org/gems/letter_opener","install_command":"gem install letter_opener -s https://rubygems.org","documentation_url":"http://www.rubydoc.info/gems/letter_opener/","metadata":{"funding":null},"repo_metadata":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2024-08-02T07:09:54.000Z","size":237,"stargazers_count":3727,"open_issues_count":3,"forks_count":237,"subscribers_count":35,"default_branch":"master","last_synced_at":"2024-11-12T21:29:09.840Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2024-11-12T07:23:39.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224964646,"owners_count":17399433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"ryanb","name":"Ryan Bates","uuid":"161","kind":"user","description":null,"email":"","website":"http://railscasts.com","location":"Southern Oregon","twitter":null,"company":"RailsCasts","icon_url":"https://avatars.githubusercontent.com/u/161?v=4","repositories_count":63,"last_synced_at":"2023-04-09T06:01:35.951Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ryanb","funding_links":[],"total_stars":24765,"followers":null,"following":null,"created_at":"2022-11-02T16:21:35.929Z","updated_at":"2024-03-25T17:33:02.038Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb/repositories"},"tags":[{"name":"v1.10.0","sha":"f6a925b0232be166fabdb63e75509b03aa659c54","kind":"tag","published_at":"2024-03-30T14:22:17.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.10.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.10.0/manifests"},{"name":"v1.9.0","sha":"3a19eff5ef1d2998e4ca50b2b44dc0cbd1934ece","kind":"tag","published_at":"2024-02-13T14:15:18.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.9.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.9.0/manifests"},{"name":"v1.8.1","sha":"cb03dc8beaf10edfd457af5d380e00ca71bf3581","kind":"tag","published_at":"2022-03-19T09:27:16.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.8.1","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.1/manifests"},{"name":"v1.8.0","sha":"c77ed5d3aae667f951c17f3fb4a9bcda18cdd2ef","kind":"tag","published_at":"2022-03-09T06:31:01.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.8.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.8.0/manifests"},{"name":"v1.7.0","sha":"fb72ee53010e91f93c002ebfcd1378329c2df359","kind":"tag","published_at":"2018-12-10T20:15:55.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.7.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.7.0/manifests"},{"name":"v1.6.0","sha":"e5786347f901f4e6ea42d67ef0689e0219c2cc21","kind":"tag","published_at":"2018-01-10T06:44:01.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.6.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.6.0/manifests"},{"name":"v1.5.0","sha":"b73a2ed04adcc3ab85bbb339d2bb65e35bc84954","kind":"tag","published_at":"2018-01-02T08:20:35.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.5.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.5.0/manifests"},{"name":"v1.4.1","sha":"1b3b49ebdb6ce0321cb30eccc9c7c145c7ee5d9f","kind":"tag","published_at":"2015-05-24T16:13:35.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.4.1","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.1/manifests"},{"name":"v1.4.0","sha":"8b3cabc23f58d88494073ce594e0dcddda8c43f3","kind":"tag","published_at":"2015-05-09T12:52:20.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.4.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.4.0/manifests"},{"name":"v1.3.0","sha":"ae92f80cbba6e520c089312492803b47a389f8d2","kind":"tag","published_at":"2014-12-06T18:40:38.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.3.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"ce66e957ab9ee664e9fb1b310e6ce51c97697a2a","kind":"tag","published_at":"2013-12-11T21:41:43.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.2.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.2.0/manifests"},{"name":"v1.1.2","sha":"414eea2c68112508851c488ef01b5c61e1ee0017","kind":"tag","published_at":"2013-06-28T20:23:02.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.1.2","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.2/manifests"},{"name":"v1.1.1","sha":"cd9d827198ba1f07490a913b2b0e6ed62a663091","kind":"tag","published_at":"2013-05-10T11:32:28.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.1.1","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.1/manifests"},{"name":"v1.1.0","sha":"6b3e6dc382df7d81eafb5917bcb2fddd10ac5c5f","kind":"tag","published_at":"2013-02-08T21:29:50.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/v1.1.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/v1.1.0/manifests"},{"name":"1.0.0","sha":"06ef7a3336e59110349f8ae75615d09a5e3a8aec","kind":"tag","published_at":"2012-10-10T21:56:29.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/1.0.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/1.0.0/manifests"},{"name":"0.1.0","sha":"9729a333b36170024a43277b75a800c89713ad01","kind":"tag","published_at":"2012-10-01T21:18:35.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/0.1.0","html_url":"https://github.com/ryanb/letter_opener/releases/tag/0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.1.0/manifests"},{"name":"0.0.2","sha":"2b19f1c61f5ccc37a829f71faaed2d89a7e3429b","kind":"tag","published_at":"2011-09-07T23:07:21.000Z","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/0.0.2","html_url":"https://github.com/ryanb/letter_opener/releases/tag/0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags/0.0.2/manifests"}]},"repo_metadata_updated_at":"2024-11-20T08:12:21.944Z","dependent_packages_count":80,"downloads":109202305,"downloads_period":"total","dependent_repos_count":22327,"rankings":{"downloads":0.26984534070761923,"dependent_repos_count":0.23918109744538976,"dependent_packages_count":0.38246674323435287,"stargazers_count":0.37131610932081494,"forks_count":1.7551097779908789,"docker_downloads_count":0.25980977018543505,"average":0.5462881398140818},"purl":"pkg:gem/letter_opener","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/rubygems/letter_opener","docker_dependents_count":320,"docker_downloads_count":481387397,"usage_url":"https://repos.ecosyste.ms/usage/rubygems/letter_opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/rubygems/letter_opener/dependencies","status":null,"funding_links":[],"critical":true,"issue_metadata":{"last_synced_at":"2024-11-19T05:36:24.594Z","issues_count":54,"pull_requests_count":61,"avg_time_to_close_issue":5211407.423076923,"avg_time_to_close_pull_request":4031806.566666667,"issues_closed_count":52,"pull_requests_closed_count":60,"pull_request_authors_count":41,"issue_authors_count":53,"avg_comments_per_issue":4.62962962962963,"avg_comments_per_pull_request":1.8360655737704918,"merged_pull_requests_count":47,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":9,"past_year_pull_requests_count":5,"past_year_avg_time_to_close_issue":316340.14285714284,"past_year_avg_time_to_close_pull_request":2408661.75,"past_year_issues_closed_count":7,"past_year_pull_requests_closed_count":4,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":9,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":2.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":4,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/issues","maintainers":[{"login":"nashby","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nashby"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/letter_opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/letter_opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/letter_opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/letter_opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/packages/letter_opener/codemeta","maintainers":[{"uuid":"48635","login":"nashby","name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://rubygems.org/profiles/nashby","role":null,"created_at":"2022-11-09T09:38:29.015Z","updated_at":"2022-11-09T09:38:29.015Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/nashby/packages"},{"uuid":"991","login":"ryanb","name":null,"email":null,"url":null,"packages_count":15,"html_url":"https://rubygems.org/profiles/ryanb","role":null,"created_at":"2022-11-09T09:38:28.993Z","updated_at":"2022-11-09T09:38:28.993Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/rubygems.org/maintainers/ryanb/packages"}],"registry":{"name":"rubygems.org","url":"https://rubygems.org","ecosystem":"rubygems","default":true,"packages_count":205548,"maintainers_count":68472,"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"}},{"id":13466919,"name":"ruby-letter-opener","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-09T16:52:15.415Z","latest_release_published_at":"2026-02-09T16:52:15.415Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-09T17:07:02.579Z","created_at":"2026-02-09T16:52:15.131Z","updated_at":"2026-03-09T17:32:04.914Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-letter-opener?arch=source\u0026distro=ubuntu-24.10\u0026repository_url=https://launchpad.net/ubuntu/oracular","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"ubuntu-24.10","url":"https://launchpad.net/ubuntu/oracular","ecosystem":"ubuntu","default":false,"packages_count":38437,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"oracular","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.028Z","updated_at":"2026-04-27T18:20:37.303Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/namespaces"}},{"id":13779180,"name":"ruby-letter-opener","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-13T13:19:56.878Z","latest_release_published_at":"2026-02-13T13:19:56.878Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-13T22:38:44.725Z","created_at":"2026-02-13T13:19:56.351Z","updated_at":"2026-03-13T22:38:44.726Z","registry_url":"https://launchpad.net/ubuntu/+source/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-13T13:19:57.498Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/ruby-letter-opener?arch=source\u0026distro=ubuntu-22.04\u0026repository_url=https://launchpad.net/ubuntu/jammy","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"ubuntu-22.04","url":"https://launchpad.net/ubuntu/jammy","ecosystem":"ubuntu","default":false,"packages_count":34289,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"jammy"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:46.486Z","updated_at":"2026-04-27T18:20:36.155Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-22.04/namespaces"}},{"id":8614833,"name":"github.com/ryanb/letter_opener","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":[],"namespace":null,"versions_count":14,"first_release_published_at":"2023-12-02T02:15:09.624Z","latest_release_published_at":"2024-03-30T14:21:48.000Z","latest_release_number":"v1.10.0","last_synced_at":"2026-04-28T03:02:03.945Z","created_at":"2023-12-02T02:15:06.584Z","updated_at":"2026-04-28T03:02:03.946Z","registry_url":"https://pkg.go.dev/github.com/ryanb/letter_opener","install_command":"go get github.com/ryanb/letter_opener","documentation_url":"https://pkg.go.dev/github.com/ryanb/letter_opener#section-documentation","metadata":{},"repo_metadata":{"id":671278,"uuid":"2344621","full_name":"ryanb/letter_opener","owner":"ryanb","description":"Preview mail in the browser instead of sending.","archived":false,"fork":false,"pushed_at":"2024-08-02T07:09:54.000Z","size":237,"stargazers_count":3809,"open_issues_count":5,"forks_count":244,"subscribers_count":32,"default_branch":"master","last_synced_at":"2025-11-05T14:10:38.981Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/ryanb.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-09-07T21:17:22.000Z","updated_at":"2025-11-03T12:04:27.000Z","dependencies_parsed_at":"2024-06-18T10:51:06.346Z","dependency_job_id":"60e06c7e-ac94-47a6-84d2-1c1e90a85cc4","html_url":"https://github.com/ryanb/letter_opener","commit_stats":{"total_commits":252,"total_committers":67,"mean_commits":"3.7611940298507465","dds":0.5912698412698413,"last_synced_commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/ryanb/letter_opener","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","download_url":"https://codeload.github.com/ryanb/letter_opener/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/sbom","scorecard":{"id":791716,"data":{"date":"2025-08-11","repo":{"name":"github.com/ryanb/letter_opener","commit":"9038f2526619e9807191d50bf69d0c8599d75725"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"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":"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":"Code-Review","score":3,"reason":"Found 9/26 approved changesets -- score normalized to 3","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ruby.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":"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/ruby.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ruby.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/ryanb/letter_opener/ruby.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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"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":"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"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T07:44:42.237Z","repository_id":671278,"created_at":"2025-08-23T07:44:42.237Z","updated_at":"2025-08-23T07:44:42.237Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284263588,"owners_count":26975054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-13T02:00:06.582Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"ryanb","name":"Ryan Bates","uuid":"161","kind":"user","description":null,"email":"","website":"http://railscasts.com","location":"Southern Oregon","twitter":null,"company":"RailsCasts","icon_url":"https://avatars.githubusercontent.com/u/161?v=4","repositories_count":63,"last_synced_at":"2023-04-09T06:01:35.951Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/ryanb","funding_links":[],"total_stars":24765,"followers":null,"following":null,"created_at":"2022-11-02T16:21:35.929Z","updated_at":"2024-03-25T17:33:02.038Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryanb/repositories"},"tags":[]},"repo_metadata_updated_at":"2025-11-13T18:03:45.044Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":10.801592556016239,"dependent_packages_count":9.575730298247606,"stargazers_count":1.1226778316474293,"forks_count":1.7968998805482523,"docker_downloads_count":null,"average":5.824225141614882},"purl":"pkg:golang/github.com/ryanb/letter_opener","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/ryanb/letter_opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/ryanb/letter_opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/ryanb/letter_opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2025-09-01T06:02:05.603Z","issues_count":55,"pull_requests_count":62,"avg_time_to_close_issue":5128003.490566038,"avg_time_to_close_pull_request":4031806.566666667,"issues_closed_count":53,"pull_requests_closed_count":60,"pull_request_authors_count":42,"issue_authors_count":54,"avg_comments_per_issue":4.6,"avg_comments_per_pull_request":1.8225806451612903,"merged_pull_requests_count":47,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":4,"past_year_pull_requests_count":3,"past_year_avg_time_to_close_issue":282203.3333333333,"past_year_avg_time_to_close_pull_request":21549.0,"past_year_issues_closed_count":3,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":3,"past_year_issue_authors_count":4,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":1.3333333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/issues","maintainers":[{"login":"nashby","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nashby"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fryanb%2Fletter_opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fryanb%2Fletter_opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fryanb%2Fletter_opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fryanb%2Fletter_opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fryanb%2Fletter_opener/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2118894,"maintainers_count":0,"namespaces_count":782439,"keywords_count":112823,"github":"golang","metadata":{"funded_packages_count":53495},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-04-19T05:14:45.920Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}},{"id":13712700,"name":"ruby-letter-opener","ecosystem":"debian","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["misc"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-12T23:34:11.235Z","latest_release_published_at":"2026-02-12T23:34:11.235Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-13T03:29:21.048Z","created_at":"2026-02-12T23:34:11.070Z","updated_at":"2026-03-13T03:29:21.048Z","registry_url":"https://tracker.debian.org/pkg/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":"https://packages.debian.org/bookworm/ruby-letter-opener","metadata":{"component":"main","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-12T23:34:11.783Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-letter-opener?arch=source\u0026distro=debian-12","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"debian-12","url":"https://packages.debian.org/bookworm","ecosystem":"debian","default":true,"packages_count":34734,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"debian","metadata":{"codename":"bookworm"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.459Z","updated_at":"2026-04-27T18:20:38.992Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/namespaces"}},{"id":13669115,"name":"ruby-letter-opener","ecosystem":"debian","description":null,"homepage":"https://github.com/ryanb/letter_opener","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/ryanb/letter_opener","keywords_array":["misc"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-12T12:29:03.361Z","latest_release_published_at":"2026-02-12T12:29:03.361Z","latest_release_number":"1.7.0-1.1","last_synced_at":"2026-03-14T18:10:27.259Z","created_at":"2026-02-12T12:29:03.179Z","updated_at":"2026-03-14T18:10:27.259Z","registry_url":"https://tracker.debian.org/pkg/ruby-letter-opener","install_command":"apt-get install ruby-letter-opener","documentation_url":"https://packages.debian.org/trixie/ruby-letter-opener","metadata":{"component":"main","architecture":"all","priority":"optional","binary":"ruby-letter-opener","standards_version":"4.3.0","maintainer":"Debian Ruby Extras Maintainers \u003cpkg-ruby-extras-maintainers@lists.alioth.debian.org\u003e","build_depends":"debhelper (\u003e= 11~), gem2deb, ruby-launchy-shim, ruby-mail, ruby-rspec","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-12T12:29:04.888Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/ruby-letter-opener?arch=source\u0026distro=debian-13\u0026repository_url=https://packages.debian.org/trixie","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/ruby-letter-opener","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/ruby-letter-opener","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/ruby-letter-opener/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-letter-opener/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-letter-opener/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-letter-opener/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-letter-opener/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/ruby-letter-opener/codemeta","maintainers":[],"registry":{"name":"debian-13","url":"https://packages.debian.org/trixie","ecosystem":"debian","default":false,"packages_count":38024,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"debian","metadata":{"codename":"trixie"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.448Z","updated_at":"2026-04-27T18:20:39.853Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/namespaces"}}],"commits":{"id":3258,"full_name":"ryanb/letter_opener","default_branch":"master","total_commits":253,"total_committers":68,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":3.7205882352941178,"dds":0.5928853754940712,"past_year_total_commits":1,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":1.0,"past_year_dds":0.0,"last_synced_at":"2026-04-29T09:35:00.085Z","last_synced_commit":"4d1b6acbc95ed30fd775899c53bd02d9624c6564","created_at":"2023-03-07T09:16:58.369Z","updated_at":"2026-04-29T09:34:45.839Z","committers":[{"name":"Vasiliy Ermolovich","email":"younash@gmail.com","login":"nashby","count":103},{"name":"Ryan Bates","email":"ryan@railscasts.com","login":"ryanb","count":28},{"name":"David Cornu","email":"davidjcornu@gmail.com","login":"davidcornu","count":14},{"name":"Koichi ITO","email":"koic.ito@gmail.com","login":"koic","count":9},{"name":"Ryunosuke Sato","email":"tricknotes.rs@gmail.com","login":"tricknotes","count":7},{"name":"Olle Jonsson","email":"olle.jonsson@gmail.com","login":"olleolleolle","count":6},{"name":"Akira Matsuda","email":"ronnie@dio.jp","login":"amatsuda","count":4},{"name":"Kulgar","email":"regmillet@ct2c.fr","login":"Kulgar","count":3},{"name":"Jean Mertz","email":"jean@mertz.fm","login":"JeanMertz","count":2},{"name":"Kevin McPhillips","email":"github@kevinmcphillips.ca","login":"kmcphillips","count":2},{"name":"Mark Dodwell","email":"mark@mkdynamic.co.uk","login":"mkdynamic","count":2},{"name":"Masato Nakamura","email":"masato.nakamura145@gmail.com","login":"m-nakamura145","count":2},{"name":"Paul Whitehead","email":"prwhitehead@gmail.com","login":"prdanelli","count":2},{"name":"Peter Goldstein","email":"peter.m.goldstein@gmail.com","login":"petergoldstein","count":2},{"name":"Philip Hallstrom","email":"philip@pjkh.com","login":"phallstrom","count":2},{"name":"Samuel Cochran","email":"sj26@sj26.com","login":"sj26","count":2},{"name":"Stan Carver","email":"stan@a1webconsulting.com","login":"scarver2","count":2},{"name":"Tyler Collier","email":"git@tylercollier.com","login":"tylercollier","count":2},{"name":"Wes Gibbs","email":"wesgibbs@gmail.com","login":"wesgibbs","count":2},{"name":"centrevillage","email":"centrevillage@gmail.com","login":"centrevillage","count":2},{"name":"Jared Beck","email":"jared@jaredbeck.com","login":"jaredbeck","count":2},{"name":"Fabio Rehm","email":"fgrehm@gmail.com","login":"fgrehm","count":2},{"name":"Claire McGinty","email":"claire.d.mcginty@gmail.com","login":"clairemcginty","count":2},{"name":"Bruno Michel","email":"bmichel@menfin.info","login":"nono","count":2},{"name":"Steve Tipton","email":"steve.tipton@employmentguide.com","login":null,"count":2},{"name":"Jacob Maine","email":"pair+jmaine@citizencode.io","login":null,"count":2},{"name":"Bram Plessers","email":"webdevotion","login":null,"count":2},{"name":"sho shimohata","email":"sho.shimohata@crowdworks.co.jp","login":null,"count":1},{"name":"Søren Houen","email":"houen@presenti.dk","login":null,"count":1},{"name":"Joseph Choi","email":"joseph@brainlure.com","login":null,"count":1},{"name":"Jordan","email":"taikoguy36@gmail.com","login":null,"count":1},{"name":"Agustin Cavilliotti","email":"cavi21[at]gmail.com","login":null,"count":1},{"name":"Adrian Gonzalez","email":"bernardogzzf@gmail.com","login":"Adrian2112","count":1},{"name":"Adrien Smith","email":"adrien@bouldersmiths.com","login":"PanisSupraOmnia","count":1},{"name":"Mike Subelsky","email":"mike@subelsky.com","login":"subelsky","count":1},{"name":"Nikita","email":"nikita.cernovs@gmail.com","login":"nikitachernov","count":1},{"name":"Pat George","email":"pat.george@gmail.com","login":"pcg79","count":1},{"name":"Patrick Bougie","email":"patrick@bougie.ca","login":"pbougie","count":1},{"name":"Piotr Usewicz","email":"piotr@layer22.com","login":"pusewicz","count":1},{"name":"Ryan LeCompte","email":"lecompte@gmail.com","login":"ryanlecompte","count":1},{"name":"Shinichi Maeshima","email":"netwillnet@gmail.com","login":"willnet","count":1},{"name":"Steven Harman","email":"steven@harmanly.com","login":"stevenharman","count":1},{"name":"Viktor Fonic","email":"viktor.fonic@gmail.com","login":"vfonic","count":1},{"name":"Yaroslav Shmarov","email":"yshmarov@gmail.com","login":"yshmarov","count":1},{"name":"amd","email":"amd@gurge.com","login":"gurgeous","count":1},{"name":"danielmbarlow","email":"danielmbarlow@gmail.com","login":"danielmbarlow","count":1},{"name":"harmolipi","email":"nikob381@gmail.com","login":"harmolipi","count":1},{"name":"sanemat","email":"o.gata.ken@gmail.com","login":"sanemat","count":1},{"name":"thomas morgan","email":"tm@iprog.com","login":"zarqman","count":1},{"name":"weexpectedTHIS","email":"kylepeyton@gmail.com","login":"weexpectedTHIS","count":1},{"name":"wonda-tea-coffee","email":"lagrange.resolvent@gmail.com","login":"wonda-tea-coffee","count":1},{"name":"Alex Lau","email":"laux0083@gmail.com","login":"MrAlexLau","count":1},{"name":"Alexandre Lairan","email":"lairana@free.fr","login":"alex-lairan","count":1},{"name":"Coby Chapple","email":"coby@cobychapple.com","login":"cobyism","count":1},{"name":"Damir","email":"damirz@gmail.com","login":"sidonath","count":1},{"name":"Daniel Finnie","email":"dan@danfinnie.com","login":"danfinnie","count":1},{"name":"Daniel Rikowski","email":"daniel@rikowski.info","login":"daniel-rikowski","count":1},{"name":"Dominic Rout","email":"d.rout@sheffield.ac.uk","login":"domrout","count":1},{"name":"Edgars Beigarts","email":"edgars.beigarts@makit.lv","login":"ebeigarts","count":1},{"name":"Federico Soria","email":"fedesoria@gmail.com","login":"fedesoria","count":1},{"name":"Hugo Maia Vieira","email":"hugomaiavieira@gmail.com","login":"hugomaiavieira","count":1},{"name":"Joaquín Vicente","email":"joakin@gmail.com","login":"wacko","count":1},{"name":"Jonathan Chan","email":"jc@jmccc.com","login":"jonmchan","count":1},{"name":"Kevin Jalbert","email":"kevin.j.jalbert@gmail.com","login":"kevinjalbert","count":1},{"name":"Krystan HuffMenne","email":"krystan@tilde.io","login":"gitKrystan","count":1},{"name":"Michael Bleigh","email":"mbleigh@mbleigh.com","login":"mbleigh","count":1},{"name":"Michael Durrant","email":"m2@snap2web.com","login":"durrantm","count":1},{"name":"Mike Boone","email":"mike@boonedocks.net","login":"boone","count":1}],"past_year_committers":[{"name":"Shinichi Maeshima","email":"netwillnet@gmail.com","login":"willnet","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-29T00:00:10.453Z","repositories_count":6222906,"commits_count":900372101,"contributors_count":34905477,"owners_count":1147483,"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":"ryanb/letter_opener","html_url":"https://github.com/ryanb/letter_opener","last_synced_at":"2026-04-26T11:00:29.542Z","status":null,"issues_count":55,"pull_requests_count":67,"avg_time_to_close_issue":5128003.490566038,"avg_time_to_close_pull_request":4302031.5,"issues_closed_count":53,"pull_requests_closed_count":62,"pull_request_authors_count":43,"issue_authors_count":54,"avg_comments_per_issue":4.545454545454546,"avg_comments_per_pull_request":1.6567164179104479,"merged_pull_requests_count":49,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":3,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":22506955.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.3333333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"created_at":"2023-05-12T13:07:28.215Z","updated_at":"2026-04-26T11:00:29.542Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryanb%2Fletter_opener/issues","issue_labels_count":{"waiting":1},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":54,"CONTRIBUTOR":1},"pull_request_author_associations_count":{"CONTRIBUTOR":45,"NONE":21,"COLLABORATOR":1},"issue_authors":{"jamesst20":2,"jigarbhatt2711":1,"BakoviDagi":1,"cassidyclawson":1,"damienlethiec":1,"sars":1,"sappapp":1,"miguelpeniche":1,"eltiare":1,"alpemaca":1,"cpanderson":1,"n-rodriguez":1,"chaffeqa":1,"patrickberkeley":1,"coorasse":1,"henrikj242":1,"jhuang315":1,"james-em":1,"PrathamMajithia":1,"calebhearth":1,"cschilbe":1,"ChaabaneAnas":1,"noctivityinc":1,"prdanelli":1,"faizaankhan":1,"lucianosousa":1,"blindMoe":1,"bryszard":1,"lmonica97":1,"rahul2240":1,"nicolas-besnard":1,"buzztaiki":1,"koenhandekyn":1,"railsfactory-madhusudhan":1,"ColinTheRobot":1,"cjba7":1,"x9sim9":1,"davidmles":1,"epugh":1,"mokolabs":1,"phylor":1,"palexvs":1,"ivdma":1,"jponc":1,"caesarsol":1,"axlekb":1,"NullVoxPopuli":1,"marcosmartingm":1,"Ingosmar89219":1,"SheikhSajid":1,"ghost":1,"pixiitech":1,"drsharp":1,"TomFreudenberg":1},"pull_request_authors":{"olleolleolle":6,"koic":6,"amatsuda":4,"m-nakamura145":4,"tricknotes":3,"Kulgar":2,"jaredbeck":2,"sj26":2,"petergoldstein":2,"cschilbe":2,"willnet":2,"stevenharman":1,"nashby":1,"arkirchner":1,"pusewicz":1,"listrophy":1,"davidcornu":1,"samofals":1,"dceluis":1,"frankyston":1,"kevinjalbert":1,"zarqman":1,"vfonic":1,"benjamin-hull":1,"PanisSupraOmnia":1,"phylor":1,"bradrees":1,"kuroponzu":1,"centrevillage":1,"ihatov08":1,"favrik":1,"jonmchan":1,"wonda-tea-coffee":1,"wacko":1,"gogainda":1,"kylekeesling":1,"yshmarov":1,"prdanelli":1,"alex-lairan":1,"daniel-rikowski":1,"cmer":1,"taki":1,"gitKrystan":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-30T00:00:06.639Z","repositories_count":14448193,"issues_count":34185574,"pull_requests_count":112233628,"authors_count":11249282,"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":{"NONE":2,"CONTRIBUTOR":1},"past_year_issue_authors":{},"past_year_pull_request_authors":{"willnet":2,"cmer":1},"maintainers":[{"login":"nashby","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nashby"}],"active_maintainers":[]},"events":{"total":{"PullRequestEvent":1,"ForkEvent":6,"IssuesEvent":3,"WatchEvent":98,"IssueCommentEvent":4,"PullRequestReviewEvent":1,"CommitCommentEvent":1},"last_year":{"PullRequestEvent":1,"ForkEvent":2,"IssuesEvent":1,"WatchEvent":40,"IssueCommentEvent":1,"PullRequestReviewEvent":1,"CommitCommentEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"rubygems","filepath":"Gemfile","sha":null,"kind":"manifest","created_at":"2022-08-06T10:00:27.341Z","updated_at":"2022-08-06T10:00:27.341Z","repository_link":"https://github.com/ryanb/letter_opener/blob/master/Gemfile","dependencies":[{"id":584281786,"package_name":"net-imap","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584281787,"package_name":"net-pop","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584281788,"package_name":"net-smtp","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false},{"id":584281789,"package_name":"rake","ecosystem":"rubygems","requirements":"\u003e= 0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"rubygems","filepath":"letter_opener.gemspec","sha":null,"kind":"manifest","created_at":"2022-08-06T10:00:27.353Z","updated_at":"2022-08-06T10:00:27.353Z","repository_link":"https://github.com/ryanb/letter_opener/blob/master/letter_opener.gemspec","dependencies":[{"id":584281797,"package_name":"launchy","ecosystem":"rubygems","requirements":"\u003e= 2.2, \u003c 3","direct":true,"kind":"runtime","optional":false},{"id":584281798,"package_name":"rspec","ecosystem":"rubygems","requirements":"~\u003e 3.10.0","direct":true,"kind":"development","optional":false},{"id":584281799,"package_name":"mail","ecosystem":"rubygems","requirements":"~\u003e 2.6.0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ruby.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T10:35:34.056Z","updated_at":"2023-01-13T10:35:34.056Z","repository_link":"https://github.com/ryanb/letter_opener/blob/master/.github/workflows/ruby.yml","dependencies":[{"id":6875552531,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875552532,"package_name":"ruby/setup-ruby","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]}],"score":33.36300428242422,"created_at":"2024-12-15T21:38:07.887Z","updated_at":"2026-04-30T04:02:41.421Z","avatar_url":"https://github.com/ryanb.png","language":"Ruby","monthly_downloads":0,"readme":"# Letter Opener [![Ruby](https://github.com/ryanb/letter_opener/actions/workflows/ruby.yml/badge.svg)](https://github.com/ryanb/letter_opener/actions/workflows/ruby.yml)\n\nPreview email in the default browser instead of sending it. This means you do not need to set up email delivery in your development environment, and you no longer need to worry about accidentally sending a test email to someone else's address.\n\n## Rails Setup\n\nFirst add the gem to your development environment and run the `bundle` command to install it.\n\n```rb\ngem \"letter_opener\", group: :development\n```\n\nThen set the delivery method in `config/environments/development.rb`\n\n```rb\nconfig.action_mailer.delivery_method = :letter_opener\nconfig.action_mailer.perform_deliveries = true\n```\n\nNow any email will pop up in your browser instead of being sent. The messages are stored in `tmp/letter_opener`.\nIf you want to change application that will be used to open your emails you should override `LAUNCHY_APPLICATION` environment variable or set `Launchy.application` in the initializer.\n\n### Configuration\n\n```rb\nLetterOpener.configure do |config|\n  # To overrider the location for message storage.\n  # Default value is `tmp/letter_opener`\n  config.location = Rails.root.join('tmp', 'my_mails')\n\n  # To render only the message body, without any metadata or extra containers or styling.\n  # Default value is `:default` that renders styled message with showing useful metadata.\n  config.message_template = :light\n\n  # To change default file URI scheme you can provide `file_uri_scheme` config.\n  # It might be useful when you use WSL (Windows Subsystem for Linux) and default\n  # scheme doesn't work for you.\n  # Default value is blank\n  config.file_uri_scheme = 'file://///wsl$/Ubuntu-18.04'\nend\n```\n\n## Non Rails Setup\n\nIf you aren't using Rails, this can be easily set up with the Mail gem. Just set the delivery method when configuring Mail and specify a location.\n\n```rb\nrequire \"letter_opener\"\nMail.defaults do\n  delivery_method LetterOpener::DeliveryMethod, location: File.expand_path('../tmp/letter_opener', __FILE__)\nend\n```\n\nThe method is similar if you're using the Pony gem:\n\n```rb\nrequire \"letter_opener\"\nPony.options = {\n  via: LetterOpener::DeliveryMethod,\n  via_options: {location: File.expand_path('../tmp/letter_opener', __FILE__)}\n}\n```\n\nAlternatively, if you are using ActionMailer directly (without Rails) you will need to add the delivery method.\n\n```rb\nrequire \"letter_opener\"\nActionMailer::Base.add_delivery_method :letter_opener, LetterOpener::DeliveryMethod, :location =\u003e File.expand_path('../tmp/letter_opener', __FILE__)\nActionMailer::Base.delivery_method = :letter_opener\n```\n\n## Remote Alternatives\n\nLetter Opener uses [Launchy](https://github.com/copiousfreetime/launchy) to open sent mail in the browser. This assumes the Ruby process is running on the local development machine. If you are using a separate staging server or VM this will not work. In that case consider using [Mailtrap](http://mailtrap.io/) or [MailCatcher](http://mailcatcher.me/).\n\nIf you are running your application within a Docker Container or VM and do not have a browser available to open emails received by Letter Opener, you may see the following error:\n\n```\nWARN: Launchy::CommandNotFoundError: Unable to find a browser command. If this is unexpected, Please rerun with environment variable LAUNCHY_DEBUG=true or the '-d' commandline option and file a bug at https://github.com/copiousfreetime/launchy/issues/new\n```\n\nTo resolve this, simply set the following ENV variables:\n\n```\nLAUNCHY_DRY_RUN=true\nBROWSER=/dev/null\n```\n\nIn order to keep this project simple, I don't have plans to turn it into a Rails engine with an interface for browsing the sent mail but there is a [gem you can use for that](https://github.com/fgrehm/letter_opener_web).\n\n\n## Development \u0026 Feedback\n\nQuestions or problems? Please use the [issue tracker](https://github.com/ryanb/letter_opener/issues). If you would like to contribute to this project, fork this repository and run `bundle` and `rake` to run the tests. Pull requests appreciated.\n\nSpecial thanks to the [mail_view](https://github.com/37signals/mail_view/) gem for inspiring this project and for their mail template. Also thanks to [Vasiliy Ermolovich](https://github.com/nashby) for helping manage this project.\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["activerecord","activejob","mvc","rubygems","crash-reporting","rspec","rack","authorization","sinatra","oauth2"],"project_url":"https://ruby.ecosyste.ms/api/v1/projects/373","html_url":"https://ruby.ecosyste.ms/projects/373"}