Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 1 | _ _ ____ _ |
| 2 | ___| | | | _ \| | |
| 3 | / __| | | | |_) | | |
| 4 | | (__| |_| | _ <| |___ |
| 5 | \___|\___/|_| \_\_____| |
| 6 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 7 | How cURL Became Like This |
| 8 | ========================= |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 9 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 10 | Towards the end of 1996, Daniel Stenberg was spending time writing an IRC bot |
| 11 | for an Amiga related channel on EFnet. He then came up with the idea to make |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 12 | currency-exchange calculations available to Internet Relay Chat (IRC) |
| 13 | users. All the necessary data are published on the Web; he just needed to |
| 14 | automate their retrieval. |
| 15 | |
| 16 | Daniel simply adopted an existing command-line open-source tool, httpget, that |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 17 | Brazilian Rafael Sagula had written and recently release version 0.1 of. After |
| 18 | a few minor adjustments, it did just what he needed. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 19 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 20 | 1997 |
| 21 | ---- |
| 22 | |
| 23 | HttpGet 1.0 was released on April 8th 1997 with brand new HTTP proxy support. |
| 24 | |
| 25 | We soon found and fixed support for getting currencies over GOPHER. Once FTP |
| 26 | download support was added, the name of the project was changed and urlget 2.0 |
| 27 | was released in August 1997. The http-only days were already passed. |
| 28 | |
| 29 | 1998 |
| 30 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 31 | |
| 32 | The project slowly grew bigger. When upload capabilities were added and the |
| 33 | name once again was misleading, a second name change was made and on March 20, |
| 34 | 1998 curl 4 was released. (The version numbering from the previous names was |
| 35 | kept.) |
| 36 | |
| 37 | (Unrelated to this project a company called Curl Corporation registered a US |
| 38 | trademark on the name "CURL" on May 18 1998. That company had then already |
| 39 | registered the curl.com domain back in November of the previous year. All this |
| 40 | was revealed to us much later.) |
| 41 | |
| 42 | SSL support was added, powered by the SSLeay library. |
| 43 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 44 | August, first announcement of curl on freshmeat.net. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 45 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 46 | October, with the curl 4.9 release and the introduction of cookie support, |
| 47 | curl was no longer released under the GPL license. Now we're at 4000 lines of |
| 48 | code, we switched over to the MPL license to restrict the effects of |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 49 | "copyleft". |
| 50 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 51 | November, configure script and reported successful compiles on several |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 52 | major operating systems. The never-quite-understood -F option was added and |
| 53 | curl could now simulate quite a lot of a browser. TELNET support was added. |
| 54 | |
| 55 | Curl 5 was released in December 1998 and introduced the first ever curl man |
| 56 | page. People started making Linux RPM packages out of it. |
| 57 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 58 | 1999 |
| 59 | ---- |
| 60 | |
| 61 | January, DICT support added. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 62 | |
| 63 | OpenSSL took over where SSLeay was abandoned. |
| 64 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 65 | May, first Debian package. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 66 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 67 | August, LDAP:// and FILE:// support added. The curl web site gets 1300 visits |
| 68 | weekly. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 69 | |
| 70 | Released curl 6.0 in September. 15000 lines of code. |
| 71 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 72 | December 28, added the project on Sourceforge and started using its services |
| 73 | for managing the project. |
| 74 | |
| 75 | 2000 |
| 76 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 77 | |
| 78 | Spring 2000, major internal overhaul to provide a suitable library interface. |
| 79 | The first non-beta release was named 7.1 and arrived in August. This offered |
| 80 | the easy interface and turned out to be the beginning of actually getting |
| 81 | other software and programs to get based on and powered by libcurl. Almost |
| 82 | 20000 lines of code. |
| 83 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 84 | August, the curl web site gets 4000 visits weekly. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 85 | |
| 86 | The PHP guys adopted libcurl already the same month, when the first ever third |
| 87 | party libcurl binding showed up. CURL has been a supported module in PHP since |
| 88 | the release of PHP 4.0.2. This would soon get followers. More than 16 |
| 89 | different bindings exist at the time of this writing. |
| 90 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 91 | September, kerberos4 support was added. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 92 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 93 | In November started the work on a test suite for curl. It was later re-written |
| 94 | from scratch again. The libcurl major SONAME number was set to 1. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 95 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 96 | 2001 |
| 97 | ---- |
| 98 | |
| 99 | January, Daniel released curl 7.5.2 under a new license again: MIT (or |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 100 | MPL). The MIT license is extremely liberal and can be used combined with GPL |
| 101 | in other projects. This would finally put an end to the "complaints" from |
| 102 | people involved in GPLed projects that previously were prohibited from using |
| 103 | libcurl while it was released under MPL only. (Due to the fact that MPL is |
| 104 | deemed "GPL incompatible".) |
| 105 | |
| 106 | curl supports HTTP 1.1 starting with the release of 7.7, March 22 2001. This |
| 107 | also introduced libcurl's ability to do persistent connections. 24000 lines of |
| 108 | code. The libcurl major SONAME number was bumped to 2 due to this overhaul. |
| 109 | |
| 110 | The first experimental ftps:// support was added in March 2001. |
| 111 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 112 | August. curl is bundled in Mac OS X, 10.1. It was already becoming more and |
| 113 | more of a standard utility of Linux distributions and a regular in the BSD |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 114 | ports collections. The curl web site gets 8000 visits weekly. Curl Corporation |
| 115 | contacted Daniel to discuss "the name issue". After Daniel's reply, they have |
| 116 | never since got in touch again. |
| 117 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 118 | September, libcurl 7.9 introduces cookie jar and curl_formadd(). During the |
| 119 | forthcoming 7.9.x releases, we introduced the multi interface slowly and |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 120 | without much whistles. |
| 121 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 122 | 2002 |
| 123 | ---- |
| 124 | |
| 125 | June, the curl web site gets 13000 visits weekly. curl and libcurl is |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 126 | 35000 lines of code. Reported successful compiles on more than 40 combinations |
| 127 | of CPUs and operating systems. |
| 128 | |
| 129 | To estimate number of users of the curl tool or libcurl library is next to |
| 130 | impossible. Around 5000 downloaded packages each week from the main site gives |
| 131 | a hint, but the packages are mirrored extensively, bundled with numerous OS |
| 132 | distributions and otherwise retrieved as part of other software. |
| 133 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 134 | September, with the release of curl 7.10 it is released under the MIT license |
| 135 | only. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 136 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 137 | 2003 |
| 138 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 139 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 140 | January. Started working on the distributed curl tests. The autobuilds. |
| 141 | |
| 142 | February, the curl site averages at 20000 visits weekly. At any given moment, |
| 143 | there's an average of 3 people browsing the curl.haxx.se site. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 144 | |
| 145 | Multiple new authentication schemes are supported: Digest (May), NTLM (June) |
| 146 | and Negotiate (June). |
| 147 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 148 | November: curl 7.10.8 is released. 45000 lines of code. ~55000 unique visitors |
| 149 | to the curl.haxx.se site. Five official web mirrors. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 150 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 151 | December, full-fledged SSL for FTP is supported. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 152 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 153 | 2004 |
| 154 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 155 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 156 | January: curl 7.11.0 introduced large file support. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 157 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 158 | June: curl 7.12.0 introduced IDN support. 10 official web mirrors. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 159 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 160 | This release bumped the major SONAME to 3 due to the removal of the |
| 161 | curl_formparse() function |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 162 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 163 | August: Curl and libcurl 7.12.1 |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 164 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 165 | Public curl release number: 82 |
| 166 | Releases counted from the very beginning: 109 |
| 167 | Available command line options: 96 |
| 168 | Available curl_easy_setopt() options: 120 |
| 169 | Number of public functions in libcurl: 36 |
| 170 | Amount of public web site mirrors: 12 |
| 171 | Number of known libcurl bindings: 26 |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 172 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 173 | 2005 |
| 174 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 175 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 176 | April. GnuTLS can now optionally be used for the secure layer when curl is |
| 177 | built. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 178 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 179 | September: TFTP support was added. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 180 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 181 | More than 100,000 unique visitors of the curl web site. 25 mirrors. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 182 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 183 | December: security vulnerability: libcurl URL Buffer Overflow |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 184 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 185 | 2006 |
| 186 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 187 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 188 | January. We dropped support for Gopher. We found bugs in the implementation |
| 189 | that turned out having been introduced years ago, so with the conclusion that |
| 190 | nobody had found out in all this time we removed it instead of fixing it. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 191 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 192 | March: security vulnerability: libcurl TFTP Packet Buffer Overflow |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 193 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 194 | April: Added the multi_socket() API |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 195 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 196 | September: The major SONAME number for libcurl was bumped to 4 due to the |
| 197 | removal of ftp third party transfer support. |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 198 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 199 | November: Added SCP and SFTP support |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 200 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 201 | 2007 |
| 202 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 203 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 204 | February: Added support for the Mozilla NSS library to do the SSL/TLS stuff |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 205 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 206 | July: security vulnerability: libcurl GnuTLS insufficient cert verification |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 207 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 208 | 2008 |
| 209 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 210 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 211 | November: |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 212 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 213 | Command line options: 128 |
| 214 | curl_easy_setopt() options: 158 |
| 215 | Public functions in libcurl: 58 |
| 216 | Known libcurl bindings: 37 |
| 217 | Contributors: 683 |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 218 | |
| 219 | 145,000 unique visitors. >100 GB downloaded. |
| 220 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 221 | 2009 |
| 222 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 223 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 224 | March: security vulnerability: libcurl Arbitrary File Access |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 225 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 226 | August: security vulnerability: libcurl embedded zero in cert name |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 227 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 228 | December: Added support for IMAP, POP3 and SMTP |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 229 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 230 | 2010 |
| 231 | ---- |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 232 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 233 | January: Added support for RTSP |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 234 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 235 | February: security vulnerability: libcurl data callback excessive length |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 236 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 237 | March: The project switched over to use git (hosted by github) instead of CVS |
| 238 | for source code control |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 239 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 240 | May: Added support for RTMP |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 241 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 242 | Added support for PolarSSL to do the SSL/TLS stuff |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 243 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 244 | August: |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 245 | |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 246 | Public curl releases: 117 |
| 247 | Command line options: 138 |
| 248 | curl_easy_setopt() options: 180 |
| 249 | Public functions in libcurl: 58 |
| 250 | Known libcurl bindings: 39 |
| 251 | Contributors: 808 |
Lucas Eckels | 9bd90e6 | 2012-08-06 15:07:02 -0700 | [diff] [blame] | 252 | |
| 253 | Gopher support added (re-added actually) |
Bertrand SIMONNET | e6cd738 | 2015-07-01 15:39:44 -0700 | [diff] [blame] | 254 | |
| 255 | 2012 |
| 256 | ---- |
| 257 | |
| 258 | July: Added support for Schannel (native Windows TLS backend) and Darwin SSL |
| 259 | (Native Mac OS X and iOS TLS backend). |
| 260 | |
| 261 | Supports metalink |
| 262 | |
| 263 | October: SSH-agent support. |
| 264 | |
| 265 | 2013 |
| 266 | ---- |
| 267 | |
| 268 | February: Cleaned up internals to always uses the "multi" non-blocking |
| 269 | approach internally and only expose the blocking API with a wrapper. |
| 270 | |
| 271 | September: First small steps on supporting HTTP/2 with nghttp2. |
| 272 | |
| 273 | October: Removed krb4 support. |
| 274 | |
| 275 | December: Happy eyeballs. |
| 276 | |
| 277 | 2014 |
| 278 | ---- |
| 279 | |
| 280 | March: first real release supporting HTTP/2 |
| 281 | |
| 282 | September: Web site had 245,000 unique visitors and served 236GB data |