Skip to content

Latest commit

 

History

403 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OSS Radar — AI Open-Source GitHub Repository Tracker

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

What it does

  • 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.

Scoring algorithms

The Gem Score algorithm

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.

Adoption readiness and maintainer health

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.


Setup — Step by step

Step 1: Create the GitHub repo

# Clone this project
git clone <this-repo-url> oss-radar
cd oss-radar

Or create a new repo on GitHub named oss-radar and push these files to it.

Step 2: Create a GitHub Personal Access Token (PAT)

The collector needs a token to avoid API rate limits (unauthenticated = 60 req/hr, authenticated = 5,000 req/hr).

  1. Go to https://github.com/settings/tokens?type=beta
  2. Click "Generate new token" (Fine-grained token)
  3. Name it oss-radar-collector
  4. Set expiration to 90 days (you'll rotate it quarterly)
  5. Under Repository access → select "Public Repositories (read-only)"
  6. No additional permissions needed — read-only public access is enough
  7. Click Generate token
  8. Copy the token (you won't see it again)

Step 3: Add the token as a GitHub Actions secret

  1. Go to your repo on GitHub → SettingsSecrets and variablesActions
  2. Click "New repository secret"
  3. Name: GH_PAT
  4. Value: paste the token from Step 2
  5. Click Add secret

Step 4: Enable GitHub Pages

  1. Go to your repo → SettingsPages
  2. Under Source, select "GitHub Actions"
  3. Save

Step 5: Run the collector for the first time

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 -20

Option B — Trigger via GitHub Actions:

  1. Go to your repo → Actions tab
  2. Click "Collect & Deploy" workflow on the left
  3. Click "Run workflow""Run workflow" (the green button)
  4. Wait ~5 minutes for it to complete

Step 6: Set up the custom domain (optional)

If you want radar.aegismemory.com:

  1. Go to your DNS provider (wherever aegismemory.com is registered)
  2. Add a CNAME record:
    • Name: radar
    • Value: quantifylabs.github.io (or your GitHub username + .github.io)
    • TTL: 3600
  3. Go to your repo → SettingsPages
  4. Under Custom domain, enter radar.aegismemory.com
  5. Check "Enforce HTTPS"
  6. 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/.

Step 7: Verify automation

After the first successful run, the cron job will run automatically every 6 hours (00:00, 06:00, 12:00, 18:00 UTC). Check:

  1. Actions tab → you should see scheduled runs
  2. site/data.json → should have real repo data
  3. Your URL → the dashboard should render with repos

Project structure

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

Architecture

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

Customizing

Add more topics to scan

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.

Change the gem threshold

Edit GEM_STAR_CEILING in collector/collect.py:

GEM_STAR_CEILING = 500   # max stars to qualify as "underrated"

Change scan frequency

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

Tech stack

  • 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

License

MIT — Quantify Labs Ltd


Built by Arulnidhi Karunanidhi · Quantify Labs

About

AI stack intelligence — trending tools, underrated gems, abandoned repos. Updated every 6 hours.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages