xref: /curl/docs/FEATURES.md (revision dbc4b707)
1<!--
2Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
3
4SPDX-License-Identifier: curl
5-->
6
7# Features -- what curl can do
8
9## curl tool
10
11 - config file support
12 - multiple URLs in a single command line
13 - range "globbing" support: [0-13], {one,two,three}
14 - multiple file upload on a single command line
15 - redirect stderr
16 - parallel transfers
17
18## libcurl
19
20 - URL RFC 3986 syntax
21 - custom maximum download time
22 - custom lowest download speed acceptable
23 - custom output result after completion
24 - guesses protocol from hostname unless specified
25 - supports .netrc
26 - progress bar with time statistics while downloading
27 - standard proxy environment variables support
28 - have run on 101 operating systems and 28 CPU architectures
29 - selectable network interface for outgoing traffic
30 - IPv6 support on Unix and Windows
31 - happy eyeballs dual-stack IPv4 + IPv6 connects
32 - persistent connections
33 - SOCKS 4 + 5 support, with or without local name resolving
34 - *pre-proxy* support, for *proxy chaining*
35 - supports username and password in proxy environment variables
36 - operations through HTTP proxy "tunnel" (using CONNECT)
37 - replaceable memory functions (malloc, free, realloc, etc)
38 - asynchronous name resolving
39 - both a push and a pull style interface
40 - international domain names (IDN)
41 - transfer rate limiting
42 - stable API and ABI
43 - TCP keep alive
44 - TCP Fast Open
45 - DNS cache (that can be shared between transfers)
46 - non-blocking single-threaded parallel transfers
47 - Unix domain sockets to server or proxy
48 - DNS-over-HTTPS
49 - uses non-blocking name resolves
50 - selectable name resolver backend
51
52## URL API
53
54 - parses RFC 3986 URLs
55 - generates URLs from individual components
56 - manages "redirects"
57
58## Header API
59
60 - easy access to HTTP response headers, from all contexts
61 - named headers
62 - iterate over headers
63
64## TLS
65
66 - selectable TLS backend(s)
67 - TLS False Start
68 - TLS version control
69 - TLS session resumption
70 - key pinning
71 - mutual authentication
72 - Use dedicated CA cert bundle
73 - Use OS-provided CA store
74 - separate TLS options for HTTPS proxy
75
76## HTTP
77
78 - HTTP/0.9 responses are optionally accepted
79 - HTTP/1.0
80 - HTTP/1.1
81 - HTTP/2, including multiplexing and server push
82 - GET
83 - PUT
84 - HEAD
85 - POST
86 - multipart formpost (RFC 1867-style)
87 - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO)
88   to server and proxy
89 - resume transfers
90 - follow redirects
91 - maximum amount of redirects to follow
92 - custom HTTP request
93 - cookie get/send fully parsed
94 - reads/writes the Netscape cookie file format
95 - custom headers (replace/remove internally generated headers)
96 - custom user-agent string
97 - custom referrer string
98 - range
99 - proxy authentication
100 - time conditions
101 - via HTTP proxy, HTTPS proxy or SOCKS proxy
102 - HTTP/2 or HTTP/1.1 to HTTPS proxy
103 - retrieve file modification date
104 - Content-Encoding support for deflate, gzip, brotli and zstd
105 - "Transfer-Encoding: chunked" support in uploads
106 - HSTS
107 - alt-svc
108 - ETags
109 - HTTP/1.1 trailers, both sending and getting
110
111## HTTPS
112
113 - HTTP/3
114 - using client certificates
115 - verify server certificate
116 - via HTTP proxy, HTTPS proxy or SOCKS proxy
117 - select desired encryption
118 - select usage of a specific TLS version
119 - ECH
120
121## FTP
122
123 - download
124 - authentication
125 - Kerberos 5
126 - active/passive using PORT, EPRT, PASV or EPSV
127 - single file size information (compare to HTTP HEAD)
128 - 'type=' URL support
129 - directory listing
130 - directory listing names-only
131 - upload
132 - upload append
133 - upload via http-proxy as HTTP PUT
134 - download resume
135 - upload resume
136 - custom ftp commands (before and/or after the transfer)
137 - simple "range" support
138 - via HTTP proxy, HTTPS proxy or SOCKS proxy
139 - all operations can be tunneled through proxy
140 - customizable to retrieve file modification date
141 - no directory depth limit
142
143## FTPS
144
145 - implicit `ftps://` support that use SSL on both connections
146 - explicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain `ftp://`
147   connection to use SSL for both or one of the connections
148
149## SSH (both SCP and SFTP)
150
151 - selectable SSH backend
152 - known hosts support
153 - public key fingerprinting
154 - both password and public key auth
155
156## SFTP
157
158 - both password and public key auth
159 - with custom commands sent before/after the transfer
160 - directory listing
161
162## TFTP
163
164 - download
165 - upload
166
167## TELNET
168
169 - connection negotiation
170 - custom telnet options
171 - stdin/stdout I/O
172
173## LDAP
174
175 - full LDAP URL support
176
177## DICT
178
179 - extended DICT URL support
180
181## FILE
182
183 - URL support
184 - upload
185 - resume
186
187## SMB
188
189 - SMBv1 over TCP and SSL
190 - download
191 - upload
192 - authentication with NTLMv1
193
194## SMTP
195
196 - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and
197   External
198 - send emails
199 - mail from support
200 - mail size support
201 - mail auth support for trusted server-to-server relaying
202 - multiple recipients
203 - via http-proxy
204
205## SMTPS
206
207 - implicit `smtps://` support
208 - explicit "STARTTLS" usage to "upgrade" plain `smtp://` connections to use SSL
209 - via http-proxy
210
211## POP3
212
213 - authentication: Clear Text, APOP and SASL
214 - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM,
215   Kerberos 5 and External
216 - list emails
217 - retrieve emails
218 - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via
219   custom requests
220 - via http-proxy
221
222## POP3S
223
224 - implicit `pop3s://` support
225 - explicit `STLS` usage to "upgrade" plain `pop3://` connections to use SSL
226 - via http-proxy
227
228## IMAP
229
230 - authentication: Clear Text and SASL
231 - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM,
232   Kerberos 5 and External
233 - list the folders of a mailbox
234 - select a mailbox with support for verifying the `UIDVALIDITY`
235 - fetch emails with support for specifying the UID and SECTION
236 - upload emails via the append command
237 - enhanced command support for: EXAMINE, CREATE, DELETE, RENAME, STATUS,
238   STORE, COPY and UID via custom requests
239 - via http-proxy
240
241## IMAPS
242
243 - implicit `imaps://` support
244 - explicit "STARTTLS" usage to "upgrade" plain `imap://` connections to use SSL
245 - via http-proxy
246
247## MQTT
248
249 - Subscribe to and publish topics using URL scheme `mqtt://broker/topic`
250