xref: /curl/docs/HISTORY.md (revision c5cb8e7c)
1<!--
2Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
3
4SPDX-License-Identifier: curl
5-->
6
7How curl Became Like This
8=========================
9
10Towards the end of 1996, Daniel Stenberg was spending time writing an IRC bot
11for an Amiga related channel on EFnet. He then came up with the idea to make
12currency-exchange calculations available to Internet Relay Chat (IRC)
13users. All the necessary data were published on the Web; he just needed to
14automate their retrieval.
15
161996
17----
18
19On November 11, 1996 the Brazilian developer Rafael Sagula wrote and released
20HttpGet version 0.1.
21
22Daniel extended this existing command-line open-source tool. After a few minor
23adjustments, it did just what he needed. The first release with Daniel's
24additions was 0.2, released on December 17, 1996. Daniel quickly became the
25new maintainer of the project.
26
271997
28----
29
30HttpGet 0.3 was released in January 1997 and now it accepted HTTP URLs on the
31command line.
32
33HttpGet 1.0 was released on April 8 1997 with brand new HTTP proxy support.
34
35We soon found and fixed support for getting currencies over GOPHER. Once FTP
36download support was added, the name of the project was changed and urlget 2.0
37was released in August 1997. The http-only days were already passed.
38
39Version 2.2 was released on August 14 1997 and introduced support to build for
40and run on Windows and Solaris.
41
42November 24 1997: Version 3.1 added FTP upload support.
43
44Version 3.5 added support for HTTP POST.
45
461998
47----
48
49February 4: urlget 3.10
50
51February 9: urlget 3.11
52
53March 14: urlget 3.12 added proxy authentication.
54
55The project slowly grew bigger. With upload capabilities, the name was once
56again misleading and a second name change was made. On March 20, 1998 curl 4
57was released. (The version numbering from the previous names was kept.)
58
59(Unrelated to this project a company called Curl Corporation registered a US
60trademark on the name "CURL" on May 18 1998. That company had then already
61registered the curl.com domain back in November of the previous year. All this
62was revealed to us much later.)
63
64SSL support was added, powered by the SSLeay library.
65
66August: first announcement of curl on freshmeat.net.
67
68October: with the curl 4.9 release and the introduction of cookie support,
69curl was no longer released under the GPL license. Now we are at 4000 lines of
70code, we switched over to the MPL license to restrict the effects of
71"copyleft".
72
73November: configure script and reported successful compiles on several
74major operating systems. The never-quite-understood -F option was added and
75curl could now simulate quite a lot of a browser. TELNET support was added.
76
77Curl 5 was released in December 1998 and introduced the first ever curl man
78page. People started making Linux RPM packages out of it.
79
801999
81----
82
83January: DICT support added.
84
85OpenSSL took over and SSLeay was abandoned.
86
87May: first Debian package.
88
89August: LDAP:// and FILE:// support added. The curl website gets 1300 visits
90weekly. Moved site to curl.haxx.nu.
91
92September: Released curl 6.0. 15000 lines of code.
93
94December 28: added the project on Sourceforge and started using its services
95for managing the project.
96
972000
98----
99
100Spring: major internal overhaul to provide a suitable library interface.
101The first non-beta release was named 7.1 and arrived in August. This offered
102the easy interface and turned out to be the beginning of actually getting
103other software and programs to be based on and powered by libcurl. Almost
10420000 lines of code.
105
106June: the curl site moves to "curl.haxx.se"
107
108August, the curl website gets 4000 visits weekly.
109
110The PHP guys adopted libcurl already the same month, when the first ever third
111party libcurl binding showed up. CURL has been a supported module in PHP since
112the release of PHP 4.0.2. This would soon get followers. More than 16
113different bindings exist at the time of this writing.
114
115September: kerberos4 support was added.
116
117November: started the work on a test suite for curl. It was later re-written
118from scratch again. The libcurl major SONAME number was set to 1.
119
1202001
121----
122
123January: Daniel released curl 7.5.2 under a new license again: MIT (or
124MPL). The MIT license is extremely liberal and can be combined with GPL
125in other projects. This would finally put an end to the "complaints" from
126people involved in GPLed projects that previously were prohibited from using
127libcurl while it was released under MPL only. (Due to the fact that MPL is
128deemed "GPL incompatible".)
129
130March 22: curl supports HTTP 1.1 starting with the release of 7.7. This
131also introduced libcurl's ability to do persistent connections. 24000 lines of
132code. The libcurl major SONAME number was bumped to 2 due to this overhaul.
133The first experimental ftps:// support was added.
134
135August: The curl website gets 8000 visits weekly. Curl Corporation contacted
136Daniel to discuss "the name issue". After Daniel's reply, they have never
137since got back in touch again.
138
139September: libcurl 7.9 introduces cookie jar and `curl_formadd()`. During the
140forthcoming 7.9.x releases, we introduced the multi interface slowly and
141without many whistles.
142
143September 25: curl (7.7.2) is bundled in Mac OS X (10.1) for the first time. It was
144already becoming more and more of a standard utility of Linux distributions
145and a regular in the BSD ports collections.
146
1472002
148----
149
150June: the curl website gets 13000 visits weekly. curl and libcurl is
15135000 lines of code. Reported successful compiles on more than 40 combinations
152of CPUs and operating systems.
153
154To estimate the number of users of the curl tool or libcurl library is next to
155impossible. Around 5000 downloaded packages each week from the main site gives
156a hint, but the packages are mirrored extensively, bundled with numerous OS
157distributions and otherwise retrieved as part of other software.
158
159October 1: with the release of curl 7.10 it is released under the MIT license
160only.
161
162Starting with 7.10, curl verifies SSL server certificates by default.
163
1642003
165----
166
167January: Started working on the distributed curl tests. The autobuilds.
168
169February: the curl site averages at 20000 visits weekly. At any given moment,
170there is an average of 3 people browsing the website.
171
172Multiple new authentication schemes are supported: Digest (May), NTLM (June)
173and Negotiate (June).
174
175November: curl 7.10.8 is released. 45000 lines of code. ~55000 unique visitors
176to the website. Five official web mirrors.
177
178December: full-fledged SSL for FTP is supported.
179
1802004
181----
182
183January: curl 7.11.0 introduced large file support.
184
185June: curl 7.12.0 introduced IDN support. 10 official web mirrors.
186
187This release bumped the major SONAME to 3 due to the removal of the
188`curl_formparse()` function
189
190August: Curl and libcurl 7.12.1
191
192    Public curl release number:                82
193    Releases counted from the beginning:      109
194    Available command line options:            96
195    Available curl_easy_setopt() options:     120
196    Number of public functions in libcurl:     36
197    Amount of public website mirrors:          12
198    Number of known libcurl bindings:          26
199
2002005
201----
202
203April: GnuTLS can now optionally be used for the secure layer when curl is
204built.
205
206April: Added the multi_socket() API
207
208September: TFTP support was added.
209
210More than 100,000 unique visitors of the curl website. 25 mirrors.
211
212December: security vulnerability: libcurl URL Buffer Overflow
213
2142006
215----
216
217January: We dropped support for Gopher. We found bugs in the implementation
218that turned out to have been introduced years ago, so with the conclusion that
219nobody had found out in all this time we removed it instead of fixing it.
220
221March: security vulnerability: libcurl TFTP Packet Buffer Overflow
222
223September: The major SONAME number for libcurl was bumped to 4 due to the
224removal of ftp third party transfer support.
225
226November: Added SCP and SFTP support
227
2282007
229----
230
231February: Added support for the Mozilla NSS library to do the SSL/TLS stuff
232
233July: security vulnerability: libcurl GnuTLS insufficient cert verification
234
2352008
236----
237
238November:
239
240    Command line options:         128
241    curl_easy_setopt() options:   158
242    Public functions in libcurl:   58
243    Known libcurl bindings:        37
244    Contributors:                 683
245
246 145,000 unique visitors. >100 GB downloaded.
247
2482009
249----
250
251March: security vulnerability: libcurl Arbitrary File Access
252
253April: added CMake support
254
255August: security vulnerability: libcurl embedded zero in cert name
256
257December: Added support for IMAP, POP3 and SMTP
258
2592010
260----
261
262January: Added support for RTSP
263
264February: security vulnerability: libcurl data callback excessive length
265
266March: The project switched over to use git (hosted by GitHub) instead of CVS
267for source code control
268
269May: Added support for RTMP
270
271Added support for PolarSSL to do the SSL/TLS stuff
272
273August:
274
275    Public curl releases:         117
276    Command line options:         138
277    curl_easy_setopt() options:   180
278    Public functions in libcurl:   58
279    Known libcurl bindings:        39
280    Contributors:                 808
281
282 Gopher support added (re-added actually, see January 2006)
283
2842011
285----
286
287February: added support for the axTLS backend
288
289April: added the cyassl backend (later renamed to wolfSSL)
290
2912012
292----
293
294 July: Added support for Schannel (native Windows TLS backend) and Darwin SSL
295 (Native Mac OS X and iOS TLS backend).
296
297 Supports Metalink
298
299 October: SSH-agent support.
300
3012013
302----
303
304 February: Cleaned up internals to always uses the "multi" non-blocking
305 approach internally and only expose the blocking API with a wrapper.
306
307 September: First small steps on supporting HTTP/2 with nghttp2.
308
309 October: Removed krb4 support.
310
311 December: Happy eyeballs.
312
3132014
314----
315
316 March: first real release supporting HTTP/2
317
318 September: Website had 245,000 unique visitors and served 236GB data
319
320 SMB and SMBS support
321
3222015
323----
324
325 June: support for multiplexing with HTTP/2
326
327 August: support for HTTP/2 server push
328
329 December: Public Suffix List
330
3312016
332----
333
334 January: the curl tool defaults to HTTP/2 for HTTPS URLs
335
336 December: curl 7.52.0 introduced support for HTTPS-proxy
337
338 First TLS 1.3 support
339
3402017
341----
342
343 July: OSS-Fuzz started fuzzing libcurl
344
345 September: Added Multi-SSL support
346
347 The website serves 3100 GB/month
348
349    Public curl releases:         169
350    Command line options:         211
351    curl_easy_setopt() options:   249
352    Public functions in libcurl:  74
353    Contributors:                 1609
354
355 October: SSLKEYLOGFILE support, new MIME API
356
357 October: Daniel received the Polhem Prize for his work on curl
358
359 November: brotli
360
3612018
362----
363
364 January: new SSH backend powered by libssh
365
366 March: starting with the 1803 release of Windows 10, curl is shipped bundled
367 with Microsoft's operating system.
368
369 July: curl shows headers using bold type face
370
371 October: added DNS-over-HTTPS (DoH) and the URL API
372
373 MesaLink is a new supported TLS backend
374
375 libcurl now does HTTP/2 (and multiplexing) by default on HTTPS URLs
376
377 curl and libcurl are installed in an estimated 5 *billion* instances
378 world-wide.
379
380 October 31: Curl and libcurl 7.62.0
381
382    Public curl releases:         177
383    Command line options:         219
384    curl_easy_setopt() options:   261
385    Public functions in libcurl:  80
386    Contributors:                 1808
387
388 December: removed axTLS support
389
3902019
391----
392
393 March: added experimental alt-svc support
394
395 August: the first HTTP/3 requests with curl.
396
397 September: 7.66.0 is released and the tool offers parallel downloads
398
3992020
400----
401
402 curl and libcurl are installed in an estimated 10 *billion* instances
403 world-wide.
404
405 January: added BearSSL support
406
407 March: removed support for PolarSSL, added wolfSSH support
408
409 April: experimental MQTT support
410
411 August: zstd support
412
413 November: the website moves to curl.se. The website serves 10TB data monthly.
414
415 December: alt-svc support
416
4172021
418----
419
420 February 3: curl 7.75.0 ships with support for Hyper as an HTTP backend
421
422 March 31: curl 7.76.0 ships with support for Rustls
423
424 July: HSTS is supported
425
4262022
427----
428
429March: added --json, removed mesalink support
430
431    Public curl releases:         206
432    Command line options:         245
433    curl_easy_setopt() options:   295
434    Public functions in libcurl:  86
435    Contributors:                 2601
436
437 The curl.se website serves 16,500 GB/month over 462M requests, the
438 official docker image has been pulled 4,098,015,431 times.
439
440October: initial WebSocket support
441
4422023
443----
444
445March: remove support for curl_off_t < 8 bytes
446
447March 31: we started working on a new command line tool for URL parsing and
448manipulations: trurl.
449
450May: added support for HTTP/2 over HTTPS proxy. Refuse to resolve .onion.
451
452August: Dropped support for the NSS library
453
454September: added "variable" support in the command line tool. Dropped support
455for the gskit TLS library.
456
457October: added support for IPFS via HTTP gateway
458
459December: HTTP/3 support with ngtcp2 is no longer experimental
460
4612024
462----
463
464January: switched to "curldown" for all documentation
465
466April 24: the curl container has been pulled more than six billion times
467
468May: experimental support for ECH
469
470August 9: we adopted the wcurl tool into the curl organization
471