curl/curl
By the numbers
Data collected on 2026-04-30 from a clone of curl/curl at commit ddb30354f6 on master.
Size
xychart-beta horizontal
title "Source lines (approx.) by area"
x-axis "Lines (k)"
y-axis ["lib/", "lib/vtls/", "lib/vquic/", "lib/vauth/", "lib/vssh/", "lib/curlx/", "src/", "include/curl/", "tests/", "docs/"]
bar [110, 25, 16, 8, 23, 6, 35, 7, 200, 80](Line counts are rough; exclude headers from each subdirectory's bar where the area mostly grows from .c files.)
| Area | .c/.h files |
|---|---|
lib/ (excluding subdirs) |
184 / 178 |
lib/vtls/ |
17 / 14 |
lib/vquic/ |
4 / 5 |
lib/vauth/ |
13 / 2 |
lib/vssh/ |
4 / 2 |
lib/curlx/ |
19 / 19 |
src/ |
43 / 45 |
include/curl/ |
0 / 12 + curl.h |
docs/cmdline-opts/ |
~280 markdown files (one per option) |
docs/libcurl/opts/ |
~340 markdown files (one per CURLOPT/CURLINFO/CURLMOPT/CURLSHOPT) |
docs/examples/ |
129 example C programs |
tests/data/ |
1968 numbered tests |
.github/workflows/ |
17 workflow files |
Aggregate: ~196k lines of C across lib/, src/, and include/. The total source tree (with docs and tests) is much larger; the tests/data/ directory alone has nearly 2k single-file tests.
The largest individual files:
| File | Size |
|---|---|
lib/vtls/openssl.c |
171 KB |
configure.ac |
162 KB |
lib/http.c |
157 KB |
lib/ftp.c |
141 KB |
lib/multi.c |
128 KB |
lib/vssh/libssh2.c |
126 KB |
lib/url.c |
113 KB |
src/tool_getparam.c |
103 KB |
lib/vtls/schannel.c |
99 KB |
lib/http2.c |
97 KB |
lib/vquic/curl_ngtcp2.c |
96 KB |
CMakeLists.txt |
92 KB |
lib/vssh/libssh.c |
93 KB |
lib/setopt.c |
84 KB |
Activity
Total commits in the repository: 38,547 (first commit imported in December 1999 from CVS history dating back to 1996; SVN/CVS-era history is preserved).
Commits in the last 90 days: 823. Recent monthly activity:
| Month | Commits |
|---|---|
| 2025-04 | 11 |
| 2025-05 | 199 |
| 2025-06 | 226 |
| 2025-07 | 286 |
| 2025-08 | 243 |
| 2025-09 | 276 |
| 2025-10 | 438 |
| 2025-11 | 410 |
| 2025-12 | 333 |
| 2026-01 | 288 |
| 2026-02 | 222 |
| 2026-03 | 357 |
| 2026-04 | 232 (partial) |
(The pre-May-2025 activity in the table reflects the way this snapshot's git log was filtered, not historical truth — the project has been continuously active since 1996.)
Churn hot-spots (last 90 days)
| File / Path | Touched commits |
|---|---|
.github/workflows/linux.yml |
54 |
tests/data/Makefile.am |
49 |
lib/url.c |
48 |
CMakeLists.txt |
48 |
.github/workflows/http3-linux.yml |
45 |
lib/http.c |
44 |
.github/workflows/windows.yml |
38 |
lib/vtls/openssl.c |
36 |
lib/ftp.c |
34 |
lib/multi.c |
32 |
lib/curl_setup.h |
32 |
src/tool_operate.c |
29 |
lib/urldata.h |
29 |
RELEASE-NOTES |
28 |
configure.ac |
27 |
Churn hot-spots by directory
| Directory | Commits touching it (90d) |
|---|---|
lib/ |
1312 |
docs/libcurl/opts/ |
297 |
docs/examples/ |
278 |
tests/data/ |
276 |
src/ |
237 |
.github/workflows/ |
234 |
lib/vtls/ |
230 |
tests/unit/ |
172 |
tests/libtest/ |
162 |
Bot-attributed commits
Commits in the last two years that include a Co-authored-by: <something>[bot] line: 0 out of 6,407.
curl is essentially un-touched by automated commit bots (no Dependabot, no GitHub Actions auto-PRs in the merge history). This is a lower bound: AI assistants used inline by contributors leave no trace. Treat this number as evidence that bot-authored commits are not part of the project's day-to-day flow, not a claim about AI tooling overall.
Test coverage by count
| Test kind | Count |
|---|---|
| Functional tests | 1968 (tests/data/test*) |
| Unit tests | ~250 (tests/unit/unit*.c) |
| libtest programs | ~600 (tests/libtest/lib*.c) |
| Type-check tests | a few dozen (tests/tunit/) |
| Fuzz harnesses | several (tests/fuzz/) |
Tests are run on every PR across an extensive matrix in .github/workflows/linux.yml, macos.yml, windows.yml, and non-native.yml.
Public API surface
| Surface | Approximate count |
|---|---|
CURLOPT_* options |
308 |
CURLINFO_* getinfo properties |
~80 |
CURLMOPT_* multi options |
~15 |
CURLSHOPT_* share options |
~5 |
| Public functions | ~100 |
CURLcode error codes |
~100 |
| Supported URL schemes | 28+ |
Per-subsystem snapshot
| Subsystem | Files in lib/* | Largest file |
|---|---|---|
| Transfer engine | 4 | multi.c 128 KB |
| Connection management | 7 | url.c 113 KB |
| Connection filters | 13 (cf-*.c) |
cf-socket.c 69 KB |
| HTTP | 11 | http.c 157 KB |
| HTTP/2 | 1 | http2.c 97 KB |
| HTTP/3 + QUIC | 5 | curl_ngtcp2.c 96 KB |
| TLS backends | 8 backends + abstraction | openssl.c 171 KB |
| FTP | 4 | ftp.c 141 KB |
| SMTP/IMAP/POP3 | 3 + pingpong | smtp.c 61 KB / imap.c 68 KB |
| SSH (vssh) | 2 backends | libssh2.c 126 KB |
| Authentication (vauth) | 13 | digest.c 33 KB |
| URL API | 1 | urlapi.c 56 KB |
| Cookies/HSTS/Alt-Svc | 3 | cookie.c 48 KB |
| MIME/forms | 2 | mime.c 62 KB |
| WebSocket | 1 | ws.c 62 KB |
For "what does this subsystem do?", see the corresponding Systems and Features pages.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.