How Ranking Works
Every chart on maal.top is ranked using publicly available metrics from official APIs. The same inputs always produce the same output — our methodology is deterministic and verifiable.
Verifiable Rank
Each chart displays a method version and hash. These change whenever the ranking logic or data source changes. You can verify that the same inputs produce the same rankings.
Data Sources
Hugging Face
Models, datasets, and spaces are ranked by trendingScore from the Hugging Face Hub API. Additional metrics: downloads and likes. No API key required for read access.
Endpoint: GET https://huggingface.co/api/models?sort=trendingScore&direction=-1&limit=100
npm
Frontend, backend, devtools, and testing packages are ranked by last-month downloads from the npm registry. Only packages on our curated allowlists (~200 packages per category) are included.
Endpoint: GET https://api.npmjs.org/downloads/point/last-month/{pkg} (bulk: 128 packages/call)
GitHub
Repositories are ranked by stars, filtered by topic. No date filter is applied — we search all time. GitHub has no official trending API — we use the Search API with verified queries (PAT required).
Endpoint: GET https://api.github.com/search/repositories?q=topic:X+stars:>500
PyPI
Top 100 Python packages by monthly downloads from the hugovk monthly dump (top-pypi-packages). No API key required.
Source: https://hugovk.dev/top-pypi-packages/top-pypi-packages.min.json
crates.io
Top 100 Rust crates by recent downloads from crates.io public API. 30-day download sparklines from per-crate version download history.
Endpoint: GET https://crates.io/api/v1/crates?sort=recent-downloads
Update Cadence
Charts update daily at 04:00 UTC via GitHub Actions. If the source API fails, yesterday's data is preserved and the chart is marked as stale.
Adding New Charts
New charts require a human pull request adding to the curated allowlist indata/curated/*.json. We do not auto-expand charts — that prevents spam.
Automated Discovery
A weekly job runs fetch/discover.mjs against 50+ product category seeds (CRM, CMS, blog, dashboard, etc.) and proposes qualifying GitHub topics (total ≥ 30 repos, 10th result ≥ 500 stars). Proposals are written todata/discover/ for human review before adding to github-topics.json.