Track trending AI open-source GitHub repositories, discover underrated gems, compare adoption risk, and identify potentially unmaintained projects without declaring them abandoned.
Zero cost. Runs on GitHub Actions (free) + GitHub Pages (free). No servers, no databases, no cloud bills.
Live at: radar.aegismemory.com
- Trending — Top AI repos by star growth (3-day / 7-day / 30-day windows)
- Underrated Gems — High-quality repos under 500 stars that most people haven't found yet
- Stale / At Risk — Repositories prioritised by a confidence-aware, multi-signal maintenance-risk heuristic
- Category filtering — Agent frameworks, model serving, fine-tuning, RAG and search, dev tools, MCP, evals and testing, local and edge AI, gateways and routing, AI security and guardrails, AI coding assistants, AI WebUIs and interfaces, multimodal media, and vector databases and data infrastructure
- Adoption signals — Adoption readiness, maintainer health, and deterministic trend explanations for safer tool selection
- Auto-updated — GitHub Actions cron runs every 6 hours
- Privacy-conscious outcomes — Analytics are off by default; an optional endpoint receives only allowlisted aggregate event names, never repository or filter details
- Structured corrections — Every repository card links to a zero-cost GitHub issue form for category, trend, and maintenance-risk disputes
See the analytics configuration for the success-event definitions and no-analytics/self-hosting options. Recommendation quality is reviewed with the regular sampling and fixed-fixture process in the evaluation guide.
Each repo gets a weighted quality score (0-100%):
| Signal | Weight | What it measures |
|---|---|---|
| Commit velocity | 30% | Commits per week over last 30 days |
| Issue engagement | 20% | Open issues relative to stars (community interest) |
| Star acceleration | 15% | Stars gained per day of existence |
| Contributor diversity | 15% | Unique contributors (bus-factor proxy) |
| Docs quality | 10% | Description length + topic tag coverage |
| Push recency | 10% | How recently the repo was updated |
Repos with < 500 stars and gem score ≥ 30% make the "Underrated Gems" list.
The collector also emits deterministic adoption-readiness and maintainer-health signals. These combine push recency, recent commits, contributor diversity, issue pressure, fork signal, topic coverage, license presence, and archived status into simple labels such as safe, watch, and risky.
The Stale / At Risk view is not an abandonment label. It considers repository type, archived status, release age, recent commit cadence relative to a six-month baseline, unresolved issue pressure, pull-request reviews, and maintainer responses. Documentation, course, and curated-list repositories use longer recency thresholds. Results are ranked by maintenance-risk score and data confidence, and include explicit reasons such as no push in 179 days.
# Clone this project
git clone <this-repo-url> oss-radar
cd oss-radarOr create a new repo on GitHub named oss-radar and push these files to it.
The collector needs a token to avoid API rate limits (unauthenticated = 60 req/hr, authenticated = 5,000 req/hr).
- Go to https://github.com/settings/tokens?type=beta
- Click "Generate new token" (Fine-grained token)
- Name it
oss-radar-collector - Set expiration to 90 days (you'll rotate it quarterly)
- Under Repository access → select "Public Repositories (read-only)"
- No additional permissions needed — read-only public access is enough
- Click Generate token
- Copy the token (you won't see it again)
- Go to your repo on GitHub → Settings → Secrets and variables → Actions
- Click "New repository secret"
- Name:
GH_PAT - Value: paste the token from Step 2
- Click Add secret
- Go to your repo → Settings → Pages
- Under Source, select "GitHub Actions"
- Save
You have two options:
Option A — Run locally (recommended for first time):
# Install dependency
pip install requests
# Set your token
export GITHUB_TOKEN="ghp_your_token_here"
# Run the collector
python collector/collect.py
# Check the output
cat site/data.json | head -20Option B — Trigger via GitHub Actions:
- Go to your repo → Actions tab
- Click "Collect & Deploy" workflow on the left
- Click "Run workflow" → "Run workflow" (the green button)
- Wait ~5 minutes for it to complete
If you want radar.aegismemory.com:
- Go to your DNS provider (wherever aegismemory.com is registered)
- Add a CNAME record:
- Name:
radar - Value:
quantifylabs.github.io(or your GitHub username +.github.io) - TTL: 3600
- Name:
- Go to your repo → Settings → Pages
- Under Custom domain, enter
radar.aegismemory.com - Check "Enforce HTTPS"
- Wait 5-10 minutes for DNS propagation + SSL certificate
If you don't want a custom domain, delete the site/CNAME file. Your site will be at https://<username>.github.io/oss-radar/.
After the first successful run, the cron job will run automatically every 6 hours (00:00, 06:00, 12:00, 18:00 UTC). Check:
- Actions tab → you should see scheduled runs
- site/data.json → should have real repo data
- Your URL → the dashboard should render with repos
oss-radar/
├── .github/
│ └── workflows/
│ └── collect.yml # GitHub Actions: cron + deploy
├── collector/
│ ├── collect.py # Main collection script
│ ├── render_pages.py # Static pages, sitemap, robots, feeds
│ ├── validate_site.py # Pre-deploy site/data checks
│ └── requirements.txt # Just: requests
├── site/
│ ├── index.html # Frontend dashboard
│ ├── data.json # Compact generated manifest (auto-updated)
│ ├── data/discovery/ # Paginated discovery records for bounded browser loads
│ ├── history.json # Star snapshots (for computing deltas)
│ ├── robots.txt # Crawler policy
│ ├── sitemap.xml # Generated sitemap
│ ├── feed.xml # Generated RSS feed
│ └── CNAME # Custom domain config
├── .gitignore
└── README.md
GitHub Actions cron (every 6h, free)
│
▼
collector/collect.py
│
├── GitHub Search API → find AI repos by topic
├── GitHub REST API → fetch commits, contributors
├── Gem Score engine → weighted quality scoring
├── Adoption signals → readiness + maintainer health
├── Static page render → sitemap, feeds, crawlable category pages
└── Star delta calc → compare with history.json
│
▼
site/data.json (committed to repo)
│
▼
GitHub Pages (free static hosting)
│
▼
radar.aegismemory.com
Total monthly cost: ₹0
- GitHub Actions: ~90 min/month (free tier = 2,000 min)
- GitHub Pages: free for public repos
- GitHub API: ~1,200 req/day (free tier = 5,000/hr)
- Domain: already owned
Edit SEARCH_TOPICS in collector/collect.py:
SEARCH_TOPICS = [
"llm", "ai-agent", ...
"your-new-topic", # add here
]Discovery and classification are one coordinated taxonomy: whenever you add a
discovery term to SEARCH_TOPICS, also add it to the appropriate entry in
CATEGORY_MAP (or intentionally document why it should use the dev-tools
fallback). Category mapping order is significant when match counts tie, so keep
specific categories ahead of general-purpose framework/tool topics.
The canonical category slugs are agent-framework, model-serving,
fine-tuning, rag-and-search, dev-tools, mcp, evals-and-testing,
local-and-edge-ai, gateways-and-routing, ai-security-and-guardrails,
ai-coding-and-assistants, ai-webui-and-interfaces, multimodal-media, and
vector-dbs-and-data. Legacy safety-and-evals records are classified into
security/guardrails or evals/testing based on their topics; legacy mlops
records are classified into data infrastructure, model serving, or dev tools.
Edit GEM_STAR_CEILING in collector/collect.py:
GEM_STAR_CEILING = 500 # max stars to qualify as "underrated"Edit .github/workflows/collect.yml:
schedule:
- cron: "0 */6 * * *" # every 6 hours
# - cron: "0 */12 * * *" # every 12 hours
# - cron: "0 0 * * *" # once daily at midnight- Python 3.12 +
requests— data collection - GitHub REST API — repo discovery and metadata
- Static HTML/CSS/JS — no framework, no build step
- GitHub Actions — cron scheduler
- GitHub Pages — hosting
MIT — Quantify Labs Ltd
Built by Arulnidhi Karunanidhi · Quantify Labs