V5 迁移指南
¥V5 Migration Guide
本指南旨在帮助从 Fastify v4 迁移到 v5。
¥This guide is intended to help with migration from Fastify v4 to v5.
在迁移到 v5 之前,请确保你已修复 v4 中的所有弃用警告。所有 v4 弃用都已删除,升级后将不再起作用。
¥Before migrating to v5, please ensure that you have fixed all deprecation warnings from v4. All v4 deprecations have been removed and will no longer work after upgrading.
长期支持周期
¥Long Term Support Cycle
Fastify v5 仅支持 Node.js v20+。如果你使用的是旧版本的 Node.js,则需要升级到较新版本才能使用 Fastify v5。
¥Fastify v5 will only support Node.js v20+. If you are using an older version of Node.js, you will need to upgrade to a newer version to use Fastify v5.
Fastify v4 仍受支持至 2025 年 6 月 30 日。如果你无法升级,你应该考虑从 HeroDevs 购买终止支持计划。
¥Fastify v4 is still supported until June 30, 2025. If you are unable to upgrade, you should consider buying an end-of-life support plan from HeroDevs.
为什么是 Node.js v20?
¥Why Node.js v20?
Fastify v5 将仅支持 Node.js v20+,因为它与 v18 相比有显著差异,例如对 node:test
的更好支持。这使我们能够提供更好的开发者体验并简化维护。
¥Fastify v5 will only support Node.js v20+ because it has significant differences
compared to v18, such as
better support for node:test
. This allows us to provide a better developer
experience and streamline maintenance.
Node.js v18 将于 2025 年 4 月 30 日退出长期支持,因此你无论如何都应该计划升级到 v20。
¥Node.js v18 will exit Long Term Support on April 30, 2025, so you should be planning to upgrade to v20 anyway.
重大变更
¥Breaking Changes
现在需要完整的 JSON 模式来处理 querystring
、params
和 body
以及响应模式
¥Full JSON Schema is now required for querystring
, params
and body
and response schemas
从 v5 开始,Fastify 将需要完整的 JSON 模式来满足 querystring
、params
和 body
模式的要求。请注意,jsonShortHand
选项也已被删除。
¥Starting with v5, Fastify will require a full JSON schema for the querystring
,
params
and body
schema. Note that the jsonShortHand
option has been
removed as well.
如果使用默认的 JSON 模式验证器,则需要为 querystring
、params
、body
和 response
模式提供完整的 JSON 模式,包括 type
属性。
¥If the default JSON Schema validator is used, you will need
to provide a full JSON schema for the
querystring
, params
, body
, and response
schemas,
including the type
property.
// v4
fastify.get('/route', {
schema: {
querystring: {
name: { type: 'string' }
}
}
}, (req, reply) => {
reply.send({ hello: req.query.name });
});
// v5
fastify.get('/route', {
schema: {
querystring: {
type: 'object',
properties: {
name: { type: 'string' }
},
required: ['name']
}
}
}, (req, reply) => {
reply.send({ hello: req.query.name });
});
有关更多详细信息,请参阅 #5586
¥See #5586 for more details
请注意,仍然可以覆盖 JSON Schema 验证器以使用不同的格式,例如 Zod。此更改也简化了这一点。
¥Note that it's still possible to override the JSON Schema validator to use a different format, such as Zod. This change simplifies that as well.
此更改有助于集成其他工具,例如 @fastify/swagger
。
¥This change helps with integration of other tools, such as
@fastify/swagger
.
新的日志器构造函数签名
¥New logger constructor signature
在 Fastify v4 中,Fastify 接受了在 logger
选项中构建 pino 日志器的选项,以及自定义日志器实例。这是造成严重混乱的根源。
¥In Fastify v4, Fastify accepted the options to build a pino
logger in the logger
option, as well as a custom logger instance.
This was the source of significant confusion.
因此,logger
选项在 v5 中将不再接受自定义日志器。要使用自定义日志器,你应该改用 loggerInstance
选项:
¥As a result, the logger
option will not accept a custom logger anymore in v5.
To use a custom logger, you should use the loggerInstance
option instead:
// v4
const logger = require('pino')();
const fastify = require('fastify')({
logger
});
// v5
const loggerInstance = require('pino')();
const fastify = require('fastify')({
loggerInstance
});
useSemicolonDelimiter
默认为 false
¥useSemicolonDelimiter
false by default
从 v5 开始,Fastify 实例将不再默认支持在查询字符串中使用分号分隔符,就像在 v4 中一样。这是因为它是非标准行为并且不遵守 RFC 3986。
¥Starting with v5, Fastify instances will no longer default to supporting the use of semicolon delimiters in the query string as they did in v4. This is due to it being non-standard behavior and not adhering to RFC 3986.
如果你仍希望使用分号作为分隔符,则可以通过在服务器配置中设置 useSemicolonDelimiter: true
来实现。
¥If you still wish to use semicolons as delimiters, you can do so by
setting useSemicolonDelimiter: true
in the server configuration.
const fastify = require('fastify')({
useSemicolonDelimiter: true
});
参数对象不再具有原型
¥The parameters object no longer has a prototype
在 v4 中,parameters
对象有一个原型。这在 v5 中不再是这种情况。这意味着你无法再访问 parameters
对象上从 Object
继承的属性,例如 toString
或 hasOwnProperty
。
¥In v4, the parameters
object had a prototype. This is no longer the case in v5.
This means that you can no longer access properties inherited from Object
on
the parameters
object, such as toString
or hasOwnProperty
.
// v4
fastify.get('/route/:name', (req, reply) => {
console.log(req.params.hasOwnProperty('name')); // true
return { hello: req.params.name };
});
// v5
fastify.get('/route/:name', (req, reply) => {
console.log(Object.hasOwn(req.params, 'name')); // true
return { hello: req.params.name };
});
通过加强对原型污染攻击的防御,这提高了应用的安全性。
¥This increases the security of the application by hardening against prototype pollution attacks.
类型提供程序现在区分验证器和序列化器模式
¥Type Providers now differentiate between validator and serializer schemas
在 v4 中,类型提供程序对于验证和序列化具有相同的类型。在 v5 中,类型提供程序已分为两种不同的类型:ValidatorSchema
和 SerializerSchema
。
¥In v4, the type providers had the same types for both validation and serialization.
In v5, the type providers have been split into two separate types: ValidatorSchema
and SerializerSchema
.
@fastify/type-provider-json-schema-to-ts
和 @fastify/type-provider-typebox
已更新:升级到最新版本以获取新类型。如果你使用的是自定义类型提供程序,则需要按如下方式进行修改:
¥@fastify/type-provider-json-schema-to-ts
and
@fastify/type-provider-typebox
have already been updated: upgrade to the latest version to get the new types.
If you are using a custom type provider, you will need to modify it like
the following:
--- a/index.ts
+++ b/index.ts
@@ -11,7 +11,8 @@ import {
import { FromSchema, FromSchemaDefaultOptions, FromSchemaOptions, JSONSchema } from 'json-schema-to-ts'
export interface JsonSchemaToTsProvider<
Options extends FromSchemaOptions = FromSchemaDefaultOptions
> extends FastifyTypeProvider {
- output: this['input'] extends JSONSchema ? FromSchema<this['input'], Options> : unknown;
+ validator: this['schema'] extends JSONSchema ? FromSchema<this['schema'], Options> : unknown;
+ serializer: this['schema'] extends JSONSchema ? FromSchema<this['schema'], Options> : unknown;
}
.listen() 方法的更改
¥Changes to the .listen() method
.listen()
方法的可变参数签名已被删除。这意味着你无法再使用可变数量的参数调用 .listen()
。
¥The variadic argument signature of the .listen()
method has been removed.
This means that you can no longer call .listen()
with a variable number of arguments.
// v4
fastify.listen(8000)
将成为:
¥Will become:
// v5
fastify.listen({ port: 8000 })
这在 v4 中已弃用为 FSTDEP011
,因此你应该已经更新了代码以使用新签名。
¥This was already deprecated in v4 as FSTDEP011
, so you should have already updated
your code to use the new signature.
已删除直接返回尾部
¥Direct return of trailers has been removed
在 v4 中,你可以直接从处理程序返回尾部。这在 v5 中不再可能。
¥In v4, you could directly return trailers from a handler. This is no longer possible in v5.
// v4
fastify.get('/route', (req, reply) => {
reply.trailer('ETag', function (reply, payload) {
return 'custom-etag'
})
reply.send('')
});
// v5
fastify.get('/route', (req, reply) => {
reply.trailer('ETag', async function (reply, payload) {
return 'custom-etag'
})
reply.send('')
});
也可以使用回调。这在 v4 中已弃用为 FSTDEP013
,因此你应该已经更新了代码以使用新签名。
¥A callback could also be used.
This was already deprecated in v4 as FSTDEP013
,
so you should have already updated your code to use the new signature.
简化对路由定义的访问
¥Streamlined access to route definition
与访问路由定义相关的所有弃用属性都已被删除,现在可通过 request.routeOptions
访问。
¥All deprecated properties relating to accessing the route definition have been removed
and are now accessed via request.routeOptions
.
代码 | 描述 | 怎么解决 | 讨论 |
---|---|---|---|
FSTDEP012 | 你正在尝试访问已弃用的 request.context 属性。 | 使用 request.routeOptions.config 或 request.routeOptions.schema 。 | #4216 #5084 |
FSTDEP015 | 你正在访问已弃用的 request.routeSchema 属性。 | 使用 request.routeOptions.schema 。 | #4470 |
FSTDEP016 | 你正在访问已弃用的 request.routeConfig 属性。 | 使用 request.routeOptions.config 。 | #4470 |
FSTDEP017 | 你正在访问已弃用的 request.routerPath 属性。 | 使用 request.routeOptions.url 。 | #4470 |
FSTDEP018 | 你正在访问已弃用的 request.routerMethod 属性。 | 使用 request.routeOptions.method 。 | #4470 |
FSTDEP019 | 你正在访问已弃用的 reply.context 属性。 | 使用 reply.routeOptions.config 或 reply.routeOptions.schema 。 | #5032 #5084 |
有关更多信息,请参阅 #5616。
¥See #5616 for more information.
reply.redirect()
有新的签名
¥reply.redirect()
has a new signature
reply.redirect()
方法有一个新的签名:reply.redirect(url: string, code?: number)
。
¥The reply.redirect()
method has a new signature:
reply.redirect(url: string, code?: number)
.
// v4
reply.redirect(301, '/new-route')
将其更改为:
¥Change it to:
// v5
reply.redirect('/new-route', 301)
这在 v4 中已弃用为 FSTDEP021
,因此你应该已经更新了代码以使用新签名。
¥This was already deprecated in v4 as FSTDEP021
, so you should have already
updated your code to use the new signature.
现在禁止修改 reply.sent
¥Modifying reply.sent
is now forbidden
在 v4 中,你可以修改 reply.sent
属性以防止发送响应。这在 v5 中不再可能,请改用 reply.hijack()
。
¥In v4, you could modify the reply.sent
property to prevent the response from
being sent.
This is no longer possible in v5, use reply.hijack()
instead.
// v4
fastify.get('/route', (req, reply) => {
reply.sent = true;
reply.raw.end('hello');
});
将其更改为:
¥Change it to:
// v5
fastify.get('/route', (req, reply) => {
reply.hijack();
reply.raw.end('hello');
});
这在 v4 中已弃用为 FSTDEP010
,因此你应该已经更新了代码以使用新签名。
¥This was already deprecated in v4 as FSTDEP010
, so you should have already
updated your code to use the new signature.
路由版本签名更改的约束
¥Constraints for route versioning signature changes
我们更改了路由版本控制约束的签名。version
和 versioning
选项已被删除,你应该改用 constraints
选项。
¥We changed the signature for route versioning constraints.
The version
and versioning
options have been removed and you should
use the constraints
option instead.
代码 | 描述 | 怎么解决 | 讨论 |
---|---|---|---|
FSTDEP008 | 你正在通过路由 {version: "..."} 选项使用路由约束。 | 使用 {constraints: {version: "..."}} 选项。 | #2682 |
FSTDEP009 | 你正在通过服务器 {versioning: "..."} 选项使用自定义路由版本控制策略。 | 使用 {constraints: {version: "..."}} 选项。 | #2682 |
HEAD
路由需要在 exposeHeadRoutes: true
时在 GET
之前注册
¥HEAD
routes requires to register before GET
when exposeHeadRoutes: true
当 exposeHeadRoutes: true
时,我们对自定义 HEAD
路由有更严格的要求。
¥We have a more strict requirement for custom HEAD
route when
exposeHeadRoutes: true
.
当你提供自定义 HEAD
路由时,你必须明确将 exposeHeadRoutes
设置为 false
¥When you provides a custom HEAD
route, you must either explicitly
set exposeHeadRoutes
to false
// v4
fastify.get('/route', {
}, (req, reply) => {
reply.send({ hello: 'world' });
});
fastify.head('/route', (req, reply) => {
// ...
});
// v5
fastify.get('/route', {
exposeHeadRoutes: false
}, (req, reply) => {
reply.send({ hello: 'world' });
});
fastify.head('/route', (req, reply) => {
// ...
});
或者将 HEAD
路由放在 GET
之前。
¥or place the HEAD
route before GET
.
// v5
fastify.head('/route', (req, reply) => {
// ...
});
fastify.get('/route', {
}, (req, reply) => {
reply.send({ hello: 'world' });
});
这在 #2700 中已更改,旧行为在 v4 中已弃用为 FSTDEP007
。
¥This was changed in #2700,
and the old behavior was deprecated in v4 as FSTDEP007
.
删除 request.connection
¥Removed request.connection
request.connection
属性已在 v5 中删除。你应该改用 request.socket
。
¥The request.connection
property has been removed in v5.
You should use request.socket
instead.
// v4
fastify.get('/route', (req, reply) => {
console.log(req.connection.remoteAddress);
return { hello: 'world' };
});
// v5
fastify.get('/route', (req, reply) => {
console.log(req.socket.remoteAddress);
return { hello: 'world' };
});
这在 v4 中已弃用为 FSTDEP05
,因此你应该已经更新了代码以使用新签名。
¥This was already deprecated in v4 as FSTDEP05
, so you should
have already updated your code to use the new signature.
reply.getResponseTime()
已被移除,改用 reply.elapsedTime
¥reply.getResponseTime()
has been removed, use reply.elapsedTime
instead
reply.getResponseTime()
方法已在 v5 中删除。你应该改用 reply.elapsedTime
。
¥The reply.getResponseTime()
method has been removed in v5.
You should use reply.elapsedTime
instead.
// v4
fastify.get('/route', (req, reply) => {
console.log(reply.getResponseTime());
return { hello: 'world' };
});
// v5
fastify.get('/route', (req, reply) => {
console.log(reply.elapsedTime);
return { hello: 'world' };
});
这在 v4 中已弃用为 FSTDEP20
,因此你应该已经更新了代码以使用新签名。
¥This was already deprecated in v4 as FSTDEP20
, so you should have already
updated your code to use the new signature.
fastify.hasRoute()
现在与 find-my-way
的行为一致
¥fastify.hasRoute()
now matches the behavior of find-my-way
fastify.hasRoute()
方法现在与 find-my-way
的行为相匹配,并要求按照路由中的定义传递路由定义。
¥The fastify.hasRoute()
method now matches the behavior of find-my-way
and requires the route definition to be passed as it is defined in the route.
// v4
fastify.get('/example/:file(^\\d+).png', function (request, reply) { })
console.log(fastify.hasRoute({
method: 'GET',
url: '/example/12345.png'
)); // true
// v5
fastify.get('/example/:file(^\\d+).png', function (request, reply) { })
console.log(fastify.hasRoute({
method: 'GET',
url: '/example/:file(^\\d+).png'
)); // true
删除一些非标准 HTTP 方法
¥Removal of some non-standard HTTP methods
我们从 Fastify 中删除了以下 HTTP 方法:
¥We have removed the following HTTP methods from Fastify:
PROPFIND
PROPPATCH
MKCOL
COPY
MOVE
LOCK
UNLOCK
TRACE
SEARCH
现在可以使用 addHttpMethod
方法将它们添加回来。
¥It's now possible to add them back using the addHttpMethod
method.
const fastify = Fastify()
// add a new http method on top of the default ones:
fastify.addHttpMethod('REBIND')
// add a new HTTP method that accepts a body:
fastify.addHttpMethod('REBIND', { hasBody: true })
// reads the HTTP methods list:
fastify.supportedMethods // returns a string array
有关更多信息,请参阅 #5567。
¥See #5567 for more information.
删除对引用类型的支持在装饰器中
¥Removed support from reference types in decorators
现在禁止使用引用类型 (Array
、Object
) 装饰请求/回复,因为此引用在所有请求之间共享。
¥Decorating Request/Reply with a reference type (Array
, Object
)
is now prohibited as this reference is shared amongst all requests.
// v4
fastify.decorateRequest('myObject', { hello: 'world' });
// v5
fastify.decorateRequest('myObject');
fastify.addHook('onRequest', async (req, reply) => {
req.myObject = { hello: 'world' };
});
或者将其转换为函数
¥or turn it into a function
// v5
fastify.decorateRequest('myObject', () => { hello: 'world' });
或作为 getter
¥or as a getter
// v5
fastify.decorateRequest('myObject', {
getter () {
return { hello: 'world' }
}
});
有关更多信息,请参阅 #5462。
¥See #5462 for more information.
删除对带有 Content-Type: application/json
标头和空主体的 DELETE 的支持
¥Remove support for DELETE with a Content-Type: application/json
header and an empty body
在 v4 中,Fastify 允许带有 Content-Type: application/json
标头的 DELETE
请求,并且接受空主体。这在 v5 中不再允许。
¥In v4, Fastify allowed DELETE
requests with a Content-Type: application/json
header and an empty body was accepted.
This is no longer allowed in v5.
有关更多信息,请参阅 #5419。
¥See #5419 for more information.
插件不能再混合回调/promise API
¥Plugins cannot mix callback/promise API anymore
在 v4 中,插件可以混合回调和 promise API,从而导致意外行为。这在 v5 中不再允许。
¥In v4, plugins could mix the callback and promise API, leading to unexpected behavior. This is no longer allowed in v5.
// v4
fastify.register(async function (instance, opts, done) {
done();
});
// v5
fastify.register(async function (instance, opts) {
return;
});
or
// v5
fastify.register(function (instance, opts, done) {
done();
});
删除 getDefaultRoute
和 setDefaultRoute
方法
¥Removes getDefaultRoute
and setDefaultRoute
methods
getDefaultRoute
和 setDefaultRoute
方法已在 v5 中删除。
¥The getDefaultRoute
and setDefaultRoute
methods have been removed in v5.
有关更多信息,请参阅 #4485 和 #4480。这在 v4 中已弃用为 FSTDEP014
,因此你应该已经更新了代码。
¥See #4485
and #4480
for more information.
This was already deprecated in v4 as FSTDEP014
,
so you should have already updated your code.
新功能
¥New Features
诊断通道支持
¥Diagnostic Channel support
Fastify v5 现在原生支持 诊断通道 API,并提供了一种跟踪请求生命周期的方法。
¥Fastify v5 now supports the Diagnostics Channel API natively and provides a way to trace the lifecycle of a request.
'use strict'
const diagnostics = require('node:diagnostics_channel')
const sget = require('simple-get').concat
const Fastify = require('fastify')
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
console.log(msg.route.url) // '/:id'
console.log(msg.route.method) // 'GET'
})
diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {
// msg is the same as the one emitted by the 'tracing:fastify.request.handler:start' channel
console.log(msg)
})
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
// in case of error
})
const fastify = Fastify()
fastify.route({
method: 'GET',
url: '/:id',
handler: function (req, reply) {
return { hello: 'world' }
}
})
fastify.listen({ port: 0 }, function () {
sget({
method: 'GET',
url: fastify.listeningOrigin + '/7'
}, (err, response, body) => {
t.error(err)
t.equal(response.statusCode, 200)
t.same(JSON.parse(body), { hello: 'world' })
})
})
有关更多详细信息,请参阅 documentation 和 #5252。
¥See the documentation and #5252 for additional details.
贡献者
¥Contributors
下面提供了所有核心 Fastify 软件包的完整贡献者列表。请考虑为那些能够接受赞助的人做出贡献。
¥The complete list of contributors, across all of the core Fastify packages, is provided below. Please consider contributing to those that are capable of accepting sponsorships.
贡献者 | 赞助商链接 | 软件包 |
---|---|---|
10xLaCroixDrinker | ❤️ sponsor | fastify-cli |
Bram-dc | fastify;fastify-swagger | |
BrianValente | fastify | |
BryanAbate | fastify-cli | |
Cadienvan | ❤️ sponsor | fastify |
Cangit | fastify | |
Cyberlane | fastify-elasticsearch | |
Eomm | ❤️ sponsor | ajv-compiler;fastify;fastify-awilix;fastify-diagnostics-channel;fastify-elasticsearch;fastify-hotwire;fastify-mongodb;fastify-nextjs;fastify-swagger-ui;under-pressure |
EstebanDalelR | ❤️ sponsor | fastify-cli |
Fdawgs | ❤️ sponsor | 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 |
Gehbt | fastify-secure-session | |
Gesma94 | fastify-routes-stats | |
H4ad | ❤️ sponsor | aws-lambda-fastify |
JohanManders | fastify-secure-session | |
LiviaMedeiros | fastify | |
Momy93 | fastify-secure-session | |
MunifTanjim | fastify-swagger-ui | |
Nanosync | fastify-secure-session | |
RafaelGSS | ❤️ sponsor | fastify;under-pressure |
Rantoledo | fastify | |
SMNBLMRR | fastify | |
SimoneDevkt | fastify-cli | |
Tony133 | fastify | |
Uzlopak | ❤️ sponsor | 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 |
Zamiell | fastify-secure-session | |
aadito123 | fastify | |
aaroncadillac | ❤️ sponsor | fastify |
aarontravass | fastify | |
acro5piano | ❤️ sponsor | fastify-secure-session |
adamward459 | fastify-cli | |
adrai | ❤️ sponsor | aws-lambda-fastify |
alenap93 | fastify | |
alexandrucancescu | fastify-nextjs | |
anthonyringoet | aws-lambda-fastify | |
arshcodemod | fastify | |
autopulated | point-of-view | |
barbieri | fastify | |
beyazit | fastify | |
big-kahuna-burger | ❤️ sponsor | fastify-cli;fastify-compress;fastify-helmet |
bilalshareef | fastify-routes | |
blue86321 | fastify-swagger-ui | |
bodinsamuel | fastify-rate-limit | |
busybox11 | ❤️ sponsor | fastify |
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 | |
dancastillo | ❤️ sponsor | fastify;fastify-basic-auth;fastify-caching;fastify-circuit-breaker;fastify-cors;fastify-helmet;fastify-passport;fastify-response-validation;fastify-routes;fastify-schedule |
danny-andrews | fastify-kafka | |
davidcralph | ❤️ sponsor | csrf-protection |
davideroffo | under-pressure | |
dhensby | fastify-cli | |
dmkng | fastify | |
domdomegg | fastify | |
faustman | fastify-cli | |
floridemai | fluent-json-schema | |
fox1t | fastify-autoload | |
giuliowaitforitdavide | fastify | |
gunters63 | fastify-reply-from | |
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 | |
ildella | under-pressure | |
james-kaguru | fastify | |
jcbain | fastify-http-proxy | |
jdhollander | fastify-swagger-ui | |
jean-michelet | fastify;fastify-autoload;fastify-cli;fastify-mysql;fastify-sensible | |
johaven | fastify-multipart | |
jordanebelanger | fastify-plugin | |
jscheffner | fastify | |
jsprw | fastify-secure-session | |
jsumners | ❤️ sponsor | 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 |
karankraina | under-pressure | |
kerolloz | ❤️ sponsor | fastify-jwt |
kibertoad | fastify-rate-limit | |
kukidon-dev | fastify-passport | |
kunal097 | fastify | |
lamweili | fastify-sensible | |
lemonclown | fastify-mongodb | |
liuhanqu | fastify | |
matthyk | fastify-plugin | |
mch-dsk | fastify | |
mcollina | ❤️ sponsor | 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 |
melroy89 | ❤️ sponsor | under-pressure |
metcoder95 | ❤️ sponsor | fastify-elasticsearch |
mhamann | fastify-cli | |
mihaur | fastify-elasticsearch | |
mikesamm | fastify | |
mikhael-abdallah | secure-json-parse | |
miquelfire | ❤️ sponsor | fastify-routes |
miraries | fastify-swagger-ui | |
mohab-sameh | fastify | |
monish001 | fastify | |
moradebianchetti81 | fastify | |
mouhannad-sh | aws-lambda-fastify | |
multivoltage | point-of-view | |
muya | ❤️ sponsor | under-pressure |
mweberxyz | point-of-view | |
nflaig | fastify | |
nickfla1 | avvio | |
o-az | process-warning | |
ojeytonwilliams | csrf-protection | |
onosendi | fastify-formbody | |
philippviereck | fastify | |
pip77 | fastify-mongodb | |
puskin94 | fastify | |
remidewitte | fastify | |
rozzilla | fastify | |
samialdury | fastify-cli | |
sknetl | fastify-cors | |
sourcecodeit | fastify | |
synapse | env-schema | |
timursaurus | secure-json-parse | |
tlhunter | fastify | |
tlund101 | fastify-rate-limit | |
ttshivers | fastify-http-proxy | |
voxpelli | ❤️ sponsor | fastify |
weixinwu | fastify-cli | |
zetaraku | fastify-cli |