Skip to main content

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

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.15.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.15.0
File Size Uploaded
gh_score-0.15.0.tar.gz 102.4 kB Details

Built distribution (wheel)

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

Total release size: 220.1 kB

Release files / gh_score-0.15.0.tar.gz

Download URL gh_score-0.15.0.tar.gz
Size 102.4 kB
Tags Source
SHA-256 checksum
How to use checksums
2492d9f7252561d5f0efc97f29153d8c8c0bebbd0f588457e340327f3d3a79c2
BLAKE2b-256 checksum
How to use checksums
fcad6bb9dadac0358e12ff780d2cd4d05b10453f8eca432588571d44ef9fd3f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","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.15.0-py3-none-any.whl

Download URL gh_score-0.15.0-py3-none-any.whl
Size 117.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a8aafbb8bb5505ae3e839f827ca70ff1eaaddfb0a7a6399e5d237ba0f6dfe1be
BLAKE2b-256 checksum
How to use checksums
6698de23d784a41d0aa5eb0f85142610677d8e08535ff7593a5387571ebc6c84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.20 {"installer":{"name":"uv","version":"0.12.20","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

0.16.0

2 release files

This release

0.15.0 This release

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