{"id":1361,"url":"https://github.com/snarfed/granary","last_synced_at":"2026-08-13T06:30:52.034Z","repository":{"id":2577060,"uuid":"3557653","full_name":"snarfed/granary","owner":"snarfed","description":"💬 The social web translator","archived":false,"fork":false,"pushed_at":"2026-08-05T19:05:34.000Z","size":11079,"stargazers_count":516,"open_issues_count":37,"forks_count":63,"subscribers_count":18,"default_branch":"main","last_synced_at":"2026-08-06T06:13:15.212Z","etag":null,"topics":["activitypub","activitystreams","atom","atproto","bluesky","converter","fediverse","feed","html","indieweb","json","jsonfeed","mastodon","microformats2","rest-api","rss"],"latest_commit_sha":null,"homepage":"https://granary.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snarfed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2012-02-27T05:30:53.000Z","updated_at":"2026-08-05T19:06:20.000Z","dependencies_parsed_at":"2026-08-06T01:44:21.308Z","dependency_job_id":null,"html_url":"https://github.com/snarfed/granary","commit_stats":{"total_commits":3391,"total_committers":22,"mean_commits":"154.13636363636363","dds":"0.20731347685048662","last_synced_commit":"5cff4d831e380c3dcd6d2a22552cee9e059b22ee"},"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/snarfed/granary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snarfed","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/sbom","scorecard":{"id":113188,"data":{"date":"2025-08-04","repo":{"name":"github.com/snarfed/granary","commit":"4961a69ed97d5433b5dbaf21b404b563d239ea77"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":5.2,"checks":[{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/23 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/auto-merge-dependabot.yaml:13","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/auto-merge-dependabot.yaml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/snarfed/granary/auto-merge-dependabot.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/snarfed/granary/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/snarfed/granary/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/snarfed/granary/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/snarfed/granary/codeql-analysis.yml/main?enable=pin","Info:   0 out of   4 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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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: Creative Commons Zero v1.0 Universal: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 7 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-wj6h-64fc-37mp"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T16:34:36.129Z","repository_id":2577060,"created_at":"2025-08-15T16:34:36.130Z","updated_at":"2025-08-15T16:34:36.130Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36358836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-06T04:43:03.162Z","status":"online","status_checked_at":"2026-08-07T02:00:06.708Z","response_time":57,"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":{"login":"snarfed","name":"Ryan Barrett","uuid":"778068","kind":"user","description":"","email":"github@ryanb.org","website":"snarfed.org","location":"San Francisco","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/778068?u=5b3ff06dc08ee18aee4a7603e3598484218a7ed4\u0026v=4","repositories_count":153,"last_synced_at":"2026-08-06T16:59:04.905Z","metadata":{"has_sponsors_listing":false,"funding":null},"html_url":"https://github.com/snarfed","funding_links":[],"total_stars":3400,"followers":601,"following":109,"created_at":"2022-11-03T05:17:50.152Z","updated_at":"2026-08-06T16:59:04.919Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snarfed","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snarfed/repositories"},"packages":[{"id":2752141,"name":"granary","ecosystem":"pypi","description":"The social web translator","homepage":"https://granary.io/","licenses":"CC0-1.0","normalized_licenses":["CC0-1.0"],"repository_url":"https://github.com/snarfed/granary","keywords_array":["social","facebook","flickr","github","instagram","twitter","activitystreams","html","microformats2","meetup","mf2","atom","rss","jsonfeed"],"namespace":null,"versions_count":37,"first_release_published_at":"2015-07-10T22:37:46.000Z","latest_release_published_at":"2016-06-27T18:33:33.000Z","latest_release_number":"1.4.1","last_synced_at":"2026-08-12T06:01:52.351Z","created_at":"2022-04-10T11:11:04.693Z","updated_at":"2026-08-12T06:01:52.351Z","registry_url":"https://pypi.org/project/granary/","install_command":"pip install granary --index-url https://pypi.org/simple","documentation_url":"https://granary.readthedocs.io/","metadata":{"funding":null,"documentation":"https://granary.readthedocs.io/","classifiers":["Development Status :: 5 - Production/Stable","Environment :: Web Environment","Intended Audience :: Developers","Programming Language :: Python :: 3","Programming Language :: Python :: 3.9","Topic :: Software Development :: Libraries :: Python Modules"],"normalized_name":"granary","project_status":null},"repo_metadata":{"id":2577060,"uuid":"3557653","full_name":"snarfed/granary","owner":"snarfed","description":"💬 The social web translator","archived":false,"fork":false,"pushed_at":"2024-05-01T05:39:51.000Z","size":9508,"stargazers_count":421,"open_issues_count":34,"forks_count":56,"subscribers_count":21,"default_branch":"main","last_synced_at":"2024-05-01T13:55:26.455Z","etag":null,"topics":["activitypub","activitystreams","atom","atproto","bluesky","converter","fediverse","feed","html","indieweb","json","jsonfeed","mastodon","microformats2","rest-api","rss"],"latest_commit_sha":null,"homepage":"https://granary.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/snarfed.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-02-27T05:30:53.000Z","updated_at":"2024-06-25T06:00:55.772Z","dependencies_parsed_at":"2023-07-05T17:00:23.431Z","dependency_job_id":"3f156e57-2732-4cc2-869f-e64e20fc43b8","html_url":"https://github.com/snarfed/granary","commit_stats":{"total_commits":3211,"total_committers":22,"mean_commits":"145.95454545454547","dds":0.2005605730302087,"last_synced_commit":"788815b19e5a055abc153b08eb28b0a2246b256e"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snarfed","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":217594386,"owners_count":16201672,"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":"snarfed","name":"Ryan Barrett","uuid":"778068","kind":"user","description":"","email":"","website":"https://snarfed.org/","location":"San Francisco","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/778068?u=5b3ff06dc08ee18aee4a7603e3598484218a7ed4\u0026v=4","repositories_count":133,"last_synced_at":"2024-06-11T15:40:58.354Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/snarfed","funding_links":[],"total_stars":2223,"followers":435,"following":111,"created_at":"2022-11-03T05:17:50.152Z","updated_at":"2024-06-11T15:41:03.011Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snarfed","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snarfed/repositories"},"tags":[{"name":"v7.0","sha":"9a67b5c05587ba2d35740ce46338f0b4a9d83113","kind":"tag","published_at":"2024-06-25T04:53:39.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v7.0","html_url":"https://github.com/snarfed/granary/releases/tag/v7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v7.0/manifests"},{"name":"v6.2","sha":"416c4de8ca15bd3f7221025f9c36dccb8fcc7b4b","kind":"tag","published_at":"2024-03-16T04:48:04.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v6.2","html_url":"https://github.com/snarfed/granary/releases/tag/v6.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v6.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v6.2/manifests"},{"name":"v6.1","sha":"67313b9c84adcd0aa0976e8f4618b495edb5d8e6","kind":"tag","published_at":"2023-09-16T14:18:44.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v6.1","html_url":"https://github.com/snarfed/granary/releases/tag/v6.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v6.1/manifests"},{"name":"v6.0","sha":"26b708fd2c6dc1170ec60aae850fccfb14b330ef","kind":"tag","published_at":"2023-03-22T20:36:59.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v6.0","html_url":"https://github.com/snarfed/granary/releases/tag/v6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v6.0/manifests"},{"name":"v5.0","sha":"724d6b22aca97ce09035c2d338f5b3c15d5aff07","kind":"tag","published_at":"2022-12-04T04:26:47.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v5.0","html_url":"https://github.com/snarfed/granary/releases/tag/v5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v5.0/manifests"},{"name":"v4.0","sha":"6321572d82a0b611e93cb244d294332aefa31132","kind":"tag","published_at":"2022-03-24T05:52:54.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v4.0","html_url":"https://github.com/snarfed/granary/releases/tag/v4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v4.0/manifests"},{"name":"v3.2","sha":"c671181401cd0f6b6af52b07cb0e27240cb4f3c7","kind":"tag","published_at":"2021-09-16T05:03:40.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v3.2","html_url":"https://github.com/snarfed/granary/releases/tag/v3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v3.2/manifests"},{"name":"v3.1","sha":"47ff426e784954f56fbdf124ca2b63367df31737","kind":"commit","published_at":"2021-04-04T06:26:08.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v3.1","html_url":"https://github.com/snarfed/granary/releases/tag/v3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v3.1/manifests"},{"name":"v3.0","sha":"fbcb98949fe2ea74d6ab59962ecd1ee5439c635a","kind":"tag","published_at":"2020-04-08T19:53:50.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v3.0","html_url":"https://github.com/snarfed/granary/releases/tag/v3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v3.0/manifests"},{"name":"v2.2","sha":"8bae17cb5e300e60d2fcff03a1b8efd097ce2506","kind":"tag","published_at":"2019-11-02T15:53:47.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v2.2","html_url":"https://github.com/snarfed/granary/releases/tag/v2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v2.2/manifests"},{"name":"v2.1","sha":"7865904d9a83abb03eadea211a0a5f4f9625d239","kind":"tag","published_at":"2019-09-06T05:04:08.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v2.1","html_url":"https://github.com/snarfed/granary/releases/tag/v2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v2.1/manifests"},{"name":"v2.0","sha":"4e4a1ca30380049388fb4d8e0c1fa2b6d38cbe65","kind":"tag","published_at":"2019-03-01T15:28:49.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v2.0","html_url":"https://github.com/snarfed/granary/releases/tag/v2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v2.0/manifests"},{"name":"v1.15","sha":"500c4221ca03044f74187cf29744eeb671e6ce74","kind":"tag","published_at":"2019-02-28T17:59:31.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.15","html_url":"https://github.com/snarfed/granary/releases/tag/v1.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.15/manifests"},{"name":"v1.14","sha":"a82fda568302ccc659736a927d7cf6415ca0b55f","kind":"tag","published_at":"2018-11-13T07:04:38.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.14","html_url":"https://github.com/snarfed/granary/releases/tag/v1.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.14/manifests"},{"name":"v1.13","sha":"551c1aedbfea731b170f18e812c333e00622a7b1","kind":"tag","published_at":"2018-08-09T00:08:35.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.13","html_url":"https://github.com/snarfed/granary/releases/tag/v1.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.13/manifests"},{"name":"v1.12-docs","sha":"01cf83fbfecfe360adf23fa9c4f76fb362b6be49","kind":"commit","published_at":"2018-03-24T23:15:16.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.12-docs","html_url":"https://github.com/snarfed/granary/releases/tag/v1.12-docs","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.12-docs","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.12-docs/manifests"},{"name":"v1.12","sha":"53686a81d01861b48664f53516d3d43f4ca7db8f","kind":"tag","published_at":"2018-03-24T23:09:55.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.12","html_url":"https://github.com/snarfed/granary/releases/tag/v1.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.12/manifests"},{"name":"v1.11-docs","sha":"2904f7339da52082c5a8ea20f7d652d27417f3a0","kind":"commit","published_at":"2018-03-09T17:38:05.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.11-docs","html_url":"https://github.com/snarfed/granary/releases/tag/v1.11-docs","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.11-docs","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.11-docs/manifests"},{"name":"v1.11","sha":"d621f8ecbd0e0a86fc9a9b70415b20e88166e933","kind":"tag","published_at":"2018-03-09T17:10:11.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.11","html_url":"https://github.com/snarfed/granary/releases/tag/v1.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.11/manifests"},{"name":"v1.10-docs","sha":"d74521cfe0a87602d9786f1f752378a32857f233","kind":"commit","published_at":"2017-12-11T18:24:26.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.10-docs","html_url":"https://github.com/snarfed/granary/releases/tag/v1.10-docs","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.10-docs","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.10-docs/manifests"},{"name":"v1.10","sha":"803e859db0cff29ca9a8283e3af1a8d3cb707295","kind":"tag","published_at":"2017-12-10T22:25:56.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.10","html_url":"https://github.com/snarfed/granary/releases/tag/v1.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.10/manifests"},{"name":"v1.9","sha":"11a0f73352f7acc7f79053b40d24a7e61807a625","kind":"tag","published_at":"2017-10-27T04:51:34.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.9","html_url":"https://github.com/snarfed/granary/releases/tag/v1.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.9/manifests"},{"name":"v1.8","sha":"4c78f830471d017ba502e97c9abd30949ba60d13","kind":"tag","published_at":"2017-08-29T19:06:34.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.8","html_url":"https://github.com/snarfed/granary/releases/tag/v1.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.8/manifests"},{"name":"v1.7","sha":"c5692019551c43eae7372a091a58f4f070607f24","kind":"tag","published_at":"2017-02-28T07:54:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.7","html_url":"https://github.com/snarfed/granary/releases/tag/v1.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.7/manifests"},{"name":"v1.6","sha":"68a8023c5d19d379be681107c8361ac55fb1dc9d","kind":"tag","published_at":"2016-11-27T03:34:13.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.6","html_url":"https://github.com/snarfed/granary/releases/tag/v1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.6/manifests"},{"name":"v1.5","sha":"d5aa3a7d282d5c84f8615b021c41a37d9678ad24","kind":"tag","published_at":"2016-08-25T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.5","html_url":"https://github.com/snarfed/granary/releases/tag/v1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.5/manifests"},{"name":"v1.4.1","sha":"0464716d27ba4ed0bd6fa074e3123ad0f42ddbd0","kind":"tag","published_at":"2016-06-27T07:01:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.4.1","html_url":"https://github.com/snarfed/granary/releases/tag/v1.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.4.1/manifests"},{"name":"v1.4.0","sha":"72cdedb432344336117c406feaa68db77041075e","kind":"tag","published_at":"2016-06-27T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.4.0","html_url":"https://github.com/snarfed/granary/releases/tag/v1.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.4.0/manifests"},{"name":"v1.3.1","sha":"45cf0da54288df8f543a85d62a694d5f45a67257","kind":"tag","published_at":"2016-04-07T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.3.1","html_url":"https://github.com/snarfed/granary/releases/tag/v1.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.3.1/manifests"},{"name":"v1.3.0","sha":"df6974d21812e11c5f53926404bae07ba2c781d7","kind":"tag","published_at":"2016-04-06T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.3.0","html_url":"https://github.com/snarfed/granary/releases/tag/v1.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.3.0/manifests"},{"name":"v1.2.0","sha":"c8f6011e0dc65bd3e912293c99771f2e416e4e5b","kind":"tag","published_at":"2016-01-11T08:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.2.0","html_url":"https://github.com/snarfed/granary/releases/tag/v1.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.2.0/manifests"},{"name":"v1.1.0","sha":"d76ce1e35b200f84cac52a6a5a5717b83aeee966","kind":"tag","published_at":"2015-09-06T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.1.0","html_url":"https://github.com/snarfed/granary/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.1.0/manifests"},{"name":"v1.0.1","sha":"b6aa0629f8bcd25e555706a9cbed4ad6bfc8816c","kind":"tag","published_at":"2015-07-11T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.0.1","html_url":"https://github.com/snarfed/granary/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.0.1/manifests"},{"name":"v1.0","sha":"b9d9b55510fa7dab61165871b9a717d7dcdff376","kind":"tag","published_at":"2015-07-10T07:00:00.000Z","download_url":"https://codeload.github.com/snarfed/granary/tar.gz/v1.0","html_url":"https://github.com/snarfed/granary/releases/tag/v1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/tags/v1.0/manifests"}]},"repo_metadata_updated_at":"2024-09-07T06:49:33.758Z","dependent_packages_count":0,"downloads":513,"downloads_period":"last-month","dependent_repos_count":15,"rankings":{"downloads":16.914275113772266,"dependent_repos_count":3.7895385052639057,"dependent_packages_count":7.373338280337238,"stargazers_count":3.3199902097791676,"forks_count":5.712672809240705,"docker_downloads_count":null,"average":7.4219629836786565},"purl":"pkg:pypi/granary","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/granary","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pypi/granary","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/granary/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2024-09-07T06:35:51.185Z","issues_count":35,"pull_requests_count":318,"avg_time_to_close_issue":67673757.9,"avg_time_to_close_pull_request":144109.52215189874,"issues_closed_count":20,"pull_requests_closed_count":316,"pull_request_authors_count":5,"issue_authors_count":13,"avg_comments_per_issue":3.6,"avg_comments_per_pull_request":0.5345911949685535,"merged_pull_requests_count":290,"bot_issues_count":0,"bot_pull_requests_count":306,"past_year_issues_count":13,"past_year_pull_requests_count":181,"past_year_avg_time_to_close_issue":3947760.4285714286,"past_year_avg_time_to_close_pull_request":119783.59776536313,"past_year_issues_closed_count":7,"past_year_pull_requests_closed_count":179,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":8,"past_year_avg_comments_per_issue":3.769230769230769,"past_year_avg_comments_per_pull_request":0.3425414364640884,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":174,"past_year_merged_pull_requests_count":165,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/issues","maintainers":[{"login":"snarfed","count":19,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/snarfed"},{"login":"jamietanna","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jamietanna"}],"active_maintainers":[{"login":"snarfed","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/snarfed"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/granary/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/granary/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/granary/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/granary/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/granary/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/granary/codemeta","maintainers":[{"uuid":"snarfed","login":"snarfed","name":null,"email":null,"url":null,"packages_count":9,"html_url":"https://pypi.org/user/snarfed/","role":null,"created_at":"2023-02-16T01:49:48.075Z","updated_at":"2023-02-16T01:49:48.075Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/snarfed/packages"},{"uuid":"jamietanna","login":"jamietanna","name":null,"email":null,"url":null,"packages_count":3,"html_url":"https://pypi.org/user/jamietanna/","role":null,"created_at":"2023-02-16T01:49:48.151Z","updated_at":"2023-02-16T01:49:48.151Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/jamietanna/packages"},{"uuid":"kylewm","login":"kylewm","name":null,"email":null,"url":null,"packages_count":5,"html_url":"https://pypi.org/user/kylewm/","role":null,"created_at":"2023-02-16T01:49:48.012Z","updated_at":"2023-02-16T01:49:48.012Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/kylewm/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":927918,"maintainers_count":398397,"namespaces_count":0,"keywords_count":309778,"github":"pypi","metadata":{"funded_packages_count":57398,"rate_limit":1},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-08-12T11:14:47.060Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}}],"commits":{"id":288506,"full_name":"snarfed/granary","default_branch":"main","total_commits":4190,"total_committers":24,"total_bot_commits":780,"total_bot_committers":1,"mean_commits":174.58333333333334,"dds":0.2503579952267303,"past_year_total_commits":482,"past_year_total_committers":4,"past_year_total_bot_commits":211,"past_year_total_bot_committers":1,"past_year_mean_commits":120.5,"past_year_dds":0.4522821576763485,"last_synced_at":"2026-08-11T05:30:31.166Z","last_synced_commit":"58d9afee12dc36ac6df81a81c5bb09ec17ba707b","created_at":"2023-03-08T16:05:28.225Z","updated_at":"2026-08-11T05:30:31.038Z","committers":[{"name":"Ryan Barrett","email":"git@ryanb.org","login":"snarfed","count":3141},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":780},{"name":"Kyle Mahan","email":"kyle.mahan@gmail.com","login":"kylewm","count":105},{"name":"stedn","email":"will.stedden@gmail.com","login":"stedn","count":37},{"name":"Joel Auterson","email":"joel.auterson@gmail.com","login":"JoelOtter","count":36},{"name":"Jamie Tanna","email":"jamie@jamietanna.co.uk","login":"jamietanna","count":25},{"name":"Charlie Birks","email":"charlie@daft.games","login":"Daft-Freak","count":15},{"name":"Kartik Prabhu","email":"katsdaway@gmail.com","login":"kartikprabhu","count":8},{"name":"Emma Kuo","email":"emma.c.kuo@gmail.com","login":"notenoughneon","count":7},{"name":"John Choi","email":"isnbh0@gmail.com","login":"isnbh0","count":6},{"name":"Kai Dederichs","email":"kai.dederichs@protonmail.com","login":"KDederichs","count":6},{"name":"Kyle Mahan","email":"kyle@kylewm.com","login":null,"count":3},{"name":"Barnaby Walters","email":"barnaby@waterpigs.co.uk","login":"barnabywalters","count":3},{"name":"Stephen Paul Weber","email":"singpolyma@singpolyma.net","login":"singpolyma","count":3},{"name":"sknebel","email":"sknebel","login":"sknebel","count":3},{"name":"Benjamin Esham","email":"benjamin@esham.io","login":"bdesham","count":2},{"name":"ImgBotApp","email":"ImgBotHelp@gmail.com","login":"ImgBotApp","count":2},{"name":"Tantek Çelik","email":"46418+tantek","login":"tantek","count":2},{"name":"James Ravenscroft","email":"ravenscroftj@gmail.com","login":"ravenscroftj","count":1},{"name":"Tim Vergenz","email":"vergenzt@gmail.com","login":"vergenzt","count":1},{"name":"jeremycherfas","email":"jcherfas@mac.com","login":"jeremycherfas","count":1},{"name":"Sourcery AI","email":"","login":null,"count":1},{"name":"Kyle Mahan","email":"kyle+github@kylewm.com","login":null,"count":1},{"name":"sebsel","email":"sebsel@seblog.nl","login":"sebsel","count":1}],"past_year_committers":[{"name":"Ryan Barrett","email":"git@ryanb.org","login":"snarfed","count":264},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":211},{"name":"Kai Dederichs","email":"kai.dederichs@protonmail.com","login":"KDederichs","count":6},{"name":"Tantek Çelik","email":"46418+tantek","login":"tantek","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-12T00:00:07.637Z","repositories_count":6632406,"commits_count":915346588,"contributors_count":39045027,"owners_count":1332179,"committers_count":3296234,"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":{"table":{"full_name":"snarfed/granary","html_url":"https://github.com/snarfed/granary","last_synced_at":"2026-08-12T06:01:15.886Z","status":null,"issues_count":44,"pull_requests_count":717,"avg_time_to_close_issue":85684693.70833333,"avg_time_to_close_pull_request":261370.29411764705,"issues_closed_count":24,"pull_requests_closed_count":680,"pull_request_authors_count":10,"issue_authors_count":16,"avg_comments_per_issue":2.9545454545454546,"avg_comments_per_pull_request":0.4700139470013947,"merged_pull_requests_count":618,"bot_issues_count":2,"bot_pull_requests_count":688,"past_year_issues_count":0,"past_year_pull_requests_count":97,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":436233.6790123457,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":81,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.28865979381443296,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":94,"past_year_merged_pull_requests_count":73,"created_at":"2023-05-09T10:45:58.858Z","updated_at":"2026-08-12T10:58:49.180Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/snarfed%2Fgranary/issues","issue_labels_count":{"table":{"new source":2,"dependencies":2,"now":1,"python":1}},"pull_request_labels_count":{"table":{"dependencies":683,"python":190,"github_actions":14}},"issue_author_associations_count":{"table":{"NONE":19,"OWNER":18,"CONTRIBUTOR":6,"COLLABORATOR":1}},"pull_request_author_associations_count":{"table":{"CONTRIBUTOR":707,"NONE":9,"OWNER":1}},"issue_authors":{"table":{"snarfed":18,"gRegorLove":4,"sjehuda":4,"JoelOtter":3,"imax9000":2,"aaronpk":2,"dependabot[bot]":2,"ThisIsMissEm":1,"tomasparks":1,"skpy":1,"bdesham":1,"blackcoffeexbt":1,"strugee":1,"mikae1":1,"eadmaster":1,"jamietanna":1}},"pull_request_authors":{"table":{"dependabot[bot]":688,"JoelOtter":11,"Daft-Freak":8,"sarajaksa":3,"isnbh0":2,"vergenzt":1,"KDederichs":1,"snarfed":1,"tomaioo":1,"tuanaiseo":1}},"host":{"table":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-08-13T00:00:06.201Z","repositories_count":16028291,"issues_count":40475035,"pull_requests_count":130913540,"authors_count":11442138,"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":{"table":{}},"past_year_pull_request_labels_count":{"table":{"dependencies":91,"python":85,"github_actions":6}},"past_year_issue_author_associations_count":{"table":{}},"past_year_pull_request_author_associations_count":{"table":{"CONTRIBUTOR":91,"NONE":3}},"past_year_issue_authors":{"table":{}},"past_year_pull_request_authors":{"table":{"dependabot[bot]":91,"KDederichs":1,"tomaioo":1,"tuanaiseo":1}},"maintainers":[{"table":{"login":"snarfed","count":19,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/snarfed"}},{"table":{"login":"jamietanna","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jamietanna"}}],"active_maintainers":[]}},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":193,"PullRequestEvent":418,"ForkEvent":8,"IssuesEvent":15,"WatchEvent":59,"IssueCommentEvent":125,"PushEvent":409,"PullRequestReviewEvent":29,"PullRequestReviewCommentEvent":25,"CreateEvent":185},"last_year":{"ReleaseEvent":1,"DeleteEvent":94,"PullRequestEvent":217,"ForkEvent":2,"IssuesEvent":6,"WatchEvent":10,"IssueCommentEvent":13,"PushEvent":195,"PullRequestReviewEvent":4,"PullRequestReviewCommentEvent":5,"CreateEvent":80}},"keywords":["activitypub","activitystreams","atom","atproto","bluesky","converter","fediverse","feed","html","indieweb","json","jsonfeed","mastodon","microformats2","rest-api","rss"],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2022-07-12T05:18:30.760Z","updated_at":"2022-07-12T05:18:30.760Z","repository_link":"https://github.com/snarfed/granary/blob/main/requirements.txt","dependencies":[{"id":153173204,"package_name":"oauth_dropins","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":153173205,"package_name":"gdata","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":153173206,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"==4.11.1","direct":true,"kind":"runtime","optional":false},{"id":153173207,"package_name":"brevity","ecosystem":"pypi","requirements":"==0.2.17","direct":true,"kind":"runtime","optional":false},{"id":153173208,"package_name":"cachetools","ecosystem":"pypi","requirements":"==5.1.0","direct":true,"kind":"runtime","optional":false},{"id":153173209,"package_name":"certifi","ecosystem":"pypi","requirements":"==2022.6.15","direct":true,"kind":"runtime","optional":false},{"id":153173210,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"==2.0.12","direct":true,"kind":"runtime","optional":false},{"id":153173211,"package_name":"click","ecosystem":"pypi","requirements":"==8.1.3","direct":true,"kind":"runtime","optional":false},{"id":153173212,"package_name":"colorama","ecosystem":"pypi","requirements":"==0.4.5","direct":true,"kind":"runtime","optional":false},{"id":153173213,"package_name":"Deprecated","ecosystem":"pypi","requirements":"==1.2.13","direct":true,"kind":"runtime","optional":false},{"id":153173214,"package_name":"domain2idna","ecosystem":"pypi","requirements":"==1.12.0","direct":true,"kind":"runtime","optional":false},{"id":153173215,"package_name":"ecdsa","ecosystem":"pypi","requirements":"==0.17.0","direct":true,"kind":"runtime","optional":false},{"id":153173216,"package_name":"extras","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":153173217,"package_name":"feedgen","ecosystem":"pypi","requirements":"==0.9.0","direct":true,"kind":"runtime","optional":false},{"id":153173218,"package_name":"feedparser","ecosystem":"pypi","requirements":"==6.0.10","direct":true,"kind":"runtime","optional":false},{"id":153173219,"package_name":"fixtures","ecosystem":"pypi","requirements":"==4.0.1","direct":true,"kind":"runtime","optional":false},{"id":153173220,"package_name":"Flask","ecosystem":"pypi","requirements":"==2.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173221,"package_name":"Flask-Caching","ecosystem":"pypi","requirements":"==2.0.0","direct":true,"kind":"runtime","optional":false},{"id":153173222,"package_name":"flask-gae-static","ecosystem":"pypi","requirements":"==0.2","direct":true,"kind":"runtime","optional":false},{"id":153173223,"package_name":"gdata","ecosystem":"pypi","requirements":"==4.0.1","direct":true,"kind":"runtime","optional":false},{"id":153173224,"package_name":"google-api-core","ecosystem":"pypi","requirements":"==2.7.1","direct":true,"kind":"runtime","optional":false},{"id":153173225,"package_name":"google-auth","ecosystem":"pypi","requirements":"==2.6.3","direct":true,"kind":"runtime","optional":false},{"id":153173226,"package_name":"google-cloud-appengine-logging","ecosystem":"pypi","requirements":"==1.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173227,"package_name":"google-cloud-audit-log","ecosystem":"pypi","requirements":"==0.2.2","direct":true,"kind":"runtime","optional":false},{"id":153173228,"package_name":"google-cloud-core","ecosystem":"pypi","requirements":"==2.2.3","direct":true,"kind":"runtime","optional":false},{"id":153173229,"package_name":"google-cloud-datastore","ecosystem":"pypi","requirements":"==1.15.4","direct":true,"kind":"runtime","optional":false},{"id":153173230,"package_name":"google-cloud-logging","ecosystem":"pypi","requirements":"==3.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173231,"package_name":"google-cloud-ndb","ecosystem":"pypi","requirements":"==1.11.1","direct":true,"kind":"runtime","optional":false},{"id":153173232,"package_name":"googleapis-common-protos","ecosystem":"pypi","requirements":"==1.56.3","direct":true,"kind":"runtime","optional":false},{"id":153173233,"package_name":"grpc-google-iam-v1","ecosystem":"pypi","requirements":"==0.12.4","direct":true,"kind":"runtime","optional":false},{"id":153173234,"package_name":"grpcio","ecosystem":"pypi","requirements":"==1.47.0","direct":true,"kind":"runtime","optional":false},{"id":153173235,"package_name":"gunicorn","ecosystem":"pypi","requirements":"==20.1.0","direct":true,"kind":"runtime","optional":false},{"id":153173236,"package_name":"html2text","ecosystem":"pypi","requirements":"==2020.1.16","direct":true,"kind":"runtime","optional":false},{"id":153173237,"package_name":"html5lib","ecosystem":"pypi","requirements":"==1.1","direct":true,"kind":"runtime","optional":false},{"id":153173238,"package_name":"humanfriendly","ecosystem":"pypi","requirements":"==10.0","direct":true,"kind":"runtime","optional":false},{"id":153173239,"package_name":"humanize","ecosystem":"pypi","requirements":"==4.2.3","direct":true,"kind":"runtime","optional":false},{"id":153173240,"package_name":"idna","ecosystem":"pypi","requirements":"==3.3","direct":true,"kind":"runtime","optional":false},{"id":153173241,"package_name":"itsdangerous","ecosystem":"pypi","requirements":"==2.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173242,"package_name":"Jinja2","ecosystem":"pypi","requirements":"==3.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173243,"package_name":"lxml","ecosystem":"pypi","requirements":"==4.9.1","direct":true,"kind":"runtime","optional":false},{"id":153173244,"package_name":"MarkupSafe","ecosystem":"pypi","requirements":"==2.1.1","direct":true,"kind":"runtime","optional":false},{"id":153173245,"package_name":"mf2py","ecosystem":"pypi","requirements":"==1.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173246,"package_name":"mf2util","ecosystem":"pypi","requirements":"==0.5.1","direct":true,"kind":"runtime","optional":false},{"id":153173247,"package_name":"mox3","ecosystem":"pypi","requirements":"==1.1.0","direct":true,"kind":"runtime","optional":false},{"id":153173248,"package_name":"oauthlib","ecosystem":"pypi","requirements":"==3.2.0","direct":true,"kind":"runtime","optional":false},{"id":153173249,"package_name":"packaging","ecosystem":"pypi","requirements":"==21.3","direct":true,"kind":"runtime","optional":false},{"id":153173250,"package_name":"pbr","ecosystem":"pypi","requirements":"==5.9.0","direct":true,"kind":"runtime","optional":false},{"id":153173251,"package_name":"praw","ecosystem":"pypi","requirements":"==7.6.0","direct":true,"kind":"runtime","optional":false},{"id":153173252,"package_name":"prawcore","ecosystem":"pypi","requirements":"==2.3.0","direct":true,"kind":"runtime","optional":false},{"id":153173253,"package_name":"proto-plus","ecosystem":"pypi","requirements":"==1.20.6","direct":true,"kind":"runtime","optional":false},{"id":153173254,"package_name":"protobuf","ecosystem":"pypi","requirements":"==3.20.1","direct":true,"kind":"runtime","optional":false},{"id":153173255,"package_name":"pyasn1","ecosystem":"pypi","requirements":"==0.4.8","direct":true,"kind":"runtime","optional":false},{"id":153173256,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"==0.2.8","direct":true,"kind":"runtime","optional":false},{"id":153173257,"package_name":"pymemcache","ecosystem":"pypi","requirements":"==3.5.2","direct":true,"kind":"runtime","optional":false},{"id":153173258,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.0.9","direct":true,"kind":"runtime","optional":false},{"id":153173259,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.8.2","direct":true,"kind":"runtime","optional":false},{"id":153173260,"package_name":"python-tumblpy","ecosystem":"pypi","requirements":"==1.1.4","direct":true,"kind":"runtime","optional":false},{"id":153173261,"package_name":"pytz","ecosystem":"pypi","requirements":"==2022.1","direct":true,"kind":"runtime","optional":false},{"id":153173262,"package_name":"PyYAML","ecosystem":"pypi","requirements":"==6.0","direct":true,"kind":"runtime","optional":false},{"id":153173263,"package_name":"redis","ecosystem":"pypi","requirements":"==4.3.4","direct":true,"kind":"runtime","optional":false},{"id":153173264,"package_name":"requests","ecosystem":"pypi","requirements":"==2.28.1","direct":true,"kind":"runtime","optional":false},{"id":153173265,"package_name":"requests-oauthlib","ecosystem":"pypi","requirements":"==1.3.1","direct":true,"kind":"runtime","optional":false},{"id":153173266,"package_name":"rsa","ecosystem":"pypi","requirements":"==4.8","direct":true,"kind":"runtime","optional":false},{"id":153173267,"package_name":"sgmllib3k","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":153173268,"package_name":"six","ecosystem":"pypi","requirements":"==1.16.0","direct":true,"kind":"runtime","optional":false},{"id":153173269,"package_name":"soupsieve","ecosystem":"pypi","requirements":"==2.3.2.post1","direct":true,"kind":"runtime","optional":false},{"id":153173270,"package_name":"testtools","ecosystem":"pypi","requirements":"==2.5.0","direct":true,"kind":"runtime","optional":false},{"id":153173271,"package_name":"tlslite-ng","ecosystem":"pypi","requirements":"==0.7.6","direct":true,"kind":"runtime","optional":false},{"id":153173272,"package_name":"tweepy","ecosystem":"pypi","requirements":"==4.10.0","direct":true,"kind":"runtime","optional":false},{"id":153173273,"package_name":"ujson","ecosystem":"pypi","requirements":"==5.4.0","direct":true,"kind":"runtime","optional":false},{"id":153173274,"package_name":"update-checker","ecosystem":"pypi","requirements":"==0.18.0","direct":true,"kind":"runtime","optional":false},{"id":153173275,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.26.10","direct":true,"kind":"runtime","optional":false},{"id":153173276,"package_name":"webapp2","ecosystem":"pypi","requirements":"==3.0.0b1","direct":true,"kind":"runtime","optional":false},{"id":153173277,"package_name":"webencodings","ecosystem":"pypi","requirements":"==0.5.1","direct":true,"kind":"runtime","optional":false},{"id":153173278,"package_name":"WebOb","ecosystem":"pypi","requirements":"==1.8.7","direct":true,"kind":"runtime","optional":false},{"id":153173279,"package_name":"websocket-client","ecosystem":"pypi","requirements":"==1.3.3","direct":true,"kind":"runtime","optional":false},{"id":153173280,"package_name":"Werkzeug","ecosystem":"pypi","requirements":"==2.1.2","direct":true,"kind":"runtime","optional":false},{"id":153173281,"package_name":"wrapt","ecosystem":"pypi","requirements":"==1.14.1","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/auto-merge-dependabot.yaml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:57:26.542Z","updated_at":"2023-01-13T11:57:26.542Z","repository_link":"https://github.com/snarfed/granary/blob/main/.github/workflows/auto-merge-dependabot.yaml","dependencies":[{"id":6875718716,"package_name":"dependabot/fetch-metadata","ecosystem":"actions","requirements":"v1.1.1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/codeql-analysis.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:57:26.558Z","updated_at":"2023-01-13T11:57:26.558Z","repository_link":"https://github.com/snarfed/granary/blob/main/.github/workflows/codeql-analysis.yml","dependencies":[{"id":6875718717,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6875718718,"package_name":"github/codeql-action/init","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6875718719,"package_name":"github/codeql-action/autobuild","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6875718720,"package_name":"github/codeql-action/analyze","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2026-08-06T01:44:19.514Z","updated_at":"2026-08-06T01:44:19.514Z","repository_link":"https://github.com/snarfed/granary/blob/main/pyproject.toml","dependencies":[{"id":25900788633,"package_name":"blake3","ecosystem":"pypi","requirements":"\u003e=0.4.0","direct":true,"kind":"runtime","optional":false},{"id":25900788634,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"\u003e=4.8","direct":true,"kind":"runtime","optional":false},{"id":25900788635,"package_name":"bech32","ecosystem":"pypi","requirements":"\u003e=1.2.0","direct":true,"kind":"runtime","optional":false},{"id":25900788636,"package_name":"brevity","ecosystem":"pypi","requirements":"\u003e=0.2.17","direct":true,"kind":"runtime","optional":false},{"id":25900788637,"package_name":"cachetools","ecosystem":"pypi","requirements":"\u003e=5.2.0","direct":true,"kind":"runtime","optional":false},{"id":25900788638,"package_name":"cryptography","ecosystem":"pypi","requirements":"\u003e=41.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900788639,"package_name":"feedgen","ecosystem":"pypi","requirements":"\u003e=0.9","direct":true,"kind":"runtime","optional":false},{"id":25900788640,"package_name":"feedparser","ecosystem":"pypi","requirements":"\u003e=6.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900788641,"package_name":"grpcio","ecosystem":"pypi","requirements":"\u003e=1.59.0","direct":true,"kind":"runtime","optional":false},{"id":25900788642,"package_name":"html2text","ecosystem":"pypi","requirements":"\u003e=2019.8.11","direct":true,"kind":"runtime","optional":false},{"id":25900788643,"package_name":"humanfriendly","ecosystem":"pypi","requirements":"\u003e=4.18","direct":true,"kind":"runtime","optional":false},{"id":25900788644,"package_name":"jinja2","ecosystem":"pypi","requirements":"\u003e=3.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900788645,"package_name":"lexrpc","ecosystem":"pypi","requirements":"\u003e=2.2","direct":true,"kind":"runtime","optional":false},{"id":25900788651,"package_name":"mf2util","ecosystem":"pypi","requirements":"\u003e=0.5.0","direct":true,"kind":"runtime","optional":false},{"id":25900788652,"package_name":"multiformats","ecosystem":"pypi","requirements":"\u003e=0.3.1","direct":true,"kind":"runtime","optional":false},{"id":25900788657,"package_name":"oauth-dropins","ecosystem":"pypi","requirements":"\u003e=8.0","direct":true,"kind":"runtime","optional":false},{"id":25900788658,"package_name":"praw","ecosystem":"pypi","requirements":"\u003e=7.3.0","direct":true,"kind":"runtime","optional":false},{"id":25900788659,"package_name":"prawcore","ecosystem":"pypi","requirements":"\u003e=2.1","direct":true,"kind":"runtime","optional":false},{"id":25900788671,"package_name":"protobuf","ecosystem":"pypi","requirements":"\u003e=6.31.1","direct":true,"kind":"runtime","optional":false},{"id":25900788672,"package_name":"pymediainfo","ecosystem":"pypi","requirements":"\u003e=6.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900788673,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"\u003e=2.8.1","direct":true,"kind":"runtime","optional":false},{"id":25900788674,"package_name":"pywebutil","ecosystem":"pypi","requirements":"[google-cloud,html]\u003e=2.0","direct":true,"kind":"runtime","optional":false},{"id":25900788837,"package_name":"requests","ecosystem":"pypi","requirements":"\u003e=2.22","direct":true,"kind":"runtime","optional":false},{"id":25900788838,"package_name":"requests-oauth2client","ecosystem":"pypi","requirements":"\u003e=1.8.0","direct":true,"kind":"runtime","optional":false},{"id":25900788894,"package_name":"secp256k1","ecosystem":"pypi","requirements":"\u003e=0.14.0","direct":true,"kind":"runtime","optional":false},{"id":25900788954,"package_name":"websockets","ecosystem":"pypi","requirements":"\u003e=11.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.pinned.txt","sha":null,"kind":"manifest","created_at":"2026-08-06T01:44:19.940Z","updated_at":"2026-08-06T01:44:19.940Z","repository_link":"https://github.com/snarfed/granary/blob/main/requirements.pinned.txt","dependencies":[{"id":25900789032,"package_name":"attrs","ecosystem":"pypi","requirements":"==26.1.0","direct":true,"kind":"runtime","optional":false},{"id":25900789033,"package_name":"bases","ecosystem":"pypi","requirements":"==0.3.0","direct":true,"kind":"runtime","optional":false},{"id":25900789046,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"==4.15.0","direct":true,"kind":"runtime","optional":false},{"id":25900789047,"package_name":"bech32","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":25900789048,"package_name":"binapy","ecosystem":"pypi","requirements":"==0.8.0","direct":true,"kind":"runtime","optional":false},{"id":25900789054,"package_name":"blake3","ecosystem":"pypi","requirements":"==1.0.9","direct":true,"kind":"runtime","optional":false},{"id":25900789056,"package_name":"blinker","ecosystem":"pypi","requirements":"==1.9.0","direct":true,"kind":"runtime","optional":false},{"id":25900789057,"package_name":"cachelib","ecosystem":"pypi","requirements":"==0.14.0","direct":true,"kind":"runtime","optional":false},{"id":25900789058,"package_name":"cachetools","ecosystem":"pypi","requirements":"==7.1.4","direct":true,"kind":"runtime","optional":false},{"id":25900789059,"package_name":"cbor2","ecosystem":"pypi","requirements":"==6.1.4","direct":true,"kind":"runtime","optional":false},{"id":25900789060,"package_name":"certifi","ecosystem":"pypi","requirements":"==2026.7.22","direct":true,"kind":"runtime","optional":false},{"id":25900789061,"package_name":"cffi","ecosystem":"pypi","requirements":"==2.1.0","direct":true,"kind":"runtime","optional":false},{"id":25900789062,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"==3.4.9","direct":true,"kind":"runtime","optional":false},{"id":25900789063,"package_name":"click","ecosystem":"pypi","requirements":"==8.4.2","direct":true,"kind":"runtime","optional":false},{"id":25900789068,"package_name":"colorama","ecosystem":"pypi","requirements":"==0.4.6","direct":true,"kind":"runtime","optional":false},{"id":25900789069,"package_name":"cryptography","ecosystem":"pypi","requirements":"==50.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789070,"package_name":"dag-cbor","ecosystem":"pypi","requirements":"==0.3.3","direct":true,"kind":"runtime","optional":false},{"id":25900789071,"package_name":"defusedxml","ecosystem":"pypi","requirements":"==0.7.1","direct":true,"kind":"runtime","optional":false},{"id":25900789072,"package_name":"dnspython","ecosystem":"pypi","requirements":"==2.8.0","direct":true,"kind":"runtime","optional":false},{"id":25900789073,"package_name":"domain2idna","ecosystem":"pypi","requirements":"==1.12.4","direct":true,"kind":"runtime","optional":false},{"id":25900789075,"package_name":"feedgen","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789076,"package_name":"feedparser","ecosystem":"pypi","requirements":"==6.0.14","direct":true,"kind":"runtime","optional":false},{"id":25900789077,"package_name":"flask","ecosystem":"pypi","requirements":"==3.1.3","direct":true,"kind":"runtime","optional":false},{"id":25900789078,"package_name":"flask-caching","ecosystem":"pypi","requirements":"==2.4.1","direct":true,"kind":"runtime","optional":false},{"id":25900789079,"package_name":"furl","ecosystem":"pypi","requirements":"==2.1.4","direct":true,"kind":"runtime","optional":false},{"id":25900789080,"package_name":"google-api-core","ecosystem":"pypi","requirements":"==2.31.0","direct":true,"kind":"runtime","optional":false},{"id":25900789081,"package_name":"google-api-python-client","ecosystem":"pypi","requirements":"==2.198.0","direct":true,"kind":"runtime","optional":false},{"id":25900789082,"package_name":"google-auth","ecosystem":"pypi","requirements":"==2.53.0","direct":true,"kind":"runtime","optional":false},{"id":25900789083,"package_name":"google-auth-httplib2","ecosystem":"pypi","requirements":"==0.4.0","direct":true,"kind":"runtime","optional":false},{"id":25900789084,"package_name":"google-cloud-appengine-logging","ecosystem":"pypi","requirements":"==1.10.0","direct":true,"kind":"runtime","optional":false},{"id":25900789085,"package_name":"google-cloud-audit-log","ecosystem":"pypi","requirements":"==0.6.0","direct":true,"kind":"runtime","optional":false},{"id":25900789086,"package_name":"google-cloud-core","ecosystem":"pypi","requirements":"==2.6.0","direct":true,"kind":"runtime","optional":false},{"id":25900789087,"package_name":"google-cloud-datastore","ecosystem":"pypi","requirements":"==2.25.0","direct":true,"kind":"runtime","optional":false},{"id":25900789088,"package_name":"google-cloud-logging","ecosystem":"pypi","requirements":"==3.16.0","direct":true,"kind":"runtime","optional":false},{"id":25900789090,"package_name":"google-cloud-ndb","ecosystem":"pypi","requirements":"==2.5.0","direct":true,"kind":"runtime","optional":false},{"id":25900789093,"package_name":"googleapis-common-protos","ecosystem":"pypi","requirements":"==1.75.0","direct":true,"kind":"runtime","optional":false},{"id":25900789094,"package_name":"grapheme","ecosystem":"pypi","requirements":"==0.6.0","direct":true,"kind":"runtime","optional":false},{"id":25900789095,"package_name":"grpc-google-iam-v1","ecosystem":"pypi","requirements":"==0.14.4","direct":true,"kind":"runtime","optional":false},{"id":25900789096,"package_name":"grpcio","ecosystem":"pypi","requirements":"==1.83.0","direct":true,"kind":"runtime","optional":false},{"id":25900789097,"package_name":"grpcio-status","ecosystem":"pypi","requirements":"==1.83.0","direct":true,"kind":"runtime","optional":false},{"id":25900789098,"package_name":"gunicorn","ecosystem":"pypi","requirements":"==26.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789107,"package_name":"h11","ecosystem":"pypi","requirements":"==0.16.0","direct":true,"kind":"runtime","optional":false},{"id":25900789108,"package_name":"html2text","ecosystem":"pypi","requirements":"==2025.4.15","direct":true,"kind":"runtime","optional":false},{"id":25900789109,"package_name":"html5lib","ecosystem":"pypi","requirements":"==1.1","direct":true,"kind":"runtime","optional":false},{"id":25900789110,"package_name":"httplib2","ecosystem":"pypi","requirements":"==0.32.0","direct":true,"kind":"runtime","optional":false},{"id":25900789111,"package_name":"humanfriendly","ecosystem":"pypi","requirements":"==10.0","direct":true,"kind":"runtime","optional":false},{"id":25900789112,"package_name":"humanize","ecosystem":"pypi","requirements":"==4.16.0","direct":true,"kind":"runtime","optional":false},{"id":25900789113,"package_name":"idna","ecosystem":"pypi","requirements":"==3.18","direct":true,"kind":"runtime","optional":false},{"id":25900789117,"package_name":"iterators","ecosystem":"pypi","requirements":"==0.2.0","direct":true,"kind":"runtime","optional":false},{"id":25900789121,"package_name":"itsdangerous","ecosystem":"pypi","requirements":"==2.2.0","direct":true,"kind":"runtime","optional":false},{"id":25900789122,"package_name":"jinja2","ecosystem":"pypi","requirements":"==3.1.6","direct":true,"kind":"runtime","optional":false},{"id":25900789123,"package_name":"jwskate","ecosystem":"pypi","requirements":"==0.12.2","direct":true,"kind":"runtime","optional":false},{"id":25900789124,"package_name":"libipld","ecosystem":"pypi","requirements":"==3.4.1","direct":true,"kind":"runtime","optional":false},{"id":25900789142,"package_name":"lxml","ecosystem":"pypi","requirements":"==6.1.1","direct":true,"kind":"runtime","optional":false},{"id":25900789143,"package_name":"markupsafe","ecosystem":"pypi","requirements":"==3.0.3","direct":true,"kind":"runtime","optional":false},{"id":25900789144,"package_name":"mf2py","ecosystem":"pypi","requirements":"==2.0.1","direct":true,"kind":"runtime","optional":false},{"id":25900789145,"package_name":"multiformats","ecosystem":"pypi","requirements":"==0.3.1.post4","direct":true,"kind":"runtime","optional":false},{"id":25900789146,"package_name":"multiformats-config","ecosystem":"pypi","requirements":"==0.3.1","direct":true,"kind":"runtime","optional":false},{"id":25900789158,"package_name":"oauthlib","ecosystem":"pypi","requirements":"==3.3.1","direct":true,"kind":"runtime","optional":false},{"id":25900789159,"package_name":"opentelemetry-api","ecosystem":"pypi","requirements":"==1.44.0","direct":true,"kind":"runtime","optional":false},{"id":25900789160,"package_name":"orderedmultidict","ecosystem":"pypi","requirements":"==1.0.2","direct":true,"kind":"runtime","optional":false},{"id":25900789164,"package_name":"packaging","ecosystem":"pypi","requirements":"==26.2","direct":true,"kind":"runtime","optional":false},{"id":25900789165,"package_name":"pkce","ecosystem":"pypi","requirements":"==1.0.3","direct":true,"kind":"runtime","optional":false},{"id":25900789166,"package_name":"praw","ecosystem":"pypi","requirements":"==8.0.2","direct":true,"kind":"runtime","optional":false},{"id":25900789167,"package_name":"prawcore","ecosystem":"pypi","requirements":"==4.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789168,"package_name":"proto-plus","ecosystem":"pypi","requirements":"==1.28.2","direct":true,"kind":"runtime","optional":false},{"id":25900789169,"package_name":"protobuf","ecosystem":"pypi","requirements":"==7.35.1","direct":true,"kind":"runtime","optional":false},{"id":25900789170,"package_name":"pyasn1","ecosystem":"pypi","requirements":"==0.6.4","direct":true,"kind":"runtime","optional":false},{"id":25900789171,"package_name":"pyasn1-modules","ecosystem":"pypi","requirements":"==0.4.2","direct":true,"kind":"runtime","optional":false},{"id":25900789172,"package_name":"pycparser","ecosystem":"pypi","requirements":"==3.0","direct":true,"kind":"runtime","optional":false},{"id":25900789173,"package_name":"pyjwt","ecosystem":"pypi","requirements":"==2.13.0","direct":true,"kind":"runtime","optional":false},{"id":25900789174,"package_name":"pymediainfo","ecosystem":"pypi","requirements":"==7.0.1","direct":true,"kind":"runtime","optional":false},{"id":25900789175,"package_name":"pyparsing","ecosystem":"pypi","requirements":"==3.3.2","direct":true,"kind":"runtime","optional":false},{"id":25900789176,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.9.0.post0","direct":true,"kind":"runtime","optional":false},{"id":25900789177,"package_name":"python-tumblpy","ecosystem":"pypi","requirements":"==1.1.4","direct":true,"kind":"runtime","optional":false},{"id":25900789178,"package_name":"pytz","ecosystem":"pypi","requirements":"==2026.3.post1","direct":true,"kind":"runtime","optional":false},{"id":25900789179,"package_name":"pyyaml","ecosystem":"pypi","requirements":"==6.0.3","direct":true,"kind":"runtime","optional":false},{"id":25900789180,"package_name":"redis","ecosystem":"pypi","requirements":"==7.4.1","direct":true,"kind":"runtime","optional":false},{"id":25900789181,"package_name":"requests","ecosystem":"pypi","requirements":"==2.34.2","direct":true,"kind":"runtime","optional":false},{"id":25900789182,"package_name":"requests-hardened","ecosystem":"pypi","requirements":"==1.3.0","direct":true,"kind":"runtime","optional":false},{"id":25900789183,"package_name":"requests-oauth2client","ecosystem":"pypi","requirements":"==1.8.0","direct":true,"kind":"runtime","optional":false},{"id":25900789184,"package_name":"requests-oauthlib","ecosystem":"pypi","requirements":"==2.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789185,"package_name":"setuptools","ecosystem":"pypi","requirements":"==83.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789186,"package_name":"sgmllib3k","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789187,"package_name":"simple-websocket","ecosystem":"pypi","requirements":"==1.1.0","direct":true,"kind":"runtime","optional":false},{"id":25900789188,"package_name":"six","ecosystem":"pypi","requirements":"==1.17.0","direct":true,"kind":"runtime","optional":false},{"id":25900789224,"package_name":"soupsieve","ecosystem":"pypi","requirements":"==2.9.1","direct":true,"kind":"runtime","optional":false},{"id":25900789225,"package_name":"tweepy","ecosystem":"pypi","requirements":"==4.17.0","direct":true,"kind":"runtime","optional":false},{"id":25900789226,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"==4.15.0","direct":true,"kind":"runtime","optional":false},{"id":25900789227,"package_name":"typing-validation","ecosystem":"pypi","requirements":"==1.2.12","direct":true,"kind":"runtime","optional":false},{"id":25900789228,"package_name":"ujson","ecosystem":"pypi","requirements":"==5.13.0","direct":true,"kind":"runtime","optional":false},{"id":25900789229,"package_name":"update-checker","ecosystem":"pypi","requirements":"==1.0.0","direct":true,"kind":"runtime","optional":false},{"id":25900789230,"package_name":"uritemplate","ecosystem":"pypi","requirements":"==4.2.0","direct":true,"kind":"runtime","optional":false},{"id":25900789231,"package_name":"urllib3","ecosystem":"pypi","requirements":"==2.7.0","direct":true,"kind":"runtime","optional":false},{"id":25900789232,"package_name":"webencodings","ecosystem":"pypi","requirements":"==0.5.1","direct":true,"kind":"runtime","optional":false},{"id":25900789233,"package_name":"websocket-client","ecosystem":"pypi","requirements":"==1.9.0","direct":true,"kind":"runtime","optional":false},{"id":25900789234,"package_name":"websockets","ecosystem":"pypi","requirements":"==16.1.1","direct":true,"kind":"runtime","optional":false},{"id":25900789235,"package_name":"werkzeug","ecosystem":"pypi","requirements":"==3.1.8","direct":true,"kind":"runtime","optional":false},{"id":25900789236,"package_name":"wsproto","ecosystem":"pypi","requirements":"==1.3.2","direct":true,"kind":"runtime","optional":false}]}],"score":15.76817385311222,"created_at":"2023-04-05T14:05:15.702Z","updated_at":"2026-08-13T06:30:52.034Z","avatar_url":"https://github.com/snarfed.png","language":"Python","codemeta":null,"publiccode":null,"project_url":"https://summary.ecosyste.ms/api/v1/projects/1361","html_url":"https://summary.ecosyste.ms/projects/1361"}