mrkeyoor.com_
Tue 01 Sept 17:20 UTC
Webevaluationupdated 31 Aug 2026

fastify review

Fastify is a Node.js framework for HTTP APIs and web servers. It gives applications routing, request and response hooks, JSON Schema validation and serialization, logging, and a plugin system while keeping the core smaller than a full application framework.

+6 / 1dstars / 7d
Verdict

Our Fastify run installed 609 packages, reported 0 known vulnerabilities, and still ended its test step with exit 1 after 85 seconds. Stable Fastify 5 remains an easy recommendation for Node API teams that value schemas, logging, and plugin isolation, but use the 5.x branch instead of treating the 6.0.0-alpha.2 main branch as production-ready. Contributors should reproduce the unnamed test failure before trusting this exact checkout.

We ran it

Lab card: what happened when we ran fastifyScreenshot of fastify (www.fastify.dev)
Install✓ · 66s609 packages · 195 MB
Buildn/ano build script
Tests✗ · 85sran, no count parsed
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo394 files~77,799 lines of source · 2.9 MB · 20 CI workflows · tests dir

Answers from our run

Does fastify build from source?

Dependencies installed in 66 seconds (609 packages), and the project has no separate build step. We cloned commit 4cdb0c5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do fastify's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does fastify have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use fastify?

Teams that want the default branch to be the current stable release: main identifies itself as Fastify 6 and its package is 6.0.0-alpha.2, while stable 5.x lives on another branch.

What are the alternatives to fastify?

Express, Koa, hapi. Our Fastify run installed 609 packages, reported 0 known vulnerabilities, and still ended its test step with exit 1 after 85 seconds.

Setup4/566-second install and no build, but the full test command failed
Docs5/5Detailed routes, hooks, schemas, plugins, testing, and LTS guides
Community5/537,067 stars with code and issue activity on August 31
Maturity5/5Ten-year project with active v5 security releases and defined LTS

Discussed on

  1. hnShow HN: Fastify DX, a full stack framework based on Fastify and Vite47 points
  2. hnBuild a Fast REST API with Node.js and Fastify8 points
  3. hnFastify v5 is Now Officially Released7 points
  4. hnShow HN: Fastify-zod, type-once, run everywhere (TypeScript/OpenAPI)7 points
  5. hnFastify is 7x Faster than Next.js7 points

Who it’s for

Node.js teams building JSON APIs that want schema validation and serialization close to each route.
Services that need structured Pino logging without assembling a logger integration first.
Larger applications that can use plugin encapsulation to keep hooks and decorators scoped.
Teams willing to test their own workload instead of treating a framework's synthetic benchmark as an application forecast.

Who it’s NOT for

Teams that want the default branch to be the current stable release: main identifies itself as Fastify 6 and its package is 6.0.0-alpha.2, while stable 5.x lives on another branch.
Applications pinned to old Node.js lines: the support table lists Node 20, 22, 24, and 26 for Fastify 5, with older major lines out of support.
Developers who expect Express-style middleware to map directly onto every route: Fastify's plugins create encapsulated scopes for hooks and decorators.
Teams that need an ORM, authentication policy, or application structure in the core package: Fastify supplies the HTTP framework and leaves those jobs to plugins or application code.
Contributors who require a clean full-suite result in the stated Node 22 sandbox: our test command exited 1 after 85 seconds, and the captured tail did not identify the failing case.

Setup reality

Our sandbox installed 609 npm packages in 66 seconds and used 195 MB. The repository had no build script, so that step was skipped. Tests exited 1 after 85 seconds. Npm audit found 0 known vulnerabilities at every listed severity. The checkout contained 394 files, about 77,799 source lines, 20 CI workflows, and a tests directory.

A basic app needs Node.js and no Fastify account or hosted credential. Database, authentication, caching, and observability settings depend on the plugins you choose. The server binds to localhost by default; containers commonly need an explicit 0.0.0.0 address and a deliberate exposure policy.

The tested commit is on main, which currently carries 6.0.0-alpha.2 rather than stable v5. The failing log tail showed passing stream, IPv6, Pino, error-code, and WebDAV cases, then only failing tests:. It did not name the failure, so we cannot assign a cause from that output.

Fastify 5 is stable while main contains 6.0.0-alpha.2

Fastify v5.12.1 is the latest stable release, while the main branch identifies itself as the coming v6 line and its package manifest says 6.0.0-alpha.2. That distinction matters when copying examples or evaluating source. The README sends production users to the 5.x branch. Stable Fastify gives Node applications an HTTP server, routing, hooks, validation, serialization, and logging without imposing a controller or dependency-injection structure on the rest of the codebase.

