repovet
Check a GitHub repo for fake stars, abandonment, malware-style install scripts and typosquatting before you clone, install or depend on it. Also finds new repos that match your stack.
Hundreds of new repos trend on GitHub every week. Some are great, some are abandoned, some
have bought their stars, and a few are malware with a nice README. repovet is a small
command-line GitHub repository trust scorer that tells you which is which in a few
seconds.
repovet vet owner/repogives a 0-100 trust score, a verdict, and the reasons.repovet radarlists recently created repos for the languages and topics your project uses.- Pure Python standard library. No dependencies. Works on Windows, macOS and Linux.
- Output as text or
--json. Exit code for CI gating with--fail-under.
Quick start
pip install repovet-cli
The command is repovet. From source instead:
pip install git+https://github.com/shivamkr06/repovet.git
repovet vet psf/requests
Without installing, from a clone:
PYTHONPATH=src python -m repovet vet psf/requests
Example
$ repovet vet psf/requests
psf/requests https://github.com/psf/requests
A simple, yet elegant, HTTP library.
LOOKS OK 100/100 [####################]
No red flags found.
Facts
stars / forks / watchers 55k / 11k / 1.3k
issues + PRs ever 7.6k
age / last push 5749d / 8d ago
license Apache-2.0
contributors 100+
top author nateprewitt (46% of recent commits)
latest release v2.34.2
A repo with problems looks like this:
CAUTION 78/100 [################----]
[MEDIUM] Stale
No push in 514 days.
[LOW ] Low fork-to-star ratio
9 forks vs 503 stars (1.8%). Real projects usually sit around 5-15%.
[LOW ] Single maintainer
m-ahmed-elbeskeri wrote 100% of the recent commits. If they leave, the project stops.
What vet checks
| Area | Signals |
|---|---|
| Fake stars | fork-to-star and watcher-to-star ratios, stars with almost no issues or PRs, sudden star spikes, share of brand-new or empty stargazer accounts (needs a token) |
| Maintenance | archived or disabled, time since last push, commit count, project age |
| People | single-maintainer risk, owner account age and track record |
| License | missing, unrecognized, or restrictive (AGPL, SSPL, BUSL, non-commercial) |
| Install risk | preinstall/postinstall hooks, setup.py that runs commands, curl | sh, encoded PowerShell, obfuscated exec, Discord/Telegram webhooks, hard-coded IPs, committed executables, password-protected archives mentioned in the README |
| Identity | same name as a bigger, older repo (typosquat or copy), forks, lookalike repos |
It also lists similar repos with the same topics so you can compare before choosing.
Scoring: start at 100, subtract 25 per high, 12 per medium, 5 per low finding. 80+ with no
high findings is LOOKS OK, 55+ is CAUTION, below that is HIGH RISK.
Use it in CI
Block a risky dependency before it lands:
repovet vet owner/repo --fail-under 60
Exit code is 2 when the score is below the threshold, 1 on errors, 0 otherwise.
--json prints the full report for scripts.
Radar: new repos for your stack
repovet radar
Reads package.json, requirements.txt, pyproject.toml, go.mod, Cargo.toml and others
in the current folder, then lists recently created repos in those languages and topics.
Same-name clones are collapsed into one entry, and repos are ranked by stars per day with a
penalty for hollow-looking traction (many stars, almost no forks).
repovet radar --lang Rust --topic cli --days 30 --min-stars 200
GitHub token
Works without a token, but the anonymous API allows about 6 vets per hour and the
stargazer checks (fake accounts, star spikes) are skipped, because GitHub does not list
stargazers anonymously. To lift both limits, set GITHUB_TOKEN (or GH_TOKEN) to a token
with no scopes. Some tokens (seen on new GitHub accounts) get no stargazer data back from
GitHub; repovet then skips those two checks and says so in a note. If the gh CLI is installed and logged in, its token is used automatically.
Responses are cached for one hour in ~/.cache/repovet (--no-cache to bypass,
REPOVET_CACHE to move it). The token is only ever sent to api.github.com.
Limits
These are heuristics. A flag is a reason to look closer, not proof of fraud, and a clean score is not a security audit. The install check reads a handful of entry-point files, not the whole codebase. Popular, legitimate projects can trip individual checks (a fast viral launch looks like a star spike). Treat the verdict as triage.
Development
python -m unittest discover -s tests
See CONTRIBUTING.md for how to add a check. Report security issues as described in SECURITY.md. Changes are listed in CHANGELOG.md.
License
Keywords: github repository analyzer, fake github stars detector, repo trust score, supply chain security, typosquatting detection, malicious repository checker, dependency vetting, trending repositories, open source discovery.
Metadata
Release files for repovet-cli 0.1.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 | Provenance | Actions |
|---|---|---|---|---|
| repovet_cli-0.1.0.tar.gz | 25.1 kB | With provenance | Details for repovet_cli-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| repovet_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for repovet_cli-0.1.0-py3-none-any.whl |
Total release size: 47.1 kB
Release files / repovet_cli-0.1.0.tar.gz
| Download URL | repovet_cli-0.1.0.tar.gz |
|---|---|
| Size | 25.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9e494361e8c7cf5c6b58f20a655c7463ae77e481e848b265bb066fb854a14cd1
|
|
BLAKE2b-256 checksum How to use checksums |
07b0aaa3b0dc9494ac64847ca412ef41af82685a9c58c5ea715c6fd2ed67cfe6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logRelease files / repovet_cli-0.1.0-py3-none-any.whl
| Download URL | repovet_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 22.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a9d7f9e2e40f129b6d8e8c8a3bb197c6f91826b57f2813dfd3ddd74207c7c598
|
|
BLAKE2b-256 checksum How to use checksums |
66b1c4aecabfb07ec8797e61ea6e721ffcd61b4582259ba3a527f8e8d9a4cd30
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logSecurity for repovet-cli 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for repovet_cli-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.