context-engines
Live capability board for OSS code-context engines — the new category of tools that index your codebase once and feed coding agents (Claude Code, Cursor, OpenCode, Continue, Cline, Aider, Windsurf, …) only the slice they actually need.
Production URL: https://holyai.me/context-engines/
What this is
For each tracked engine we hit the real GitHub REST API every 6 hours, parse the README with deterministic regex, and compute a six-axis Context Score (0–100) plus a tier (S/A/B/C/D). The board surfaces:
- A sortable, filterable leaderboard
- A side-by-side capability matrix (MCP / hybrid / vector backend / AST chunker / token-cut claim / install methods / license)
- 7-day movers (gainers and decliners by Context Score delta)
- A per-engine detail page with the score breakdown drawn as a radar, a sparkline of historical scores, and the actual README excerpt that triggered every capability flag
No mocks, no seed fallbacks, no synthetic data. Every number traces back to a real GitHub API call or a regex hit on the live README at the captured commit.
Stack
- Node.js ≥ 20, Express
- better-sqlite3 (WAL mode) — single-file storage, no server
- node-cron — 6h refresh, daily reseed
- helmet + compression
- Vanilla JS + inline SVG on the front-end. No frameworks, no client-side libraries.
Real data sources
| Endpoint | What we extract |
| --- | --- |
| GET /repos/{o}/{n} | stars, forks, license SPDX id, default branch, archived flag, open issues |
| GET /repos/{o}/{n}/commits?per_page=1 | last commit SHA + date |
| GET /repos/{o}/{n}/commits?since=<now-7d> | weekly commit count |
| GET /repos/{o}/{n}/releases/latest | latest release tag + date |
| GET /repos/{o}/{n}/readme | raw README markdown (canonical filename) |
| GET /repos/{o}/{n}/languages | language byte map |
Refresh cadence: every 6 hours (cron 0 /6 ), paced at ~1 request/second to stay well under the secondary rate limiter. Daily reseed at 04:00 picks up any new engines added to data/engines.json.
Score breakdown
| Axis | Weight | Inputs |
| --- | --- | --- |
| Maintenance | 20% | days since last commit (0d → 100, 7d → 90, 30d → 70, 90d → 40, 180d → 20, 365d+ → 5); archived flag overrides to 0 |
| Velocity | 15% | commits in the last 7 days (21+ → 100, 6 → 75, 1–2 → 30, 0 → 0) |
| Capability | 25% | MCP-compatible (+30), retrieval mode hybrid/dense/lexical (+25/+15/+10), AST chunker (+15), ≥20 languages claimed (+15), vector backend detected (+15) |
| Transparency | 10% | token-reduction claim present (+30), README ≥ 800 chars (+30), at least one release (+20), real license (+20) |
| Footprint | 15% | single binary (+25), offline-capable (+25), ≥2 install methods detected (+25), permissive license (+25) |
| Popularity | 15% | log10(stars+1) normalized so 10k stars = 100 |
ContextScore = round(0.20*Maint + 0.15*Veloc + 0.25*Cap + 0.10*Trans + 0.15*Footp + 0.15*Pop)
Tier mapping: S 80–100, A 65–79, B 50–64, C 35–49, D 0–34.
Running locally
cp .env.example .env
# put a GitHub token in .env (read:public is enough)
npm install
npm start # serves :4905/context-engines
npm run refresh # manually trigger a refresh of all engines
npm run reseed # pick up any new entries added to data/engines.json
The server runs an initial refresh in the background 10 seconds after boot. The page works immediately with seed metadata; capability flags fill in as the refresh completes (1 second per engine, paced).
Adding an engine
Add { "owner": "...", "name": "...", "install_kind": "..." } to data/engines.json and either restart or wait for the 04:00 reseed cron. The engine will be picked up on the next refresh run.
Endpoints
GET /context-engines/ SPA
GET /context-engines/health { ok, engines, lastRefreshAt, version }
GET /context-engines/api/engines full leaderboard
GET /context-engines/api/engines/:slug detail + provenance + score history
GET /context-engines/api/movers 7-day gainers and decliners
GET /context-engines/api/stats totals, medians, distributions
GET /context-engines/api/category-matrix capability matrix used by the Matrix view
GET /context-engines/api/refresh-status last refresh metadata + rate limit
No authentication on any endpoint. All routes public.
License
MIT.