Spaces:
Runtime error
Runtime error
| <div align="center"> <a href="https://fastify.dev/"> | |
| <img | |
| src="https://github.com/fastify/graphics/raw/HEAD/fastify-landscape-outlined.svg" | |
| width="650" | |
| height="auto" | |
| /> | |
| </a> | |
| </div> | |
| <div align="center"> | |
| [](https://github.com/fastify/fastify/actions/workflows/ci.yml) | |
| [](https://github.com/fastify/fastify/actions/workflows/package-manager-ci.yml) | |
| [](https://github.com/fastify/fastify/actions/workflows/website.yml) | |
| [](https://github.com/neostandard/neostandard) | |
| [](https://bestpractices.coreinfrastructure.org/projects/7585) | |
| </div> | |
| <div align="center"> | |
| [](https://www.npmjs.com/package/fastify) | |
| [](https://www.npmjs.com/package/fastify) | |
| [](https://github.com/fastify/fastify/blob/main/SECURITY.md) | |
| [](https://discord.gg/fastify) | |
| [](https://gitpod.io/#https://github.com/fastify/fastify) | |
| [](https://github.com/sponsors/fastify#sponsors) | |
| </div> | |
| <br /> | |
| An efficient server implies a lower cost of the infrastructure, a better | |
| responsiveness under load and happy users. How can you efficiently handle the | |
| resources of your server, knowing that you are serving the highest number of | |
| requests as possible, without sacrificing security validations and handy | |
| development? | |
| Enter Fastify. Fastify is a web framework highly focused on providing the best | |
| developer experience with the least overhead and a powerful plugin architecture. | |
| It is inspired by Hapi and Express and as far as we know, it is one of the | |
| fastest web frameworks in town. | |
| The `main` branch refers to the Fastify `v5` release, which is not released/LTS yet. | |
| Check out the [`4.x` branch](https://github.com/fastify/fastify/tree/4.x) for `v4`. | |
| ### Table of Contents | |
| - [Quick start](#quick-start) | |
| - [Install](#install) | |
| - [Example](#example) | |
| - [Core features](#core-features) | |
| - [Benchmarks](#benchmarks) | |
| - [Documentation](#documentation) | |
| - [Ecosystem](#ecosystem) | |
| - [Support](#support) | |
| - [Team](#team) | |
| - [Hosted by](#hosted-by) | |
| - [License](#license) | |
| ### Quick start | |
| Create a folder and make it your current working directory: | |
| ```sh | |
| mkdir my-app | |
| cd my-app | |
| ``` | |
| Generate a fastify project with `npm init`: | |
| ```sh | |
| npm init fastify | |
| ``` | |
| Install dependencies: | |
| ```sh | |
| npm i | |
| ``` | |
| To start the app in dev mode: | |
| ```sh | |
| npm run dev | |
| ``` | |
| For production mode: | |
| ```sh | |
| npm start | |
| ``` | |
| Under the hood `npm init` downloads and runs [Fastify | |
| Create](https://github.com/fastify/create-fastify), which in turn uses the | |
| generate functionality of [Fastify CLI](https://github.com/fastify/fastify-cli). | |
| ### Install | |
| To install Fastify in an existing project as a dependency: | |
| ```sh | |
| npm i fastify | |
| ``` | |
| ### Example | |
| ```js | |
| // Require the framework and instantiate it | |
| // ESM | |
| import Fastify from 'fastify' | |
| const fastify = Fastify({ | |
| logger: true | |
| }) | |
| // CommonJs | |
| const fastify = require('fastify')({ | |
| logger: true | |
| }) | |
| // Declare a route | |
| fastify.get('/', (request, reply) => { | |
| reply.send({ hello: 'world' }) | |
| }) | |
| // Run the server! | |
| fastify.listen({ port: 3000 }, (err, address) => { | |
| if (err) throw err | |
| // Server is now listening on ${address} | |
| }) | |
| ``` | |
| with async-await: | |
| ```js | |
| // ESM | |
| import Fastify from 'fastify' | |
| const fastify = Fastify({ | |
| logger: true | |
| }) | |
| // CommonJs | |
| const fastify = require('fastify')({ | |
| logger: true | |
| }) | |
| fastify.get('/', async (request, reply) => { | |
| reply.type('application/json').code(200) | |
| return { hello: 'world' } | |
| }) | |
| fastify.listen({ port: 3000 }, (err, address) => { | |
| if (err) throw err | |
| // Server is now listening on ${address} | |
| }) | |
| ``` | |
| Do you want to know more? Head to the <a | |
| href="./docs/Guides/Getting-Started.md"><code><b>Getting Started</b></code></a>. | |
| > ## Note | |
| > `.listen` binds to the local host, `localhost`, interface by default | |
| > (`127.0.0.1` or `::1`, depending on the operating system configuration). If | |
| > you are running Fastify in a container (Docker, | |
| > [GCP](https://cloud.google.com/), etc.), you may need to bind to `0.0.0.0`. Be | |
| > careful when deciding to listen on all interfaces; it comes with inherent | |
| > [security | |
| > risks](https://web.archive.org/web/20170711105010/https://snyk.io/blog/mongodb-hack-and-secure-defaults/). | |
| > See [the documentation](./docs/Reference/Server.md#listen) for more | |
| > information. | |
| ### Core features | |
| - **Highly performant:** as far as we know, Fastify is one of the fastest web | |
| frameworks in town, depending on the code complexity we can serve up to 76+ | |
| thousand requests per second. | |
| - **Extensible:** Fastify is fully extensible via its hooks, plugins and | |
| decorators. | |
| - **Schema based:** even if it is not mandatory we recommend to use [JSON | |
| Schema](https://json-schema.org/) to validate your routes and serialize your | |
| outputs, internally Fastify compiles the schema in a highly performant | |
| function. | |
| - **Logging:** logs are extremely important but are costly; we chose the best | |
| logger to almost remove this cost, [Pino](https://github.com/pinojs/pino)! | |
| - **Developer friendly:** the framework is built to be very expressive and help | |
| the developer in their daily use, without sacrificing performance and | |
| security. | |
| ### Benchmarks | |
| __Machine:__ EX41S-SSD, Intel Core i7, 4Ghz, 64GB RAM, 4C/8T, SSD. | |
| __Method:__: `autocannon -c 100 -d 40 -p 10 localhost:3000` * 2, taking the | |
| second average | |
| | Framework | Version | Router? | Requests/sec | | |
| | :----------------- | :------------------------- | :----------: | ------------: | | |
| | Express | 4.17.3 | ✓ | 14,200 | | |
| | hapi | 20.2.1 | ✓ | 42,284 | | |
| | Restify | 8.6.1 | ✓ | 50,363 | | |
| | Koa | 2.13.0 | ✗ | 54,272 | | |
| | **Fastify** | **4.0.0** | **✓** | **77,193** | | |
| | - | | | | | |
| | `http.Server` | 16.14.2 | ✗ | 74,513 | | |
| Benchmarks taken using https://github.com/fastify/benchmarks. This is a | |
| synthetic, "hello world" benchmark that aims to evaluate the framework overhead. | |
| The overhead that each framework has on your application depends on your | |
| application, you should __always__ benchmark if performance matters to you. | |
| ## Documentation | |
| * [__`Getting Started`__](./docs/Guides/Getting-Started.md) | |
| * [__`Guides`__](./docs/Guides/Index.md) | |
| * [__`Server`__](./docs/Reference/Server.md) | |
| * [__`Routes`__](./docs/Reference/Routes.md) | |
| * [__`Encapsulation`__](./docs/Reference/Encapsulation.md) | |
| * [__`Logging`__](./docs/Reference/Logging.md) | |
| * [__`Middleware`__](./docs/Reference/Middleware.md) | |
| * [__`Hooks`__](./docs/Reference/Hooks.md) | |
| * [__`Decorators`__](./docs/Reference/Decorators.md) | |
| * [__`Validation and Serialization`__](./docs/Reference/Validation-and-Serialization.md) | |
| * [__`Fluent Schema`__](./docs/Guides/Fluent-Schema.md) | |
| * [__`Lifecycle`__](./docs/Reference/Lifecycle.md) | |
| * [__`Reply`__](./docs/Reference/Reply.md) | |
| * [__`Request`__](./docs/Reference/Request.md) | |
| * [__`Errors`__](./docs/Reference/Errors.md) | |
| * [__`Content Type Parser`__](./docs/Reference/ContentTypeParser.md) | |
| * [__`Plugins`__](./docs/Reference/Plugins.md) | |
| * [__`Testing`__](./docs/Guides/Testing.md) | |
| * [__`Benchmarking`__](./docs/Guides/Benchmarking.md) | |
| * [__`How to write a good plugin`__](./docs/Guides/Write-Plugin.md) | |
| * [__`Plugins Guide`__](./docs/Guides/Plugins-Guide.md) | |
| * [__`HTTP2`__](./docs/Reference/HTTP2.md) | |
| * [__`Long Term Support`__](./docs/Reference/LTS.md) | |
| * [__`TypeScript and types support`__](./docs/Reference/TypeScript.md) | |
| * [__`Serverless`__](./docs/Guides/Serverless.md) | |
| * [__`Recommendations`__](./docs/Guides/Recommendations.md) | |
| 中文文档[地址](https://github.com/fastify/docs-chinese/blob/HEAD/README.md) | |
| ## Ecosystem | |
| - [Core](./docs/Guides/Ecosystem.md#core) - Core plugins maintained by the | |
| _Fastify_ [team](#team). | |
| - [Community](./docs/Guides/Ecosystem.md#community) - Community supported | |
| plugins. | |
| - [Live Examples](https://github.com/fastify/example) - Multirepo with a broad | |
| set of real working examples. | |
| - [Discord](https://discord.gg/D3FZYPy) - Join our discord server and chat with | |
| the maintainers. | |
| ## Support | |
| Please visit [Fastify help](https://github.com/fastify/help) to view prior | |
| support issues and to ask new support questions. | |
| Version 3 of Fastify and lower are EOL and will not receive any security or bug fixes. | |
| Fastify's partner, HeroDevs, provides commercial security fixes for all | |
| unsupported versions at [https://herodevs.com/support/fastify-nes][hd-link]. | |
| Fastify's supported version matrix is available in the | |
| [Long Term Support][lts-link] documentation. | |
| ## Contributing | |
| Whether reporting bugs, discussing improvements and new ideas or writing code, | |
| we welcome contributions from anyone and everyone. Please read the [CONTRIBUTING](./CONTRIBUTING.md) | |
| guidelines before submitting pull requests. | |
| ## Team | |
| _Fastify_ is the result of the work of a great community. Team members are | |
| listed in alphabetical order. | |
| **Lead Maintainers:** | |
| * [__Matteo Collina__](https://github.com/mcollina), | |
| <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina> | |
| * [__Tomas Della Vedova__](https://github.com/delvedor), | |
| <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor> | |
| * [__KaKa Ng__](https://github.com/climba03003), | |
| <https://www.npmjs.com/~climba03003> | |
| * [__Manuel Spigolon__](https://github.com/eomm), | |
| <https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm> | |
| * [__James Sumners__](https://github.com/jsumners), | |
| <https://twitter.com/jsumners79>, <https://www.npmjs.com/~jsumners> | |
| ### Fastify Core team | |
| * [__Aras Abbasi__](https://github.com/uzlopak), | |
| <https://www.npmjs.com/~uzlopak> | |
| * [__Harry Brundage__](https://github.com/airhorns/), | |
| <https://twitter.com/harrybrundage>, <https://www.npmjs.com/~airhorns> | |
| * [__Matteo Collina__](https://github.com/mcollina), | |
| <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina> | |
| * [__Gürgün Dayıoğlu__](https://github.com/gurgunday), | |
| <https://www.npmjs.com/~gurgunday> | |
| * [__Tomas Della Vedova__](https://github.com/delvedor), | |
| <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor> | |
| * [__Carlos Fuentes__](https://github.com/metcoder95), | |
| <https://twitter.com/metcoder95>, <https://www.npmjs.com/~metcoder95> | |
| * [__Vincent Le Goff__](https://github.com/zekth) | |
| * [__Luciano Mammino__](https://github.com/lmammino), | |
| <https://twitter.com/loige>, <https://www.npmjs.com/~lmammino> | |
| * [__KaKa Ng__](https://github.com/climba03003), | |
| <https://www.npmjs.com/~climba03003> | |
| * [__Luis Orbaiceta__](https://github.com/luisorbaiceta), | |
| <https://twitter.com/luisorbai>, <https://www.npmjs.com/~luisorbaiceta> | |
| * [__Maksim Sinik__](https://github.com/fox1t), | |
| <https://twitter.com/maksimsinik>, <https://www.npmjs.com/~fox1t> | |
| * [__Manuel Spigolon__](https://github.com/eomm), | |
| <https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm> | |
| * [__James Sumners__](https://github.com/jsumners), | |
| <https://twitter.com/jsumners79>, <https://www.npmjs.com/~jsumners> | |
| ### Fastify Plugins team | |
| * [__Harry Brundage__](https://github.com/airhorns/), | |
| <https://twitter.com/harrybrundage>, <https://www.npmjs.com/~airhorns> | |
| * [__Simone Busoli__](https://github.com/simoneb), | |
| <https://twitter.com/simonebu>, <https://www.npmjs.com/~simoneb> | |
| * [__Dan Castillo__](https://github.com/dancastillo), | |
| <https://www.npmjs.com/~dancastillo> | |
| * [__Matteo Collina__](https://github.com/mcollina), | |
| <https://twitter.com/matteocollina>, <https://www.npmjs.com/~matteo.collina> | |
| * [__Gürgün Dayıoğlu__](https://github.com/gurgunday), | |
| <https://www.npmjs.com/~gurgunday> | |
| * [__Tomas Della Vedova__](https://github.com/delvedor), | |
| <https://twitter.com/delvedor>, <https://www.npmjs.com/~delvedor> | |
| * [__Carlos Fuentes__](https://github.com/metcoder95), | |
| <https://twitter.com/metcoder95>, <https://www.npmjs.com/~metcoder95> | |
| * [__Vincent Le Goff__](https://github.com/zekth) | |
| * [__Jean Michelet__](https://github.com/jean-michelet), | |
| <https://www.npmjs.com/~jean-michelet> | |
| * [__KaKa Ng__](https://github.com/climba03003), | |
| <https://www.npmjs.com/~climba03003> | |
| * [__Maksim Sinik__](https://github.com/fox1t), | |
| <https://twitter.com/maksimsinik>, <https://www.npmjs.com/~fox1t> | |
| * [__Frazer Smith__](https://github.com/Fdawgs), <https://www.npmjs.com/~fdawgs> | |
| * [__Manuel Spigolon__](https://github.com/eomm), | |
| <https://twitter.com/manueomm>, <https://www.npmjs.com/~eomm> | |
| ### Emeritus Contributors | |
| Great contributors on a specific area in the Fastify ecosystem will be invited | |
| to join this group by Lead Maintainers when they decide to step down from the | |
| active contributors group. | |
| * [__Tommaso Allevi__](https://github.com/allevo), | |
| <https://twitter.com/allevitommaso>, <https://www.npmjs.com/~allevo> | |
| * [__Ethan Arrowood__](https://github.com/Ethan-Arrowood/), | |
| <https://twitter.com/arrowoodtech>, <https://www.npmjs.com/~ethan_arrowood> | |
| * [__Çağatay Çalı__](https://github.com/cagataycali), | |
| <https://twitter.com/cagataycali>, <https://www.npmjs.com/~cagataycali> | |
| * [__David Mark Clements__](https://github.com/davidmarkclements), | |
| <https://twitter.com/davidmarkclem>, | |
| <https://www.npmjs.com/~davidmarkclements> | |
| * [__dalisoft__](https://github.com/dalisoft), <https://twitter.com/dalisoft>, | |
| <https://www.npmjs.com/~dalisoft> | |
| * [__Dustin Deus__](https://github.com/StarpTech), | |
| <https://twitter.com/dustindeus>, <https://www.npmjs.com/~starptech> | |
| * [__Denis Fäcke__](https://github.com/SerayaEryn), | |
| <https://twitter.com/serayaeryn>, <https://www.npmjs.com/~serayaeryn> | |
| * [__Rafael Gonzaga__](https://github.com/rafaelgss), | |
| <https://twitter.com/_rafaelgss>, <https://www.npmjs.com/~rafaelgss> | |
| * [__Trivikram Kamat__](https://github.com/trivikr), | |
| <https://twitter.com/trivikram>, <https://www.npmjs.com/~trivikr> | |
| * [__Ayoub El Khattabi__](https://github.com/AyoubElk), | |
| <https://twitter.com/ayoubelkh>, <https://www.npmjs.com/~ayoubelk> | |
| * [__Cemre Mengu__](https://github.com/cemremengu), | |
| <https://twitter.com/cemremengu>, <https://www.npmjs.com/~cemremengu> | |
| * [__Salman Mitha__](https://github.com/salmanm), | |
| <https://www.npmjs.com/~salmanm> | |
| * [__Nathan Woltman__](https://github.com/nwoltman), | |
| <https://twitter.com/NathanWoltman>, <https://www.npmjs.com/~nwoltman> | |
| ## Hosted by | |
| [<img | |
| src="https://github.com/openjs-foundation/artwork/blob/main/openjs_foundation/openjs_foundation-logo-horizontal-color.png?raw=true" | |
| width="250px;"/>](https://openjsf.org/projects) | |
| We are a [At-Large | |
| Project](https://github.com/openjs-foundation/cross-project-council/blob/HEAD/PROJECT_PROGRESSION.md#at-large-projects) | |
| in the [OpenJS Foundation](https://openjsf.org/). | |
| ## Sponsors | |
| Support this project by becoming a [SPONSOR](./SPONSORS.md)! | |
| Fastify has an [Open Collective](https://opencollective.com/fastify) | |
| page where we accept and manage financial contributions. | |
| ## Acknowledgements | |
| This project is kindly sponsored by: | |
| - [NearForm](https://nearform.com) | |
| - [Platformatic](https://platformatic.dev) | |
| Past Sponsors: | |
| - [LetzDoIt](https://www.letzdoitapp.com/) | |
| This list includes all companies that support one or more of the team members | |
| in the maintenance of this project. | |
| ## License | |
| Licensed under [MIT](./LICENSE). | |
| For your convenience, here is a list of all the licenses of our production | |
| dependencies: | |
| - MIT | |
| - ISC | |
| - BSD-3-Clause | |
| - BSD-2-Clause | |
| [hd-link]: https://www.herodevs.com/support/fastify-nes?utm_source=fastify&utm_medium=link&utm_campaign=github_readme | |
| [lts-link]: https://fastify.dev/docs/latest/Reference/LTS/ | |