Warning
GitHub restricted public access to stargazer lists (July 2026).
On June 30 2026 GitHub announced access restrictions to public API endpoints and UI views. Since July 23 2026 the Repository.stargazers connection returns empty on GraphQL, REST, and the /stargazers web page, for every repo. StarMapper builds its map from that exact list, so new repo scans currently return no stargazers to place. Repos mapped before the cutoff still render from cached data.
This is a GitHub-side change, not a bug here. An engaged-audience indexing pipeline already ships as a first replacement, mapping forkers, issue and PR authors, mentionable users, and watchers instead of stargazers (still-open GraphQL connections, all carrying location inline). It recovers roughly 6-16% of a repo's former star volume. What comes next, an owner-verified live dashboard, a frozen pre-cutoff archive, leading with Contributors and Dependents instead of stars, is a genuinely open question: vote or read the options at starmapper.bruniaux.com/roadmap.
Sources: changelog · community #202114 · community #201209 · independent confirmation
See who stars your repo, on a map.
Stars are a proxy for developer community. Where those developers live tells you where your project has traction, which markets are accelerating, and who your most influential users are.
Enter a GitHub repo URL and StarMapper maps every stargazer, identifies the influential ones, and tells you whether those numbers are organic.
flowchart LR
repo["github.com/owner/repo"] --> sm{{"StarMapper"}}
subgraph map["Repo Map"]
direction TB
m1["🗺️ Stargazer world map\nheatmap · timelapse · filters"]
m2["📊 Organic Score\nreal vs bought?"]
m3["📈 Country velocity"]
m4["⭐ Influential users"]
m5["⚖️ Compare two repos"]
end
subgraph community["Community"]
direction TB
c1["👥 Contributors map"]
c2["👤 Followers map"]
c3["🧑💻 Developer profiles"]
c4["📦 Dependents"]
end
subgraph discover["Discover"]
direction TB
d1["🔍 Explore · Nearby · Companies"]
d2["🌍 Dev Maps · Language Atlas"]
d3["📈 Trending repos"]
end
subgraph integrate["Integrate"]
direction TB
i1["🔴 Live mode during launches"]
i2["🤖 MCP server · 10 tools"]
i3["🔗 Badge · Embed · GeoJSON API"]
i4["🌐 Chrome Extension"]
end
sm --> map
sm --> community
sm --> discover
sm --> integrate
- Explore developers by country:
/devs/in/[country]pages (e.g./devs/in/germany) show every geocoded developer from that country on an interactive globe, with a sidebar listing the top programming languages and their share. Entry point: the "By country" tab on/devs. - Map who built your repo: every repo has a
/[owner]/[repo]/contributorspage. Each contributor is geocoded and placed on a map, with dot size proportional to commit count. The panel lists contributors sorted by commits, with a pin icon to fly to their location. - Map who follows your most influential stargazers: every developer profile has a
/[owner]/followerspage with a full map of their GitHub followers, using the same geocoding and clustering as repo maps - Know your influential stargazers: filter by follower count (500+, 1k+, 5k+), see who has reach in your audience, spot the developer with 20k followers who starred you last week
- See which countries are discovering you: geographic velocity compares the last 30 days against the prior window, four statuses per country: rising, new, stable, declining
- Compare two audiences side by side: overlay two repos on the same map, blue vs purple points, see instantly whether you share an audience or target different communities
- Watch stars arrive during a launch: live mode polls GitHub every 60 seconds and shows "+N stars, India, Germany" with a pulsing indicator, built for Product Hunt and HN days
- Verify whether the count is real: the Organic Score (0-100) flags suspicious patterns using five signals (fork ratio, watcher ratio, zero-follower accounts, releases cadence, contributors per 1k stars), calibrated on a 19-repo corpus
- Explore who depends on your library:
/[owner]/[repo]/dependentslists every repo that uses your package, sorted by stars or forks, with ecosystem badges (npm, PyPI, Go, Maven, Cargo, and more). Data from ecosyste.ms, cached 7 days. - Query audience data from Claude Code:
starmapper-mcpexposes ten tools as an MCP server so you can ask "who are my most influential stargazers?", "which countries are accelerating?", or "who depends on this library?" directly in your terminal
Full feature list: docs/FEATURES.md · Architecture: docs/ARCHITECTURE.md
OSS maintainers who want to understand their audience beyond a star count. Which countries are discovering your repo? Who are the most-followed developers in your stargazers list? Is the traffic from Japan a spike or a sustained trend?
Influential developers whose activity is a signal others follow. StarMapper builds a visible profile for your curation: your own map, nearby developers, and a way for maintainers to find and contact you.
DevRel teams and content creators who need geographic data for blog posts, slides, or reports. Language Atlas, Timelapse, and the GeoJSON API (/api/geo/[owner]/[repo]) provide the data directly.
Investors doing due diligence who use star counts as a signal. The Organic Score adds a quality layer to a number that is otherwise trivially gameable.
| Tool | What it answers |
|---|---|
| star-history | When did stars arrive? (growth curve over time) |
| ossinsight | Who contributed code? (commit and PR analytics) |
| StarMapper | Where is the audience? Who are the influential ones? Which countries are accelerating? Are the stars real? |
Stars are used as a proxy for quality by developers evaluating libraries, investors doing due diligence, and the press writing "trending in open source" articles. Services sell stars in bulk to inflate that number. StarMapper computes an Organic Score (0–100) using three public signals:
| Signal | Weight | What it measures |
|---|---|---|
| Fork/Star ratio | 40% | Real developers fork repos they use |
| Watcher/Star ratio | 5% | Watchers are a deliberate opt-in since 2020 |
| Zero-follower stargazers | 55% | Star-farming services use newly-created accounts |
Scores map to: Healthy (75–100), Moderate (50–74), Suspicious (0–49). Full methodology: docs/organic-score.md
Map image: a 1200×630 scatter map of your stargazers, switching between dark and light themes automatically:
Copy and replace owner/repo with your repository, or use the "Embed" button on the map page to get the snippet pre-filled:
<a href="https://starmapper.bruniaux.com/owner/repo">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://starmapper.bruniaux.com/api/map-image/owner/repo?theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://starmapper.bruniaux.com/api/map-image/owner/repo?theme=light" />
<img alt="StarMapper" src="https://starmapper.bruniaux.com/api/map-image/owner/repo" />
</picture>
</a>Badge (shields-style, star count + countries, CDN-cached every 6 hours):
[](https://starmapper.bruniaux.com/owner/repo)Install starmapper-mcp as an MCP server to query StarMapper data directly from your terminal:
{ "mcpServers": { "starmapper": { "command": "npx", "args": ["starmapper-mcp"] } } }Ten tools are available: get_repo_stats, get_organic_score, get_velocity, get_influential_stargazers, index_repo, health_check, get_cache_status, get_trending, list_repos, and get_dependents. index_repo drives the full indexation loop from the MCP client, so you can keep a repo's data fresh without opening a browser.
Override the default endpoint with STARMAPPER_BASE_URL if you run a self-hosted instance. Full docs: mcp/README.md
Each /api/chunk call processes 100 stargazers and returns in under 10 seconds. The browser orchestrates the loop sequentially until all pages are fetched, then caches the full result so subsequent visitors load instantly.
Full architecture, request flow, and rate limit table: docs/ARCHITECTURE.md
Prerequisites: Node.js 20+, pnpm, a Neon Postgres database, a GitHub personal access token.
git clone https://github.com/FlorianBruniaux/starmapper.git
cd starmapper
pnpm installcp .env.example .env.localFill in your values (see Environment Variables below).
npx prisma db pushpnpm seed:geonamesInserts ~51k GeoNames entries. Without this, first-time geocoding is slower since every location goes through the API cascade. The operation is idempotent.
pnpm devOpen http://localhost:3000, enter any public GitHub repo URL.
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | Postgres connection string (Neon, Docker, Railway, Supabase…) |
DATABASE_DRIVER |
No | neon (default) or standard (plain TCP PostgreSQL) |
GITHUB_TOKEN |
Yes | GitHub PAT with read:user scope |
JAWG_TOKEN_HEADER |
Recommended | Dedicated Jawg Places geocoding token (starmapper.jawg.io) |
JAWGMAP_ACCESS_TOKEN |
Recommended | Jawg token for explore autocomplete + reverse geocoding |
NEXT_PUBLIC_JAWGMAP_ACCESS_TOKEN |
Yes (client) | Jawg token for MapLibre tile rendering |
GEOAPIFY_APIKEY |
Recommended | Geocoding fallback (Geoapify) |
NEXT_PUBLIC_APP_URL |
No | App base URL for OG metadata |
ADMIN_SECRET |
No | Secret for /api/admin/* routes |
SM_TOKEN_SECRET |
Recommended | HMAC secret for the anti-scraping session cookie, min 32 chars (openssl rand -hex 32) |
SM_TOKEN_SECRET_PREV |
No | Previous SM_TOKEN_SECRET, accepted for verification only during a rotation |
IP_HASH_SECRET |
Recommended | HMAC secret for hashing voter IPs on /roadmap, min 16 chars |
Without JAWG_TOKEN_HEADER and GEOAPIFY_APIKEY, geocoding falls back to Nominatim (sequential, 1 req/s). With the GeoNames pre-seed in place, this rarely matters.
pnpm dev # Dev server (Turbopack)
pnpm build # Production build
pnpm typecheck # tsc --noEmit
pnpm test # Unit tests (Vitest)
npx prisma db push # Apply schema changes
npx prisma generate # Regenerate Prisma clientFull command reference including backfills, batch scan, and maintenance pipeline: CLAUDE.md section VII.
Privacy & Data
StarMapper accesses publicly available data from the GitHub API, the same data visible to anyone browsing github.com:
- GitHub username (login)
- Display name (if set on the profile)
- Self-declared location field (e.g. "Paris, France")
- Star date
No private data is ever accessed. No email addresses. No repository content or commit history.
Location text is geocoded into coordinates and stored in a shared cache to avoid redundant API calls. Results appear as geographic clusters on a map, not as searchable individual records.
- No ads, no analytics, no tracking
- No selling or sharing of data with any third party
- No user accounts, no email collection
- No monetisation of any kind
User profile records and star event data are automatically deleted after 12 months from last fetch. The geocoding cache (location text strings only — no personal identifiers, no logins) is retained indefinitely to avoid redundant API calls; it contains no data linkable to individual users. Full details: starmapper.bruniaux.com/privacy.
Option 1 (immediate): Remove or clear your location in your GitHub profile settings. The next scan that includes you will use the updated profile.
Option 2 (full deletion): Email florian@bruniaux.com with subject "GDPR Data Deletion Request" and your GitHub username. Done within 30 days.
Full privacy policy: starmapper.bruniaux.com/privacy
StarMapper is made possible thanks to:
- JawgMaps — map tiles and a dedicated geocoding instance (
starmapper.jawg.io) - Neon — serverless Postgres hosting the geocache, scan results, and all user-level data
Open an issue before sending a pull request for anything beyond a typo fix. The project is intentionally minimal; CLAUDE.md section X lists what is explicitly out of scope.
By submitting a pull request, you certify that your contribution complies with the Developer Certificate of Origin v1.1. Add a Signed-off-by line to your commits (git commit -s).
Florian Bruniaux, developer and builder based in France. StarMapper started as a weekend experiment to visualize my own repo's audience, kept evolving, and ended up being useful to others too.
Other tools in the same ecosystem — most useful if you work with GitHub and Claude Code:
| Project | What it does |
|---|---|
| claude-code-ultimate-guide | 24K+ lines on Claude Code: architecture, security, TDD/BDD, 271 quiz questions, 655 malicious skills DB |
| RTK | CLI proxy — 60-90% token reduction on git, tsc, vitest, prisma and more |
| ccboard | Real-time TUI/Web dashboard for Claude Code monitoring |
| cc-sessions | Fast CLI to search, browse and analyze Claude Code session history |
| ctxharness | Detects stale facts in CLAUDE.md, AGENTS.md, .cursorrules before they reach your agents |
| dep-scope | Symbol-level dependency analyzer for TypeScript/JS — shows what you actually use |
| cc-copilot-bridge | Route Claude Code through GitHub Copilot Pro+ for flat-rate billing |
| claude-cowork-guide | Claude for non-coders: 28 business workflows, writers, ops managers, async teams |
GitHub: github.com/FlorianBruniaux · Email: florian@bruniaux.com
AGPL-3.0-only, free to use, fork, and self-host. If you modify StarMapper and run it as a public service, you must publish your source changes under the same license.
This project is archived on Software Heritage for provenance and authorship verification.