A GitHub Trending alternative that hides the hype. Discover and rank emerging GitHub repositories by momentum, freshness, and hype risk — built for horizon scanning in RegTech/SupTech and any domain you scout.
RepoPulse is built for technology horizon scanning in RegTech and SupTech: compliance analysts, supervisors, and technical scouts tracking emerging tooling for AML, regulatory reporting, transaction monitoring, and supervisory work — anyone who regularly asks: "What new projects in this space are gaining real traction, and which ones are just already-famous noise?" It surfaces active, non-mainstream repositories before they become obvious, ranked by momentum rather than raw star count. The engine is domain-agnostic, so the same workflow covers any topic you scout.
It searches recently updated GitHub repositories by topic, scores repository momentum, hides high-hype/mainstream projects by default, and can add short Groq-powered explanations for why each repo may matter in your domain.
python main.py --domain "regtech" --no-explainNo LLM key is required for the basic workflow.
| GitHub Trending | star-history | RepoPulse | |
|---|---|---|---|
| Hides already-mainstream repos | ❌ | ❌ | ✅ by default |
| Momentum score (velocity + forks + issues + recency) | ❌ | ❌ | ✅ |
| Per-domain / per-topic scouting | partial | ❌ | ✅ |
| Runs from a fresh clone, no API key required | — | — | ✅ |
I wanted to track what was actually growing in regtech and suptech — niches where the genuinely interesting projects rarely surface on GitHub Trending until they are already crowded. The goal is to catch a project early, while it is still small but accelerating, and be among the first to adopt or contribute to something that could go viral. RepoPulse generalizes that idea to any topic you care about.
- Avoid obvious results: high-hype repos such as already-mainstream projects are hidden by default.
- Rank by momentum: combines star velocity, recency, fork ratio, and issue activity.
- Stay fast: GitHub results are cached for 6 hours; AI explanations are cached per repo/domain.
- Use CLI or browser: run it in a terminal or launch the Streamlit UI.
- Export results: download or print JSON for later review.
RepoPulse can be used from the browser with Streamlit.
RepoPulse is not a perfect trending algorithm. GitHub's public search API does not provide full historical star timelines, so "hype" detection uses practical heuristics: repo age, star count, velocity estimate, missing metadata, and engagement proxies. Candidate discovery uses recently updated topic matches, then RepoPulse ranks that pool locally.
Use it as a scouting shortlist generator, not as a source of truth.
cd RepoPulse
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.lock
copy .env.example .env
python main.py --domain "regtech" --no-explainOn macOS/Linux, activate the virtual environment with:
source .venv/bin/activateCreate .env from .env.example.
GITHUB_TOKEN=
GROQ_API_KEY=GITHUB_TOKENis optional but recommended. Without it, GitHub limits unauthenticated search requests more aggressively.GROQ_API_KEYis optional unless you want AI explanations. Use--no-explainto skip LLM calls.
For public repository search, the GitHub token does not need special scopes.
| Symptom | Cause | Fix |
|---|---|---|
GitHub rate limit hit. |
Too many unauthenticated requests (10/min). | Add GITHUB_TOKEN to .env. |
GitHub token is invalid or expired. |
Bad or revoked GITHUB_TOKEN. |
Regenerate the token and update .env. |
No repositories found for that domain/date range. |
The domain is not an exact GitHub topic, or the window is too narrow. | Try a broader term, increase --days, or rely on the keyword fallback. |
No non-high-hype repositories found. |
Everything in the pool was flagged as mainstream/high-hype. | Broaden the domain/date range, or pass --include-high-hype. |
GROQ_API_KEY not set in .env. |
Explanations requested without a key. | Pass --no-explain, or set GROQ_API_KEY in .env. |
Groq rate limit hit. / request timed out |
Groq API throttling or slow response. | Wait and retry, or run with --no-explain. |
Results are cached for 6 hours in cache/. Delete that folder to force a fresh fetch.
# Find non-high-hype repos for a topic (the use case RepoPulse was built for)
python main.py --domain "regtech" --no-explain
# Scout an adjacent niche over a longer window
python main.py --domain "suptech" --days 60 --top 20 --no-explain
# Include mainstream/high-hype repos for comparison
python main.py --domain "machine-learning" --include-high-hype --no-explain
# Export JSON
python main.py --domain "AI infrastructure" --days 60 --top 25 --no-explain --output jsonIf you install the project in editable mode, you can use the repopulse command:
pip install -e .
repopulse --domain "regtech" --no-explainstreamlit run app.pyThe UI lets you choose a topic, date window, result count, whether to include high-hype repos, and whether to request Groq explanations. Results appear as scored cards with JSON export.
| Signal | Weight | Meaning |
|---|---|---|
| Star velocity | 45% | Current stars normalized by age-adjusted repository lifetime |
| Fork ratio | 25% | Forks-to-stars ratio as a rough usage signal |
| Issue activity | 20% | Open issues as a rough community activity signal |
| Recency | 10% | How recently the repo was pushed |
Recency is intentionally weighted lower because the --days option already filters for recently pushed repositories; the score uses recency only as an activity-confidence signal.
Star velocity uses a soft age cap: repositories older than 180 days still get older, but extra age counts at 25% weight. This keeps older projects from being overly punished by creation date while avoiding a hard reset of their lifetime history.
RepoPulse does not use GitHub stargazer timestamp history or local star snapshots. This keeps the tool usable from a fresh clone and avoids extra API usage, but star velocity remains an estimate rather than true recent star gain.
RepoPulse flags high-hype repositories when they are likely to be poor "emerging project" candidates:
- already mainstream, currently over 5,000 stars
- too new to score credibly
- missing basic repo metadata
- showing an unusually sharp early spike
High-hype repos are hidden by default in both the CLI and UI. Use --include-high-hype or the UI checkbox to include them.
Each result includes:
- repository name and URL
- stars, forks, open issues, language, topics, and description
momentum_score- score breakdown
hype_riskandhype_reasons- optional AI explanation
JSON output is intended for automation:
python main.py --domain "webassembly" --no-explain --output jsonSee a real exported result with Groq explanations enabled here:
docs/examples/regtech-output.json
RepoPulse/
├── pyproject.toml # Package metadata and repopulse console command
├── app.py # Streamlit UI (layout and behavior)
├── styles.py # Inline SVG icons and results-page CSS
├── sidebar.py # Streamlit sidebar controls and styling
├── main.py # CLI entry point and ranking orchestration
├── config.py # Environment variables and scoring constants
├── modules/
│ ├── fetcher.py # GitHub Search API and disk cache
│ ├── scorer.py # Momentum scoring
│ ├── filter.py # Hype-risk heuristics
│ ├── explainer.py # Groq explanations
│ └── display.py # Rich terminal table
├── tests/ # Pytest test suite
│ ├── test_fetcher.py
│ ├── test_scorer.py
│ ├── test_filter.py
│ ├── test_main.py
│ └── test_explainer.py
├── .env.example
├── CONTRIBUTING.md
├── CHANGELOG.md
└── LICENSE
pip install -r requirements.txt
pytest -q
python main.py --domain "regtech" --no-explainFor a byte-for-byte reproducible environment (all transitive dependencies pinned), install from the lockfile instead:
pip install -r requirements.lockrequirements.txt holds the direct, human-maintained dependencies; requirements.lock
is the fully resolved set used by CI and for reproducible installs.
Do not commit .env, cache/, __pycache__/, .pytest_cache/, or local demo artifacts.
- Optional local star-history snapshots for true (rather than estimated) star velocity
- Smarter domain matching: keyword + topic fallback for domains that are not exact GitHub topics
- Export shortlists to CSV and Markdown, not just JSON
- Saved searches and watchlists in the Streamlit UI
- Domain presets for niches like regtech and suptech
See open issues for the current backlog, and CHANGELOG.md for shipped changes.
Contributions are welcome. Start with the good first issues, and see CONTRIBUTING.md for local setup and the pull request checklist.
MIT. See LICENSE.