Our measured checkout at commit 4cdb0c5 came from main and contained 394 files, roughly 77,799 source lines, and 2.9 MB before installation. It is a sizable, focused framework rather than an application generator. Both CommonJS and ESM usage appear in the README. A basic server can register one route and listen with little ceremony, while larger systems can split their behavior into plugins and nested contexts.

Fastify 5 scopes hooks and decorators through plugins

Fastify 5 treats almost everything below the root instance as a plugin. A registered child receives the decorators, hooks, and plugins of its parents, while parents do not automatically see items created inside that child. This encapsulation lets one route group carry authentication or request decoration without leaking it across the server. Wrapping a plugin with fastify-plugin can deliberately share its additions upward when isolation is not wanted.

That model is the main conceptual cost behind a project whose repository had no build target in our run. Express users may initially expect registration to behave like one global middleware chain. In Fastify, registration order, plugin completion, and scope decide what a route can access. The documentation explains the tree with working route examples, but a team should settle a plugin layout early or it may spend time debugging missing decorators that are behaving exactly as designed.

What happened when we ran it

Our sandbox installed 609 npm packages in 66 seconds, leaving 195 MB on disk. The repository defines no general build script or target, so the lab skipped that step rather than pretending a compile occurred. Npm audit reported 0 known vulnerabilities: 0 critical, 0 high, 0 moderate, and 0 low. The checkout also included 20 CI workflow files and a dedicated tests directory.

The test command failed with exit code 1 after 85 seconds. Its captured tail showed passing cases for a stream-generated 404, hostname and port handling, an IPv6 port, Pino stream options, exposure of 95 error definitions, and several WebDAV methods without a content type. It then printed failing tests: without a test name or diagnostic. The log proves the suite failed; it does not show which case failed or why.

A 195 MB contributor install is separate from app setup

Installing Fastify into an application is the familiar npm i fastify, followed by route registration and a call to listen. Core Fastify does not require an account, API key, database, or control plane. The repository's 609-package, 195 MB footprint describes contributor tooling and tests around the framework, not the dependency cost of a new production app. Each official or community plugin can bring its own packages and configuration, so evaluate the actual service lockfile.

Networking has one useful safe default. Fastify listens on localhost unless told otherwise. A container generally needs host: '0.0.0.0', which makes interface exposure an application decision rather than an invisible framework choice. Logging uses Pino, and JSON Schema can validate input and compile response serializers. Those mechanisms are optional, but teams skipping schemas give up much of what separates Fastify from a thinner middleware server.

Version 5 supports current Node LTS lines

The support table lists Node 20, 22, 24, and 26 for Fastify 5. Fastify 6 is listed for Node 24 and 26, with its release date still unset. Major versions receive at least 6 months of support, then security updates for another 6 months after the next major arrives. Versions 3 and older are end of life; commercial extended support is available separately for unsupported lines.

A clean audit with 0 known vulnerabilities does not remove the need to follow releases. Version 5.12.1, published August 18, 2026, is explicitly a security release and fixes 2 advisories alongside route and lifecycle corrections. Fastify also warns that a security fix can require a breaking change in a minor release. Pinning a tilde range can avoid that change, but the LTS guide says doing so can leave the application exposed.

One hundred forty-nine open items accompany daily activity

GitHub showed 37,067 stars and 149 combined issues and pull requests when fetched. The last push was August 31, 2026, and several issue and pull-request threads were updated that day. That is strong evidence of current maintenance, while the combined count should not be read as 149 bugs. The repository dates to September 2016, has a named maintainer team, and routes support questions to a separate help repository.

Fastify's 20 CI workflow files and long support record make the single failed 85-second sandbox test notable rather than a reason to dismiss the framework. For production, choose stable v5, use schemas where they improve correctness, and benchmark the application you will ship. For work on main, first reproduce the unnamed failure and account for the 6.0.0-alpha.2 API surface before proposing a change.

Alternatives

ProjectWhat it isPick it when
ExpressA smaller, widely recognized Node.js web framework built around middleware.pick this instead when team familiarity and a simple middleware model matter more than Fastify's schemas and scoped plugins.
KoaA compact async middleware foundation from the team behind Express.pick this instead when you want to assemble the stack yourself around a minimal request context.
hapiA configuration-led Node.js server framework with an established plugin model.pick this instead when declarative server configuration suits the team better than Fastify's route and hook APIs.
NestJS gh↗An opinionated TypeScript application framework that can run on Fastify or Express.pick this instead when dependency injection and an application-wide architecture are requirements.

What people are saying

  1. [github-trending] fastify/fastify

Sources

  1. Fastify README
  2. Fastify repository metadata
  3. Fastify v5.12.1 release notes
  4. Fastify long-term support policy
  5. Fastify encapsulation reference
  6. Fastify package manifest

More web reviews

axios · super-productivity · Graphite · tabler · go-zero · ruffle · the whole board →