CoolFace
Apppublic

strong-tie/inbound-calls

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
Migration-Guide-V5.md713 linesDownload Raw Back to Guides
1# V5 Migration Guide2 3This guide is intended to help with migration from Fastify v4 to v5.4 5Before migrating to v5, please ensure that you have fixed all deprecation6warnings from v4. All v4 deprecations have been removed and will no longer7work after upgrading.8 9## Long Term Support Cycle10 11Fastify v5 will only support Node.js v20+. If you are using an older version of12Node.js, you will need to upgrade to a newer version to use Fastify v5.13 14Fastify v4 is still supported until June 30, 2025. If you are unable to upgrade,15you should consider buying an end-of-life support plan from HeroDevs.16 17### Why Node.js v20?18 19Fastify v5 will only support Node.js v20+ because it has significant differences20compared to v18, such as21better support for `node:test`. This allows us to provide a better developer22experience and streamline maintenance.23 24Node.js v18 will exit Long Term Support on April 30, 2025, so you should be planning25to upgrade to v20 anyway.26 27## Breaking Changes28 29### Full JSON Schema is now required for `querystring`, `params` and `body` and response schemas30 31Starting with v5, Fastify will require a full JSON schema for the `querystring`,32`params` and `body` schema. Note that the `jsonShortHand` option has been33removed as well.34 35If the default JSON Schema validator is used, you will need36to provide a full JSON schema for the37`querystring`, `params`, `body`, and `response` schemas,38including the `type` property.39 40```js41// v442fastify.get('/route', {43  schema: {44    querystring: {45      name: { type: 'string' }46    }47  }48}, (req, reply) => {49  reply.send({ hello: req.query.name });50});51```52 53```js54// v555fastify.get('/route', {56  schema: {57    querystring: {58      type: 'object',59      properties: {60        name: { type: 'string' }61      },62      required: ['name']63    }64  }65}, (req, reply) => {66  reply.send({ hello: req.query.name });67});68```69 70See [#5586](https://github.com/fastify/fastify/pull/5586) for more details71 72Note that it's still possible to override the JSON Schema validator to73use a different format, such as Zod. This change simplifies that as well.74 75This change helps with integration of other tools, such as76[`@fastify/swagger`](https://github.com/fastify/fastify-swagger).77 78### New logger constructor signature79 80In Fastify v4, Fastify accepted the options to build a pino81logger in the `logger` option, as well as a custom logger instance.82This was the source of significant confusion.83 84As a result, the `logger` option will not accept a custom logger anymore in v5.85To use a custom logger, you should use the `loggerInstance` option instead:86 87```js88// v489const logger = require('pino')();90const fastify = require('fastify')({91  logger92});93```94 95```js96// v597const loggerInstance = require('pino')();98const fastify = require('fastify')({99  loggerInstance100});101```102 103### `useSemicolonDelimiter` false by default104 105Starting with v5, Fastify instances will no longer default to supporting the use106of semicolon delimiters in the query string as they did in v4.107This is due to it being non-standard108behavior and not adhering to [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986#section-3.4).109 110If you still wish to use semicolons as delimiters, you can do so by111setting `useSemicolonDelimiter: true` in the server configuration.112 113```js114const fastify = require('fastify')({115  useSemicolonDelimiter: true116});117```118 119### The parameters object no longer has a prototype120 121In v4, the `parameters` object had a prototype. This is no longer the case in v5.122This means that you can no longer access properties inherited from `Object` on123the `parameters` object, such as `toString` or `hasOwnProperty`.124 125```js126// v4127fastify.get('/route/:name', (req, reply) => {128  console.log(req.params.hasOwnProperty('name')); // true129  return { hello: req.params.name };130});131```132 133```js134// v5135fastify.get('/route/:name', (req, reply) => {136  console.log(Object.hasOwn(req.params, 'name')); // true137  return { hello: req.params.name };138});139```140 141This increases the security of the application by hardening against prototype142pollution attacks.143 144### Type Providers now differentiate between validator and serializer schemas145 146In v4, the type providers had the same types for both validation and serialization.147In v5, the type providers have been split into two separate types: `ValidatorSchema`148and `SerializerSchema`.149 150[`@fastify/type-provider-json-schema-to-ts`](https://github.com/fastify/fastify-type-provider-json-schema-to-ts)151and152[`@fastify/type-provider-typebox`](https://github.com/fastify/fastify-type-provider-typebox)153have already been updated: upgrade to the latest version to get the new types.154If you are using a custom type provider, you will need to modify it like155the following:156 157```158--- a/index.ts159+++ b/index.ts160@@ -11,7 +11,8 @@ import {161 import { FromSchema, FromSchemaDefaultOptions, FromSchemaOptions, JSONSchema } from 'json-schema-to-ts'162 163 export interface JsonSchemaToTsProvider<164   Options extends FromSchemaOptions = FromSchemaDefaultOptions165 > extends FastifyTypeProvider {166-  output: this['input'] extends JSONSchema ? FromSchema<this['input'], Options> : unknown;167+  validator: this['schema'] extends JSONSchema ? FromSchema<this['schema'], Options> : unknown;168+  serializer: this['schema'] extends JSONSchema ? FromSchema<this['schema'], Options> : unknown;169 }170 ```171 172### Changes to the .listen() method173 174The variadic argument signature of the `.listen()` method has been removed.175This means that you can no longer call `.listen()` with a variable number of arguments.176 177```js178// v4179fastify.listen(8000)180```181 182Will become:183 184```js185// v5186fastify.listen({ port: 8000 })187```188 189This was already deprecated in v4 as `FSTDEP011`, so you should have already updated190your code to use the new signature.191 192### Direct return of trailers has been removed193 194In v4, you could directly return trailers from a handler.195This is no longer possible in v5.196 197```js198// v4199fastify.get('/route', (req, reply) => {200  reply.trailer('ETag', function (reply, payload) {201    return 'custom-etag'202  })203  reply.send('')204});205```206 207```js208// v5209fastify.get('/route', (req, reply) => {210  reply.trailer('ETag', async function (reply, payload) {211    return 'custom-etag'212  })213  reply.send('')214});215```216 217A callback could also be used.218This was already deprecated in v4 as `FSTDEP013`,219so you should have already updated your code to use the new signature.220 221### Streamlined access to route definition222 223All deprecated properties relating to accessing the route definition have been removed224and are now accessed via `request.routeOptions`.225 226| Code | Description | How to solve | Discussion |227| ---- | ----------- | ------------ | ---------- |228| FSTDEP012 | You are trying to access the deprecated `request.context` property. | Use `request.routeOptions.config` or `request.routeOptions.schema`. | [#4216](https://github.com/fastify/fastify/pull/4216) [#5084](https://github.com/fastify/fastify/pull/5084) |229| FSTDEP015 | You are accessing the deprecated `request.routeSchema` property. | Use `request.routeOptions.schema`. | [#4470](https://github.com/fastify/fastify/pull/4470) |230| FSTDEP016 | You are accessing the deprecated `request.routeConfig` property. | Use `request.routeOptions.config`. | [#4470](https://github.com/fastify/fastify/pull/4470) |231| FSTDEP017 | You are accessing the deprecated `request.routerPath` property. | Use `request.routeOptions.url`. | [#4470](https://github.com/fastify/fastify/pull/4470) |232| FSTDEP018 | You are accessing the deprecated `request.routerMethod` property. | Use `request.routeOptions.method`. | [#4470](https://github.com/fastify/fastify/pull/4470) |233| FSTDEP019 | You are accessing the deprecated `reply.context` property. | Use `reply.routeOptions.config` or `reply.routeOptions.schema`. | [#5032](https://github.com/fastify/fastify/pull/5032) [#5084](https://github.com/fastify/fastify/pull/5084) |234 235See [#5616](https://github.com/fastify/fastify/pull/5616) for more information.236 237### `reply.redirect()` has a new signature238 239The `reply.redirect()` method has a new signature:240`reply.redirect(url: string, code?: number)`.241 242```js243// v4244reply.redirect(301, '/new-route')245```246 247Change it to:248 249```js250// v5251reply.redirect('/new-route', 301)252```253 254This was already deprecated in v4 as `FSTDEP021`, so you should have already255updated your code to use the new signature.256 257 258### Modifying `reply.sent` is now forbidden259 260In v4, you could modify the `reply.sent` property to prevent the response from261being sent.262This is no longer possible in v5, use `reply.hijack()` instead.263 264```js265// v4266fastify.get('/route', (req, reply) => {267  reply.sent = true;268  reply.raw.end('hello');269});270```271 272Change it to:273 274```js275// v5276fastify.get('/route', (req, reply) => {277  reply.hijack();278  reply.raw.end('hello');279});280```281 282This was already deprecated in v4 as `FSTDEP010`, so you should have already283updated your code to use the new signature.284 285### Constraints for route versioning signature changes286 287We changed the signature for route versioning constraints.288The `version` and `versioning` options have been removed and you should289use the `constraints` option instead.290 291| Code | Description | How to solve | Discussion |292| ---- | ----------- | ------------ | ---------- |293| FSTDEP008 | You are using route constraints via the route `{version: "..."}` option.  |  Use `{constraints: {version: "..."}}` option.  | [#2682](https://github.com/fastify/fastify/pull/2682) |294| FSTDEP009 | You are using a custom route versioning strategy via the server `{versioning: "..."}` option. |  Use `{constraints: {version: "..."}}` option.  | [#2682](https://github.com/fastify/fastify/pull/2682) |295 296### `HEAD` routes requires to register before `GET` when `exposeHeadRoutes: true`297 298We have a more strict requirement for custom `HEAD` route when299`exposeHeadRoutes: true`.300 301When you provides a custom `HEAD` route, you must either explicitly302set `exposeHeadRoutes` to `false`303 304```js305// v4306fastify.get('/route', {307 308}, (req, reply) => {309  reply.send({ hello: 'world' });310});311 312fastify.head('/route', (req, reply) => {313  // ...314});315```316 317```js318// v5319fastify.get('/route', {320  exposeHeadRoutes: false321}, (req, reply) => {322  reply.send({ hello: 'world' });323});324 325fastify.head('/route', (req, reply) => {326  // ...327});328```329 330or place the `HEAD` route before `GET`.331 332```js333// v5334fastify.head('/route', (req, reply) => {335  // ...336});337 338fastify.get('/route', {339 340}, (req, reply) => {341  reply.send({ hello: 'world' });342});343```344 345This was changed in [#2700](https://github.com/fastify/fastify/pull/2700),346and the old behavior was deprecated in v4 as `FSTDEP007`.347 348### Removed `request.connection`349 350The `request.connection` property has been removed in v5.351You should use `request.socket` instead.352 353```js354// v4355fastify.get('/route', (req, reply) => {356  console.log(req.connection.remoteAddress);357  return { hello: 'world' };358});359```360 361```js362// v5363fastify.get('/route', (req, reply) => {364  console.log(req.socket.remoteAddress);365  return { hello: 'world' };366});367```368 369This was already deprecated in v4 as `FSTDEP05`, so you should370have already updated your code to use the new signature.371 372### `reply.getResponseTime()` has been removed, use `reply.elapsedTime` instead373 374The `reply.getResponseTime()` method has been removed in v5.375You should use `reply.elapsedTime` instead.376 377```js378// v4379fastify.get('/route', (req, reply) => {380  console.log(reply.getResponseTime());381  return { hello: 'world' };382});383```384 385```js386// v5387fastify.get('/route', (req, reply) => {388  console.log(reply.elapsedTime);389  return { hello: 'world' };390});391```392 393This was already deprecated in v4 as `FSTDEP20`, so you should have already394updated your code to use the new signature.395 396### `fastify.hasRoute()` now matches the behavior of `find-my-way`397 398The `fastify.hasRoute()` method now matches the behavior of `find-my-way`399and requires the route definition to be passed as it is defined in the route.400 401```js402// v4403fastify.get('/example/:file(^\\d+).png', function (request, reply) { })404 405console.log(fastify.hasRoute({406  method: 'GET',407  url: '/example/12345.png'408)); // true409```410 411```js412// v5413 414fastify.get('/example/:file(^\\d+).png', function (request, reply) { })415 416console.log(fastify.hasRoute({417  method: 'GET',418  url: '/example/:file(^\\d+).png'419)); // true420```421 422### Removal of some non-standard HTTP methods423 424We have removed the following HTTP methods from Fastify:425- `PROPFIND`426- `PROPPATCH`427- `MKCOL`428- `COPY`429- `MOVE`430- `LOCK`431- `UNLOCK`432- `TRACE`433- `SEARCH`434 435It's now possible to add them back using the `addHttpMethod` method.436 437```js438const fastify = Fastify()439 440// add a new http method on top of the default ones:441fastify.addHttpMethod('REBIND')442 443// add a new HTTP method that accepts a body:444fastify.addHttpMethod('REBIND', { hasBody: true })445 446// reads the HTTP methods list:447fastify.supportedMethods // returns a string array448```449 450See [#5567](https://github.com/fastify/fastify/pull/5567) for more451information.452 453### Removed support from reference types in decorators454 455Decorating Request/Reply with a reference type (`Array`, `Object`)456is now prohibited as this reference is shared amongst all requests.457 458```js459// v4460fastify.decorateRequest('myObject', { hello: 'world' });461```462 463```js464// v5465fastify.decorateRequest('myObject');466fastify.addHook('onRequest', async (req, reply) => {467  req.myObject = { hello: 'world' };468});469```470 471or turn it into a function472 473```js474// v5475fastify.decorateRequest('myObject', () => { hello: 'world' });476```477 478or as a getter479 480```js481// v5482fastify.decorateRequest('myObject', {483  getter () {484    return { hello: 'world' }485  }486});487```488 489See [#5462](https://github.com/fastify/fastify/pull/5462) for more information.490 491### Remove support for DELETE with a `Content-Type: application/json` header and an empty body492 493In v4, Fastify allowed `DELETE` requests with a `Content-Type: application/json`494header and an empty body was accepted.495This is no longer allowed in v5.496 497See [#5419](https://github.com/fastify/fastify/pull/5419) for more information.498 499### Plugins cannot mix callback/promise API anymore500 501In v4, plugins could mix the callback and promise API, leading to unexpected behavior.502This is no longer allowed in v5.503 504```js505// v4506fastify.register(async function (instance, opts, done) {507  done();508});509```510 511```js512// v5513fastify.register(async function (instance, opts) {514  return;515});516```517 518or519 520```js521// v5522fastify.register(function (instance, opts, done) {523  done();524});525```526 527### Removes `getDefaultRoute` and `setDefaultRoute` methods528 529The `getDefaultRoute` and `setDefaultRoute` methods have been removed in v5.530 531See [#4485](https://github.com/fastify/fastify/pull/4485)532and [#4480](https://github.com/fastify/fastify/pull/4485)533for more information.534This was already deprecated in v4 as `FSTDEP014`,535so you should have already updated your code.536 537## New Features538 539### Diagnostic Channel support540 541Fastify v5 now supports the [Diagnostics Channel](https://nodejs.org/api/diagnostics_channel.html)542API natively543and provides a way to trace the lifecycle of a request.544 545```js546'use strict'547 548const diagnostics = require('node:diagnostics_channel')549const sget = require('simple-get').concat550const Fastify = require('fastify')551 552diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {553  console.log(msg.route.url) // '/:id'554  console.log(msg.route.method) // 'GET'555})556 557diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {558  // msg is the same as the one emitted by the 'tracing:fastify.request.handler:start' channel559  console.log(msg)560})561 562diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {563  // in case of error564})565 566const fastify = Fastify()567fastify.route({568  method: 'GET',569  url: '/:id',570  handler: function (req, reply) {571    return { hello: 'world' }572  }573})574 575fastify.listen({ port: 0 }, function () {576  sget({577    method: 'GET',578    url: fastify.listeningOrigin + '/7'579  }, (err, response, body) => {580    t.error(err)581    t.equal(response.statusCode, 200)582    t.same(JSON.parse(body), { hello: 'world' })583  })584})585```586 587See the [documentation](https://github.com/fastify/fastify/blob/main/docs/Reference/Hooks.md#diagnostics-channel-hooks)588and [#5252](https://github.com/fastify/fastify/pull/5252) for additional details.589 590## Contributors591 592The complete list of contributors, across all of the core593Fastify packages, is provided below. Please consider594contributing to those that are capable of accepting sponsorships.595 596| Contributor | Sponsor Link | Packages |597| --- | --- | --- |598| 10xLaCroixDrinker | [❤️ sponsor](https://github.com/sponsors/10xLaCroixDrinker) | fastify-cli |599| Bram-dc |  | fastify; fastify-swagger |600| BrianValente |  | fastify |601| BryanAbate |  | fastify-cli |602| Cadienvan | [❤️ sponsor](https://github.com/sponsors/Cadienvan) | fastify |603| Cangit |  | fastify |604| Cyberlane |  | fastify-elasticsearch |605| Eomm | [❤️ sponsor](https://github.com/sponsors/Eomm) | ajv-compiler; fastify; fastify-awilix; fastify-diagnostics-channel; fastify-elasticsearch; fastify-hotwire; fastify-mongodb; fastify-nextjs; fastify-swagger-ui; under-pressure |606| EstebanDalelR | [❤️ sponsor](https://github.com/sponsors/EstebanDalelR) | fastify-cli |607| Fdawgs | [❤️ sponsor](https://github.com/sponsors/Fdawgs) | aws-lambda-fastify; csrf-protection; env-schema; fastify; fastify-accepts; fastify-accepts-serializer; fastify-auth; fastify-awilix; fastify-basic-auth; fastify-bearer-auth; fastify-caching; fastify-circuit-breaker; fastify-cli; fastify-cookie; fastify-cors; fastify-diagnostics-channel; fastify-elasticsearch; fastify-env; fastify-error; fastify-etag; fastify-express; fastify-flash; fastify-formbody; fastify-funky; fastify-helmet; fastify-hotwire; fastify-http-proxy; fastify-jwt; fastify-kafka; fastify-leveldb; fastify-mongodb; fastify-multipart; fastify-mysql; fastify-nextjs; fastify-oauth2; fastify-passport; fastify-plugin; fastify-postgres; fastify-rate-limit; fastify-redis; fastify-reply-from; fastify-request-context; fastify-response-validation; fastify-routes; fastify-routes-stats; fastify-schedule; fastify-secure-session; fastify-sensible; fastify-swagger-ui; fastify-url-data; fastify-websocket; fastify-zipkin; fluent-json-schema; forwarded; middie; point-of-view; process-warning; proxy-addr; safe-regex2; secure-json-parse; under-pressure |608| Gehbt |  | fastify-secure-session |609| Gesma94 |  | fastify-routes-stats |610| H4ad | [❤️ sponsor](https://github.com/sponsors/H4ad) | aws-lambda-fastify |611| JohanManders |  | fastify-secure-session |612| LiviaMedeiros |  | fastify |613| Momy93 |  | fastify-secure-session |614| MunifTanjim |  | fastify-swagger-ui |615| Nanosync |  | fastify-secure-session |616| RafaelGSS | [❤️ sponsor](https://github.com/sponsors/RafaelGSS) | fastify; under-pressure |617| Rantoledo |  | fastify |618| SMNBLMRR |  | fastify |619| SimoneDevkt |  | fastify-cli |620| Tony133 |  | fastify |621| Uzlopak | [❤️ sponsor](https://github.com/sponsors/Uzlopak) | fastify; fastify-autoload; fastify-diagnostics-channel; fastify-hotwire; fastify-nextjs; fastify-passport; fastify-plugin; fastify-rate-limit; fastify-routes; fastify-static; fastify-swagger-ui; point-of-view; under-pressure |622| Zamiell |  | fastify-secure-session |623| aadito123 |  | fastify |624| aaroncadillac | [❤️ sponsor](https://github.com/sponsors/aaroncadillac) | fastify |625| aarontravass |  | fastify |626| acro5piano | [❤️ sponsor](https://github.com/sponsors/acro5piano) | fastify-secure-session |627| adamward459 |  | fastify-cli |628| adrai | [❤️ sponsor](https://github.com/sponsors/adrai) | aws-lambda-fastify |629| alenap93 |  | fastify |630| alexandrucancescu |  | fastify-nextjs |631| anthonyringoet |  | aws-lambda-fastify |632| arshcodemod |  | fastify |633| autopulated |  | point-of-view |634| barbieri |  | fastify |635| beyazit |  | fastify |636| big-kahuna-burger | [❤️ sponsor](https://github.com/sponsors/big-kahuna-burger) | fastify-cli; fastify-compress; fastify-helmet |637| bilalshareef |  | fastify-routes |638| blue86321 |  | fastify-swagger-ui |639| bodinsamuel |  | fastify-rate-limit |640| busybox11 | [❤️ sponsor](https://github.com/sponsors/busybox11) | fastify |641| climba03003 |  | csrf-protection; fastify; fastify-accepts; fastify-accepts-serializer; fastify-auth; fastify-basic-auth; fastify-bearer-auth; fastify-caching; fastify-circuit-breaker; fastify-compress; fastify-cors; fastify-env; fastify-etag; fastify-flash; fastify-formbody; fastify-http-proxy; fastify-mongodb; fastify-swagger-ui; fastify-url-data; fastify-websocket; middie |642| dancastillo | [❤️ sponsor](https://github.com/sponsors/dancastillo) | fastify; fastify-basic-auth; fastify-caching; fastify-circuit-breaker; fastify-cors; fastify-helmet; fastify-passport; fastify-response-validation; fastify-routes; fastify-schedule |643| danny-andrews |  | fastify-kafka |644| davidcralph | [❤️ sponsor](https://github.com/sponsors/davidcralph) | csrf-protection |645| davideroffo |  | under-pressure |646| dhensby |  | fastify-cli |647| dmkng |  | fastify |648| domdomegg |  | fastify |649| faustman |  | fastify-cli |650| floridemai |  | fluent-json-schema |651| fox1t |  | fastify-autoload |652| giuliowaitforitdavide |  | fastify |653| gunters63 |  | fastify-reply-from |654| gurgunday |  | fastify; fastify-circuit-breaker; fastify-cookie; fastify-multipart; fastify-mysql; fastify-rate-limit; fastify-response-validation; fastify-sensible; fastify-swagger-ui; fluent-json-schema; middie; proxy-addr; safe-regex2; secure-json-parse |655| ildella |  | under-pressure |656| james-kaguru |  | fastify |657| jcbain |  | fastify-http-proxy |658| jdhollander |  | fastify-swagger-ui |659| jean-michelet |  | fastify; fastify-autoload; fastify-cli; fastify-mysql; fastify-sensible |660| johaven |  | fastify-multipart |661| jordanebelanger |  | fastify-plugin |662| jscheffner |  | fastify |663| jsprw |  | fastify-secure-session |664| jsumners | [❤️ sponsor](https://github.com/sponsors/jsumners) | ajv-compiler; avvio; csrf-protection; env-schema; fast-json-stringify; fastify; fastify-accepts; fastify-accepts-serializer; fastify-auth; fastify-autoload; fastify-awilix; fastify-basic-auth; fastify-bearer-auth; fastify-caching; fastify-circuit-breaker; fastify-compress; fastify-cookie; fastify-cors; fastify-env; fastify-error; fastify-etag; fastify-express; fastify-flash; fastify-formbody; fastify-funky; fastify-helmet; fastify-http-proxy; fastify-jwt; fastify-kafka; fastify-leveldb; fastify-multipart; fastify-mysql; fastify-oauth2; fastify-plugin; fastify-postgres; fastify-redis; fastify-reply-from; fastify-request-context; fastify-response-validation; fastify-routes; fastify-routes-stats; fastify-schedule; fastify-secure-session; fastify-sensible; fastify-static; fastify-swagger; fastify-swagger-ui; fastify-url-data; fastify-websocket; fastify-zipkin; fluent-json-schema; forwarded; light-my-request; middie; process-warning; proxy-addr; safe-regex2; secure-json-parse; under-pressure |665| karankraina |  | under-pressure |666| kerolloz | [❤️ sponsor](https://github.com/sponsors/kerolloz) | fastify-jwt |667| kibertoad |  | fastify-rate-limit |668| kukidon-dev |  | fastify-passport |669| kunal097 |  | fastify |670| lamweili |  | fastify-sensible |671| lemonclown |  | fastify-mongodb |672| liuhanqu |  | fastify |673| matthyk |  | fastify-plugin |674| mch-dsk |  | fastify |675| mcollina | [❤️ sponsor](https://github.com/sponsors/mcollina) | ajv-compiler; avvio; csrf-protection; fastify; fastify-accepts; fastify-accepts-serializer; fastify-auth; fastify-autoload; fastify-awilix; fastify-basic-auth; fastify-bearer-auth; fastify-caching; fastify-circuit-breaker; fastify-cli; fastify-compress; fastify-cookie; fastify-cors; fastify-diagnostics-channel; fastify-elasticsearch; fastify-env; fastify-etag; fastify-express; fastify-flash; fastify-formbody; fastify-funky; fastify-helmet; fastify-http-proxy; fastify-jwt; fastify-kafka; fastify-leveldb; fastify-multipart; fastify-mysql; fastify-oauth2; fastify-passport; fastify-plugin; fastify-postgres; fastify-rate-limit; fastify-redis; fastify-reply-from; fastify-request-context; fastify-response-validation; fastify-routes; fastify-routes-stats; fastify-schedule; fastify-secure-session; fastify-static; fastify-swagger; fastify-swagger-ui; fastify-url-data; fastify-websocket; fastify-zipkin; fluent-json-schema; light-my-request; middie; point-of-view; proxy-addr; secure-json-parse; under-pressure |676| melroy89 | [❤️ sponsor](https://github.com/sponsors/melroy89) | under-pressure |677| metcoder95 | [❤️ sponsor](https://github.com/sponsors/metcoder95) | fastify-elasticsearch |678| mhamann |  | fastify-cli |679| mihaur |  | fastify-elasticsearch |680| mikesamm |  | fastify |681| mikhael-abdallah |  | secure-json-parse |682| miquelfire | [❤️ sponsor](https://github.com/sponsors/miquelfire) | fastify-routes |683| miraries |  | fastify-swagger-ui |684| mohab-sameh |  | fastify |685| monish001 |  | fastify |686| moradebianchetti81 |  | fastify |687| mouhannad-sh |  | aws-lambda-fastify |688| multivoltage |  | point-of-view |689| muya | [❤️ sponsor](https://github.com/sponsors/muya) | under-pressure |690| mweberxyz |  | point-of-view |691| nflaig |  | fastify |692| nickfla1 |  | avvio |693| o-az |  | process-warning |694| ojeytonwilliams |  | csrf-protection |695| onosendi |  | fastify-formbody |696| philippviereck |  | fastify |697| pip77 |  | fastify-mongodb |698| puskin94 |  | fastify |699| remidewitte |  | fastify |700| rozzilla |  | fastify |701| samialdury |  | fastify-cli |702| sknetl |  | fastify-cors |703| sourcecodeit |  | fastify |704| synapse |  | env-schema |705| timursaurus |  | secure-json-parse |706| tlhunter |  | fastify |707| tlund101 |  | fastify-rate-limit |708| ttshivers |  | fastify-http-proxy |709| voxpelli | [❤️ sponsor](https://github.com/sponsors/voxpelli) | fastify |710| weixinwu |  | fastify-cli |711| zetaraku |  | fastify-cli |712 713