I wanted to answer a simple question: what are popular open source projects actually made of?
Not what their README says. Not what their marketing page claims. What does the code itself reveal?
So I pointed RepoCrunch — a deterministic repo analyzer I built — at 17 well-known GitHub repositories and collected the data.
Here's what I found.
🦀 Rust is quietly eating JavaScript tooling
This was the biggest surprise. Three "JavaScript ecosystem" tools have significant Rust codebases:
| Project | You'd think it's... | Actually... |
|---|---|---|
| Next.js | JavaScript | 13.5% Rust |
| Tailwind CSS | CSS/JS | 16.0% Rust |
| Deno | JavaScript runtime | 59.4% Rust |
Next.js — the React meta-framework — is 13.5% Rust. Tailwind CSS is 16% Rust. These aren't Rust projects. They're JavaScript tools that have quietly moved performance-critical paths to Rust.
And then there's Deno: marketed as a JavaScript/TypeScript runtime, but it's actually a Rust project (59.4%) that happens to run JavaScript.
Meanwhile, uv — Python's fastest package manager — is 98.1% Rust. A Python tool with essentially zero Python.
The pattern is clear: Rust is becoming the systems language behind dynamic language ecosystems. If you're building dev tools in 2026, Rust is the performance layer you reach for.
📦 Dependency counts tell very different stories
| Project | Direct Dependencies | Stars |
|---|---|---|
| Django | 3 | 87K ⭐ |
| FastAPI | 5 | 96K ⭐ |
| Flask | 6 | 71K ⭐ |
| NestJS | 19 | 75K ⭐ |
| Express | 28 | 69K ⭐ |
| VS Code | 49 | 182K ⭐ |
| Angular | 104 | 100K ⭐ |
Django runs on 3 dependencies. The most popular Python web framework, powering Instagram and Spotify, depends on just three external packages.
Compare that to Angular's 104 direct dependencies. That's not inherently bad — they're a full framework with more surface area. But it's a fundamentally different philosophy: own everything vs. compose from parts.
The Python ecosystem clearly leans minimal. FastAPI (5 deps) and Flask (6 deps) follow the same pattern. Node.js frameworks consistently pull in more.
🏥 Open issues don't mean what you think
| Project | Open Issues | Stars | Ratio |
|---|---|---|---|
| Flask | 3 | 71K | 1 per 23,777 ⭐ |
| NestJS | 42 | 75K | 1 per 1,783 ⭐ |
| Tailwind | 84 | 94K | 1 per 1,118 ⭐ |
| FastAPI | 145 | 96K | 1 per 662 ⭐ |
| Angular | 1,131 | 100K | 1 per 88 ⭐ |
| Prisma | 2,505 | 45K | 1 per 18 ⭐ |
| uv | 2,716 | 80K | 1 per 30 ⭐ |
| Rust | 12,155 | 111K | 1 per 9 ⭐ |
| VS Code | 14,704 | 182K | 1 per 12 ⭐ |
Flask has 3 open issues. VS Code has 14,704.
Does that mean Flask is better maintained? Not exactly. Flask is a mature, stable project with a narrow scope. VS Code is an IDE used by millions — every edge case becomes an issue.
Issue count scales with surface area and user base, not with code quality. Rust (the language) has 12K open issues because building a compiler for millions of developers generates a lot of edge cases.
The interesting outlier is Prisma — 2,505 open issues against just 45K stars. That's one of the highest issue-to-star ratios in this dataset. It suggests either a broader surface area than its star count implies, or maintenance challenges.
🧬 TypeScript won — but not everywhere
| Primary Language | Projects |
|---|---|
| TypeScript | Angular, VS Code, NestJS, Vue, Prisma, Supabase |
| JavaScript | React, Svelte, Express, Next.js |
| Python | Django, Flask, FastAPI |
| Rust | uv, Deno, Rust-lang |
TypeScript is the plurality leader for large-scale projects. But look more closely:
- React is still primarily JavaScript (68.1%) — Facebook's flagship UI library hasn't fully migrated
- Svelte is 71.8% JavaScript — Rich Harris chose to keep the compiler in JS
- Vue went all-in on TypeScript (96.6%) — a deliberate rewrite choice for v3
The JS-vs-TS split often comes down to project age and rewrite ambition. Vue rewrote from scratch for v3 → TypeScript. React is incrementally migrating → still mostly JavaScript.
👥 Who actually builds these things?
| Project | Contributors | Age (years) |
|---|---|---|
| Rust | 8,257 | 15.7 |
| Next.js | 4,060 | 9.4 |
| Django | 3,405 | 19.1 |
| VS Code | 2,940 | 10.4 |
| Angular | 2,577 | 11.5 |
| React | 1,971 | 12.8 |
| Supabase | 1,852 | 5.6 |
| Express | 377 | 14.6 |
| Tailwind | 344 | 8.5 |
| Prisma | 355 | 5.7 |
Express — the backbone of Node.js servers — has been maintained by just 377 contributors over 14.6 years. Compare that to Next.js with 4,060 contributors in under 10 years.
Supabase stands out: 1,852 contributors in just 5.6 years. That's community velocity.
And Tailwind CSS — used on millions of websites — has just 344 contributors. A small team can build something with massive reach.
How I got this data
All of this came from RepoCrunch — a tool I built that analyzes GitHub repos into structured JSON. No AI, no LLMs, fully deterministic.
pip install repocrunch
repocrunch analyze vercel/next.js --pretty
It parses real repo data — languages, dependencies, CI setup, health metrics — and gives you structured facts. I built it because I was tired of asking ChatGPT "what's this repo built with?" and getting hallucinated answers.
It also works as an MCP server, so your AI coding assistant can look up real repo data instead of guessing.
The raw data is what it is. Next.js is 13.5% Rust. Django has 3 dependencies. Flask has 3 open issues. These aren't opinions — they're measurements.
What surprised you most? I'd love to hear what repos you'd want to analyze next.
Originally published at getjustgo.com
Top comments (0)