gh-score
GitHub Project Health Scorer — evaluate maturity, maintenance, community health and sustainability of any GitHub project, in your terminal.
gh-score turns raw GitHub signals (commit activity, contributors, releases, license, registries, sustainability) into a single traffic-light verdict: 🟢 green (safe to bet on), 🟠 orange (proceed with caution), 🔴 red (risky).
When a repository declares a homepage, gh-score also checks that the
application's web page is actually reachable — DNS resolution, timeouts,
HTTP status (redirects followed) — and flags pages hidden behind a
bot-protection check ("I'm not a robot"). A dead homepage is a red flag
for the verdict.
Usage
# Analyze a remote repository (no install needed)
uvx gh-score https://github.com/owner/repo
# Analyze the current directory (if it's a git clone)
uvx gh-score
# Or install it
pip install gh-score
gh-score https://github.com/owner/repo
Output formats
gh-score --format tui https://github.com/owner/repo # terminal dashboard (default)
gh-score --format markdown https://github.com/owner/repo # Markdown report
gh-score --format json https://github.com/owner/repo # structured JSON
Optional LLM analysis
The LLM is opt-in and never required. It extracts qualitative facts that cannot be derived from APIs or files (roadmap, commercial support, security policy, self-declared maintenance state) and produces a refined, complementary recommendation that weighs all indicators together.
export GH_SCORE_LLM_ENABLED=true
export GH_SCORE_LLM_BASE_URL="https://api.openai.com/v1" # any OpenAI-compatible API
export GH_SCORE_LLM_MODEL="gpt-4o-mini"
export GH_SCORE_LLM_API_KEY="sk-..."
gh-score https://github.com/owner/repo
Configuration
Set a GITHUB_TOKEN to raise API rate limits. LLM settings can also live
in a config.toml (see gh-score config). Everything stays optional:
the tool works fully offline with local clones and no token.
To enrich the report with dependents counts (how many packages depend on this library) for PyPI, npm and Maven — the only ecosystems whose official registries expose no reverse-dependency count — set a free libraries.io API key (60 requests/minute):
export LIBRARIES_IO_API_KEY="..."
# or in config.toml:
# [registries]
# libraries_io_api_key = "..."
crates.io, RubyGems and Go (pkg.go.dev) always provide their own dependents count; downloads are always fetched where the registry exposes them.
Library
from gh_score import analyze_repo
result = analyze_repo("https://github.com/owner/repo")
print(result.recommendation.level) # RecommendationLevel.GREEN
print(result.release_health.latest_version) # "v1.0.0"
print(result.contributors.bus_factor) # 3
Screenshot
License
GPL-3.0 — see LICENSE.
Metadata
Release files for gh-score 0.12.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gh_score-0.12.0.tar.gz | 89.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gh_score-0.12.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 193.4 kB
Release files / gh_score-0.12.0.tar.gz
| Download URL | gh_score-0.12.0.tar.gz |
|---|---|
| Size | 89.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f952da459855ed1b3212f1847d38309a1b2980ab7404cc1bfc4bfd6cface754e
|
|
BLAKE2b-256 checksum How to use checksums |
18add1da9657fdfae911ac6ad38da6093d4a978939b33c56ad8a25d7c4064a96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / gh_score-0.12.0-py3-none-any.whl
| Download URL | gh_score-0.12.0-py3-none-any.whl |
|---|---|
| Size | 104.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b51402331c043e78f49cc791195e6e72c592514776d017d1a5969bb382a4fc28
|
|
BLAKE2b-256 checksum How to use checksums |
4658122d3c11f0904fbf17dffa55e64d32732f2ebeba32f6890f3648181894f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|