curl/curl
Fun facts
A handful of curiosities found while crawling this codebase.
The codebase is older than most of its dependencies
The first commit imported into git is from December 1999. The project itself started in November 1996, originally as httpget by Rafael Sagula. By the time the public-suffix list, brotli, HTTP/2, and HTTP/3 came along, curl had already been shipping for a decade or more. The oldest dependency still listed in docs/INTERNALS.md is OpenLDAP 2.0 (released Aug 2000) — older than the libcurl SONAME bump from 1 to 2.
SONAME 4 has held since 2006
libcurl.so.4 has been the Linux SONAME for 20 years. The last bump was the 2006 removal of FTP third-party transfer (a feature that lets a client tell two FTP servers to talk to each other directly). Every change since then has been backwards-compatible. The version script lib/libcurl.vers.in and the cabinet lib/libcurl.def have grown but never re-numbered.
The longest C source file is the OpenSSL TLS adapter
lib/vtls/openssl.c is the longest individual C file at 171 KB. Second place is lib/http.c at 157 KB; third is lib/ftp.c at 141 KB. The fact that an adapter outweighs a protocol implementation speaks to how broad OpenSSL's API is and how many forks (OpenSSL, LibreSSL, BoringSSL, AWS-LC, quictls) it has to handle simultaneously.
configure.ac is bigger than several of the protocols
The Autoconf script configure.ac is 162 KB — larger than lib/multi.c (128 KB), lib/url.c (113 KB), and the entire URL API (lib/urlapi.c at 56 KB). curl's portability story is, in literal lines of build code, comparable to its largest runtime systems.
Naming origins
- curl stands for "client URL" — chosen during the Mar 1998 rename from
urlgetto make the C-as-language pun work, but the official expansion settled on "client URL" rather than "see URL". - httpget was the original name (Rafael Sagula's pre-curl project, Nov 1996).
- urlget was the name after Daniel Stenberg added FTP and GOPHER (Aug 1997 – Mar 1998).
- vtls / vquic / vauth / vssh prefixes mean "virtual
" — a vtable layer that lets curl swap out implementations. - trurl (a separate repo) is "true URL" — a CLI for the URL API.
- wcurl is "wget-style curl" — a wrapper script (
scripts/wcurl) that fills in common download patterns. Adopted into the curl org in Aug 2024. - dynbuf ("dynamic buffer") and bufq ("buffer queue") are the project's two byte-container types in
lib/curlx/dynbuf.candlib/bufq.c.
TODO/FIXME count is remarkably low
A grep for TODO|FIXME|HACK|XXX in lib/, src/, and include/ returns 9 hits total across hundreds of source files. Either the maintainers actively burn down the list or they discourage merging code that introduces tagged-debt comments. The project does keep a separate docs/TODO.md (39 KB) listing wishes maintainers would accept.
The test data directory has more files than the source directory
tests/data/ contains 1,968 numbered test files. lib/ has 184 .c files. Tests outnumber sources roughly 10:1 by file count. Each numbered test file is a complete fixture: command, server reply, expected protocol trace, expected stdout, expected stderr.
The repo has no Dependabot
A scan of the last two years' commits (6,407 commits) finds zero with bot co-authorship. There is no Dependabot configuration, no Renovate auto-merge, no GitHub Actions auto-PR. The only automated commits in the project's history are gh interactions made by maintainers themselves. (curl does configure renovate.json for vendored dependencies in .github/, but the merges are still human.)
RTMP support survived 16 years
RTMP was added in May 2010 and removed in April 2026 — about as long as the entire span between the project's beginning (1996) and HTTP/2 (2014). It outlasted PolarSSL, axTLS, MesaLink, NSS, GSKit, and Hyper.
Daniel Stenberg started working on curl full-time in 2019
Funding by wolfSSL took curl from a labour-of-love side project (running for 23 years already) into someone's day job. The contributor table in 2017 shows ~1,600 contributors; by 2025 it is 3,534. The full-time commitment plus the contributor count more than doubling suggests that paid maintenance accelerated rather than crowded out community work.
Where these facts come from
- File sizes from a
find … -printf '%s %p\n' | sort -rnoverlib/,src/, and the repo root. docs/HISTORY.mdfor dates and narrative.git logandgit rev-listfor activity counts.scripts/contributors.shfor contributor numbers.git grep "TODO\|FIXME\|HACK\|XXX" lib src include --include='*.c' --include='*.h'for the in-code debt count.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.