fixes
dbc9c5a] - fix: Do not response Content-Length if Transfer-Encoding is defined (#1602) (Yiyu He <>)
fixes
a37a2e5] - fix: compatible with node-v12.19.0 & earlier (#1590) (hyj1991 <yeekwanvong@gmail.com>)fixes
04acf02] - fix: nodejs deprecated api (#1585) (#1588) (hyj1991 <yeekwanvong@gmail.com>)
others
3435e78] - lint++ (jongleberry <jonathanrichardong@gmail.com>)2cd6618] - Fix grammar mistake (#1527) (Matheus Souza <37983247+souzasmatheus@users.noreply.github.com>)16ab46e] - chore: upgrade koa-convert dependency to ^2.0.0 (#1535) (Christian Rodemeyer <atombrenner@users.noreply.github.com>)65113ca] - Fix jsdoc types for constructor (#1541) (Piotr Kuczynski <piotr.kuczynski@gmail.com>)03e6317] - :arrow_up: debug (jongleberry <jonathanrichardong@gmail.com>)b37a2d0] - :arrow_up: eslint dependencies (jongleberry <jonathanrichardong@gmail.com>)4a410cc] - migrate assert.deepEqual => .deepStrictEqual (jongleberry <jonathanrichardong@gmail.com>)4545b59] - test: switch tests to jest (jongleberry <jonathanrichardong@gmail.com>)596cfd5] - migrate assert.strict => .strictEqual (jongleberry <jonathanrichardong@gmail.com>)be3e8b6] - test: switch to github actions (jongleberry <jonathanrichardong@gmail.com>)a2570e3] - package: update bench scripts (jongleberry <jonathanrichardong@gmail.com>)000acf0] - npm: enable package-lock (jongleberry <jonathanrichardong@gmail.com>)47fdbca] - delete benchmarks (jongleberry <jonathanrichardong@gmail.com>)0056f90] - Create dependabot.yml (jongleberry <jonathanrichardong@gmail.com>)698ce0a] - test: fix typo in status.js (Ikko Ashimine <eltociear@gmail.com>)eb51cf5] - doc: app.keys needs to be long enought and random (#1520) (Yiyu He <>)
fixes
b5472f4] - fix: make ESM transpiled CommonJS play nice for TS folks, fix #1513 (#1518) (miwnwski <m@iwnw.ski>)68d97d6] - fix: fixed order of vulnerability disclosure addresses (niftylettuce <niftylettuce@gmail.com>)others
b4398f5] - correct verb tense in doc (#1512) (Matan Shavit <71092861+matanshavit@users.noreply.github.com>)39e1a5a] - fixed multiple grammatical errors in docs. (#1497) (Hridayesh Sharma <vyasriday7@gmail.com>)aeb5d19] - docs: added niftylettuce@gmail.com to vulnerability disclosure (niftylettuce <niftylettuce@gmail.com>)6e1093b] - docs: remove babel from readme (#1494) (miwnwski <m@iwnw.ski>)38cb591] - docs: update specific for auto response status (AlbertAZ1992 <ziyuximing@163.com>)2224cd9] - docs: remove babel ref. (#1488) (Imed Jaberi <>)
d51f983] - docs: fix assert example for response (#1489) (Imed Jaberi <>)
f8b49b8] - chore: fix grammatical and spelling errors in comments and tests (#1490) (Matt Kubej <mkubej@gmail.com>)d1c9263] - deps: update depd >> v2.0.0 (#1482) (imed jaberi <>)
features
bbcde76] - feat: support esm (#1474) (ZYSzys <zhangyongsheng@youzan.com>)others
20e58cf] - test: imporve coverage to 100% (dead-horse <>)
4a40d63] - build: use prepare instead of prepublish (dead-horse <>)
226ba8c] - build: use prepublish instead of prepack (dead-horse <>)
fixes
e2030c7] - fix: Improve checks for Error in onerror handlers (#1468) (Julien Wajsberg <felash@gmail.com>)others
5208c5e] - chore: Use single console.error() statement in error handler (#1471) (Mike Vosseller <michael.vosseller@gmail.com>)features
0d2f421] - feat: error handler treat err.statusCode as the same as err.status (#1460) (Vijay Krishnavanshi <vijaykrishnavanshi@gmail.com>)8d52105] - feat: allow bodyless responses for non empty status codes (#1447) (ejose19 <8742215+ejose19@users.noreply.github.com>)others
faeaff5] - fox: remove error-inject and fix error handling (#1409) (Konstantin Vyatkin <tino@vtkn.io>)f7c732f] - docs: fixed incorrect onerror example (#1459) (Paul Annekov <paul.annekov@gmail.com>)143d8f7] - Always use strict equality. (#1225) (Yazan Medanat <medanat@gmail.com>)6b6b0dd] - docs(api): add app.use chainability note (#1449) (Zac Anger <zac@zacanger.com>)8ddab48] - docs: Document response status with empty body (#1445) (Marc-Aurèle DARCHE <152407+madarche@users.noreply.github.com>)7deedb2] - docs: Updating context.md with the latest cookies opts (#1433) (Brad Ito <phlogisticfugu@users.noreply.github.com>)3e97a10] - docs(links): remove Google+ link (#1439) (laffachan <45162759+laffachan@users.noreply.github.com>)eda2760] - build: Drop unused Travis sudo: false directive (#1416) (Olle Jonsson <olle.jonsson@gmail.com>)features
422e539] - feat: support app.proxyIPHeader and app.maxIpsCount to make ctx.ips more security (Yiyu He <>)
d48d88e] - feat: implement response.has (#1397) (Konstantin Vyatkin <tino@vtkn.io>)others
4dc56f6] - chore: update ESLint and plugins/configs (#1407) (Konstantin Vyatkin <tino@vtkn.io>)be7d334] - chore: removes code duplication at handling HEAD method (#1400) (Konstantin Vyatkin <tino@vtkn.io>)f155785] - chore: support writableEnded (#1402) (Konstantin Vyatkin <tino@vtkn.io>)b968688] - chore: add FUNDING.yml (#1403) (Konstantin Vyatkin <tino@vtkn.io>)4f96829] - chore: remove isJSON in res.length (#1399) (Konstantin Vyatkin <tino@vtkn.io>)8be5626] - build: enable codecov partial coverage and use bash uploader (#1396) (Konstantin Vyatkin <tino@vtkn.io>)ef5c43b] - chore: use rest params (#1393) (Konstantin Vyatkin <tino@vtkn.io>)features
d7f7f77] - feat: support sameSite=none cookies (bump cookies dependency) (#1390) (Filip Skokan <panva.ip@gmail.com>)features
2d1c598] - feat: export HttpError from http-errors library (Micheal Hill <micheal.hill@trunkplatform.com>)others
cf70dbc] - Chore: Use https in readme (#1389) (谭九鼎 <109224573@qq.com>)fixes
54e8fab] - fix: encode redirect url if not already encoded (#1384) (fengmk2 <fengmk2@gmail.com>)others
817b498] - test: fix body test (#1375) (Robert Nagy <ronagy@icloud.com>)f75d445] - test: fix end after end (#1374) (Robert Nagy <ronagy@icloud.com>)fixes
287e589] - fix: make options more compatibility (dead-horse <>)
features
5afff89] - feat: accept options in the Application constructor (#1372) (Jake <djakelambert@gmail.com>)fixes
ff70bdc] - fix: typo on document (#1355) (Jeff <jeff.tian@outlook.com>)others
3b23865] - docs: parameter of request.get is case-insensitive (#1373) (Gunnlaugur Thor Briem <gunnlaugur@gmail.com>)a245d18] - docs: Update response.socket (#1357) (Jeff <jeff.tian@outlook.com>)d1d65dd] - chore(deps): install egg-bin, mm as devDeps not deps (#1366) (Edvard Chen <pigeon73101@gmail.com>)2c86b10] - test: remove jest and use egg-bin(mocha) (#1363) (Yiyu He <>)
219bf22] - docs(context): update link (#1354) (Peng Jie <bivinity.pengzjie@gmail.com>)52a6737] - chore: ignore Intellij IDEA project files (#1361) (Imon-Haque <38266345+Imon-Haque@users.noreply.github.com>)b9e3546] - docs(api): fix keygrip link (#1350) (Peng Jie <bivinity.pengzjie@gmail.com>)d4bdb5e] - chore: update eslint and fix lint errors (dead-horse <>)
12960c4] - build: test on 8/10/12 (dead-horse <>)
00e8f7a] - docs: ctx.type aliases ctx.response, not ctx.request (#1343) (Alex Berk <berkalexanderc@gmail.com>)62f29eb] - docs(context): update cookies link (#1348) (Peng Jie <dean.leehom@gmail.com>)b7fc526] - docs: fix typo in cookie path default value docs (#1340) (Igor Adamenko <igoradamenko@users.noreply.github.com>)23f7f54] - chore: simplify variable (#1332) (kzhang <godky@users.noreply.github.com>)132c9ee] - docs: Clarify the format of request.headers (#1325) (Dobes Vandermeer <dobesv@gmail.com>)5810f27] - docs: Removed Document in Progress note in Koa vs Express (#1336) (Andrew Peterson <andrew@andpeterson.com>)75233d9] - chore: Consider removing this return statement; it will be ignored. (#1322) (Vern Brandl <tkvern@users.noreply.github.com>)04e07fd] - test: Buffer() is deprecated due to security and usability issues. so use the Buffer.alloc() instead (#1321) (Vern Brandl <tkvern@users.noreply.github.com>)130e363] - docs: use 'fs-extra' instead of 'fs-promise' (#1309) (rosald <35028438+rosald@users.noreply.github.com>)2f2078b] - chore: Update PR-welcome badge url (#1299) (James George <jamesgeorge998001@gmail.com>)features
b7bfa71] - feat: change set status assert, allowing valid custom statuses (#1308) (Martin Iwanowski <martin@iwanowski.se>)others
72f325b] - chore: add pr welcoming badge (#1291) (James George <jamesgeorge998001@gmail.com>)b15115b] - chore: Reduce unnecessary variable declarations (#1298) (call me saisai <1457358080@qq.com>)ad91ce2] - chore: license 2019 (dead-horse <>)
b25e79d] - Mark two examples as live for the corresponding documentation change in https://github.com/koajs/koajs.com/pull/38. (#1031) (Francisco Ryan Tolmasky I <tolmasky@gmail.com>)d9ef603] - chore: Optimize array split (#1295) (Mikhail Bodrov <connormiha1@gmail.com>)9be8583] - chore: replace ~~ with Math.trunc in res.length (option) (#1288) (jeremiG <gendronjeremi@gmail.com>)7e46c20] - docs: add link to the license file (#1290) (James George <jamesgeorge998001@gmail.com>)48993ad] - docs: Document other body types (#1285) (Douglas Wade <douglas.b.wade@gmail.com>)acb388b] - docs: Add security vulnerability disclosure instructions to the Readme (#1283) (Douglas Wade <douglas.b.wade@gmail.com>)a007198] - docs: Document ctx.app.emit (#1284) (Douglas Wade <douglas.b.wade@gmail.com>)f90e825] - docs: response.set(fields) won't overwrites previous header fields(#1282) (Douglas Wade <douglas.b.wade@gmail.com>)fc93c05] - docs: update readme to add babel 7 instructions (#1274) (Vikram Rangaraj <vik120@icloud.com>)5560f72] - chore: use the ability of content-type lib directly (#1276) (Jordan <mingmingwon@gmail.com>)fixes
9905199] - fix: Status message is not supported on HTTP/2 (#1264) (André Cruz <andre@cabine.org>)others
325792a] - docs: add table of contents for guide.md (#1267) (ZYSzys <zyszys98@gmail.com>)71aaa29] - docs: fix spelling in throw docs (#1269) (Martin Iwanowski <martin@iwanowski.se>)bc81ca9] - chore: use res instead of this.res (#1271) (Jordan <mingmingwon@gmail.com>)0251b38] - test: node v11 on travis (#1265) (Martin Iwanowski <martin@iwanowski.se>)88b92b4] - doc: updated docs for throw() to pass status as first param. (#1268) (Waleed Ashraf <waleedashraf@outlook.com>)fixes
4964242] - fix: use X-Forwarded-Host first on app.proxy present (#1263) (fengmk2 <fengmk2@gmail.com>)features
9c5c58b] - feat: use :authority header of http2 requests as host (#1262) (Martin Michaelis <code@mgjm.de>)9146024] - feat: response.attachment append a parameter: options from contentDisposition (#1240) (小雷 <863837949@qq.com>)others
d32623b] - docs: Update error-handling.md (#1239) (urugator <j.placek@centrum.cz>)fixes
2ee32f5] - fix: pin debug@~3.1.0 avoid deprecated warnning (#1245) (fengmk2 <fengmk2@gmail.com>)others
2180839] - docs: Update koa-vs-express.md (#1230) (Clayton Ray <iamclaytonray@gmail.com>)request.accept and delegate context.accept (#1209)request.protocol (#1203)UNPUBLISHED
package.engines.node to be more strictfresh@^0.5.2inspect() no longer crashes contextres.statusMessage for HTTP/2app.handleRequest() is exposedBuffer.from()package-lock.json to .gitignorelint --fixrequest.header in addition to request.headerspackage.engines.node requirement to >= 6.0.0
yarn, which errors when this semver range is not satisfiedcookies@~0.7.0fresh@^0.5.0callback() #848res.getHeaderNames() support #930err.headerSent in error handling #919NOTE: we hit a versioning snafu. v2.0.0 was previously released,
so v2.0.1 is released as the first v2.x with a latest tag.
application's request and response handlers #805app.name #899ctx.flushHeaders() to use res.flushHeaders() instead of res.writeHead() (#795)koa-convert so that generator functions still work
ctx.flushHeaders() to use res.flushHeaders() instead of res.writeHead()response.writeable during pipelined requestserr.headers in ctx.onerror()
cookies' detection of http/https
app.experimental = true. Koa v2 does not use this signature.co and generator support completelyasync (ctx, next) => await next()app.silent=<Boolean> to toggle error logging @tejasmanohar #486ctx.origin @chentsulin #480use strict everywherethis.req check for querystring()err.exposekoa now follows semver!request.query objects are now always the same instancefresh@0.3.0Breaking change if you're using this.get('ua') === undefined etc.
For more details please checkout #438.
req.host and req.hostname now always return a string (semi-breaking change)devDependenciesapp.experimental = truecontent-type instead of media-typerBreaking change if you're using an old version of node v0.11! Otherwise, you should have no trouble upgrading.
>= 0.11.0 < 0.11.16Object.setPrototypeOf() instead of __proto__res.append()this.hrefx-powered-by response headerco@4statusesctx.throw(err, object) supportctx.throw(err, status, object) supporterr.expose to true when err.status not a valid http status coderequest.headers as request.headererr.status invalid lead to uncaughtExceptionthis.response.is()`.status=string and res.statusString #298this.lastModified and this.etag as both getters and setters for ubiquity #292.
See koajs/koa@4065bf7 for an explanation.this.response.vary() to use vary #291this.response.append() #291app and app.toJSON()this.thrown errors provide their own statuscontent-type w/ HEAD requests.is() to type-isnext in callback for nownext is app.callback()