Open-Source Wikis

/

curl

/

curl

curl/curl

curl

curl is a command-line tool and a portable C library (libcurl) for transferring data between a client and a server using URLs. The project ships two products from one source tree: the curl executable in src/ and libcurl in lib/ plus the public headers in include/curl/. Almost every operating system, browser-less device, language runtime, and CI/CD pipeline relies on libcurl somewhere in the call chain — by the project's own count, libcurl is installed in the order of 20 billion instances worldwide.

What it does

curl moves bytes over the network using a long list of protocols:

  • HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2, HTTP/3
  • HTTPS over the same versions, with multiple TLS backends
  • FTP and FTPS
  • SMTP and SMTPS
  • IMAP and IMAPS
  • POP3 and POP3S
  • LDAP and LDAPS
  • SCP, SFTP (over libssh, libssh2, or wolfSSH)
  • SMB, SMBS
  • TELNET, TFTP, DICT, GOPHER/GOPHERS, FILE
  • MQTT, MQTTS
  • WebSockets (ws://, wss://)
  • RTSP

It supports HTTP, HTTPS, and SOCKS proxies, including HTTPS-to-proxy and HTTP/2-to-proxy. It supports cookies, ETags, alt-svc, HSTS, content encoding (gzip, deflate, brotli, zstd), and a large catalog of authentication schemes (Basic, Digest, NTLM, Negotiate/SPNEGO, AWS SigV4, Bearer, OAuth 2.0).

Two products, one repository

Product Source Public surface Description
curl src/ command-line options + exit codes Single-binary CLI: parses flags, opens easy/multi handles, drives transfers
libcurl lib/ headers in include/curl/ Reentrant C library with stable ABI and SONAME 4 (since 2006)

The CLI is essentially a thin wrapper around libcurl. Almost every interesting capability lives in the library; src/ mostly translates command-line flags into curl_easy_setopt() calls and orchestrates one-or-many parallel transfers via the multi interface.

Where to start

Goal Page
Build curl and libcurl from source Getting started
Understand the system at a glance Architecture
Look up project-specific terminology Glossary
Use the C API API reference
Hack on libcurl internals Systems, Patterns and conventions
Add a new TLS backend or protocol Features, How to contribute

Open Source

curl is distributed under an MIT-style license — see the COPYING file at the repository root. Daniel Stenberg has been the maintainer since December 1996, originally taking over and renaming Rafael Sagula's httpget 0.1. The code lives at https://github.com/curl/curl and the project's home is https://curl.se/.

Project status

The codebase is large, mature, and actively developed: ~196k lines of C in lib/ and src/, ~38,500 commits, a release every ~8 weeks, and a test suite with nearly 2,000 functional tests plus a few hundred unit tests. See By the numbers for a current snapshot and Lore for how the codebase reached its current state.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

curl – curl wiki | Factory