Skip to main content

gh-score

CI

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

Compare projects

Pass two or more URLs to compare them side by side — e.g. to pick between similar libraries:

gh-score https://github.com/fastapi/fastapi https://github.com/pallets/flask https://github.com/django/django
gh-score --format markdown https://github.com/BurntSushi/ripgrep https://github.com/sharkdp/fd

The comparison checks that it is credible: each pair is assessed for subject comparability (shared topics / description keywords), language compatibility for libraries, and library-vs-application mismatches. Non-credible pairs are flagged with the reason — warnings never block the comparison.

The output is a decision table: one line per project (stars, license, language, maintenance state, last commit, bus factor, downloads, latest release, traffic-light verdict), ranked by verdict, then downloads, then bus factor. Each pair also shows an informational similarity score (0.0–1.0) saying how close the expressed subjects are.

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

Reasoning models (Qwen-style "thinking", DeepSeek R1, …) spend the whole token budget on chain-of-thought and get cut off before emitting the JSON. If your model produces "empty or unparseable JSON response" warnings, disable the reasoning pass:

export GH_SCORE_LLM_DISABLE_REASONING=true

The provider then asks the server to skip reasoning (chat_template_kwargs.enable_thinking: false, honored by oMLX / vLLM / llama.cpp-style servers, plus the OpenAI-compatible reasoning_effort: "none"). Opt-in: only set it for reasoning models.

Configuration

Set a GH_SCORE_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.

gh-score reads settings from the environment and from config.toml only: it never loads a .env file. Export the variables yourself.

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

gh-score in a terminal

License

GPL-3.0 — see LICENSE.

Metadata

Release files for gh-score 0.18.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gh-score 0.18.0
File Size Uploaded
gh_score-0.18.0.tar.gz 111.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gh-score 0.18.0
File Interpreter ABI Platform
gh_score-0.18.0-py3-none-any.whl Python 3 none any Details

Total release size: 239.4 kB

Release files / gh_score-0.18.0.tar.gz

Download URL gh_score-0.18.0.tar.gz
Size 111.8 kB
Tags Source
SHA-256 checksum
How to use checksums
02f22eec5d731f49ed900c8063e15f284a4c40ed248bcc5f6026b19b5166c087
BLAKE2b-256 checksum
How to use checksums
a7c825b2683db46c192875523abd79f9c3eef7c4e8c698d8757161e8b81ea8c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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.18.0-py3-none-any.whl

Download URL gh_score-0.18.0-py3-none-any.whl
Size 127.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f981d6fcc2d99b366a569e32c7f9787d10141fed84c87c52b3f142358285b505
BLAKE2b-256 checksum
How to use checksums
ddabbf955f54403282b4324c2cf59fae44826707ff36066086eca8d5d3079780
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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 history Release notifications | RSS feed

This release

0.18.0 This release

2 release files

0.16.0

2 release files

0.15.0

2 release files

0.14.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page