---
title: "Fastify v5.9.0 ergänzt `request.mediaType` und `onMaxParamLength`, härtet das Vertrauen in `forwarded`-Header, chunkiert große HTTP/2-Antworten und migriert die Typ-Tests zu TSTyche"
description: "Fastify v5.9.0, veröffentlicht am 2026-06-28 (github.com/fastify/fastify), ist die erste Minor-Version der v5-Linie im Jahr 2026 und ein substanzieller 65-PR-Zyklus. Die Hauptfunktionen sind `request.mediaType` (ein typisierter Accessor für den ausgehandelten Medientyp, [#6653](https://github.com/fastify/fastify/pull/6653) von climba03003), die Routen-Option `onMaxParamLength` ([#6716](https://github.com/fastify/fastify/pull/6716) von climba03003) und ein Sicherheitsfix, das `X-Forwarded-Host` und `X-Forwarded-Proto` nicht mehr vertraut, wenn der eingehende Socket fehlt ([#6684](https://github.com/fastify/fastify/pull/6684) von mcollina). Der Zyklus liefert einen HTTP/2-Buffer-Chunking-Fix für große Antworten ([#6746](https://github.com/fastify/fastify/pull/6746) von mcollina), drei schema-bezogene Performance-Gewinne (verzögertes `getSchemaSerializer`-Content-Type-Parsing #6692, gecachte `ContentType`-Objekte im `ContentTypeParser` #6694, `typeof`-Wache vor `toString.call` in `send` / `onSendEnd` #6693 von aquie00t), Node.js 26 zur Test-Matrix hinzugefügt ([#6728](https://github.com/fastify/fastify/pull/6728) von Fdawgs) und Node.js 20 aus der yarn-CI-Matrix entfernt ([#6662](https://github.com/fastify/fastify/pull/6662) von Tony133), die Migration der Typ-Test-Suite von handgeschriebenen `expect-type`-Assertions zu [TSTyche](https://github.com/mrazauskas/tstyche) ([#6532](https://github.com/fastify/fastify/pull/6532) von mrazauskas, mit Folge-PRs #6726 und #6727), und ein TypeScript-only fastify-plugin v6.0.0-Bump. Weitere bemerkenswerte Fixes: Trailer-`res.end`-Deduplizierung (#6676), Trailer-Duplikat-Completion-Wache (#6714), `error.code` auf Routing-Fehlern (#6678), `hasRequestDecorator` / `hasReplyDecorator` erkennen konstruktor-zugewiesene Built-in-Eigenschaften (#6753), `getValidationFunction()` darf `undefined` zurückgeben (#6665), und ein Socket-`_meta`-Clear, der ein Keep-Alive-Leck schließt (#6799)."
date: 2026-07-01
image: "/images/heroes/2026-07-01--fastify-v5-9-0-security-perf-http2-buffer-chunking.png"
author: lschvn
tags: ["runtimes", "security"]
tldr:
  - "[Fastify v5.9.0](https://github.com/fastify/fastify/releases/tag/v5.9.0), veröffentlicht am 2026-06-28, ist die erste Minor-Version der v5-Linie im Jahr 2026. Die beiden neuen öffentlichen APIs sind `request.mediaType` ([#6653](https://github.com/fastify/fastify/pull/6653)), ein typisierter Accessor, der den aus dem `Accept`-Header ausgehandelten Medientyp zurückgibt (oder `undefined`, falls keiner ausgehandelt wurde), und die Routen-Option `onMaxParamLength` ([#6716](https://github.com/fastify/fastify/pull/6716)), die es einem Routen-Hook ermöglicht, URLs zu behandeln, deren einzelner Parameter das konfigurierte `maxParamLength` überschreitet, anstatt synchron eine `FST_ERR_VALIDATION` zu werfen. Beide sind additiv: keine Breaking Changes an der öffentlichen Oberfläche, und die v5-Linie bleibt im `0.x` des Semver-Patch."
  - "Der Zyklus liefert einen Sicherheitsfix, der eine Request-Spoofing-Lücke schließt: [#6684](https://github.com/fastify/fastify/pull/6684) (mcollina) weigert sich, den `X-Forwarded-Host`- und `X-Forwarded-Proto`-Headern zu vertrauen, wenn der eingehende Socket der Anfrage fehlt (zum Beispiel hinter einem Transport, der die Quellverbindung entfernt), und zwingt die Route, stattdessen auf das rohe `request.host` zurückzufallen. Derselbe Fix markiert die `request`-Metadaten-Accessoren als `untrusted input` in der TypeScript-Deklarationsdatei ([#6572](https://github.com/fastify/fastify/pull/6572)). Die Version fügt auch `useContentType`-als-Schema-Schlüssel-Unterstützung hinzu, sodass die Antwort-Schema-Suche den ausgehandelten Content-Type berücksichtigt ([#6685](https://github.com/fastify/fastify/pull/6685) von UlisesGascon), sowie drei weitere kleine Härtungs-Commits rund um Routing-Fehler-Codes ([#6678](https://github.com/fastify/fastify/pull/6678)) und `checkDependencies` ([#6774](https://github.com/fastify/fastify/pull/6774))."
  - "Die Performance-Arbeit clustert sich um das Content-Type-Parsing auf dem Hot Path. [#6692](https://github.com/fastify/fastify/pull/6692) (aquie00t) verzögert das `ContentType`-Parsen innerhalb von `getSchemaSerializer`, bis das Schema tatsächlich gelesen wird, [#6694](https://github.com/fastify/fastify/pull/6694) cachet geparste `ContentType`-Objekte innerhalb des `ContentTypeParser`, und [#6693](https://github.com/fastify/fastify/pull/6693) fügt eine `typeof`-Wache vor `toString.call` in `send` und `onSendEnd` hinzu. Die Version chunkiert auch große HTTP/2-Buffer-Antworten, um den Speicher unter großen Payloads begrenzt zu halten ([#6746](https://github.com/fastify/fastify/pull/6746) von mcollina). Die Typ-Test-Suite wird von handgeschriebenen `expect-type`-Assertions zu [TSTyche](https://github.com/mrazauskas/tstyche) migriert ([#6532](https://github.com/fastify/fastify/pull/6532) von mrazauskas, plus #6726 und #6727), und Node.js 26 wird zur Test-Matrix hinzugefügt ([#6728](https://github.com/fastify/fastify/pull/6728) von Fdawgs), während Node.js 20 aus der yarn-Matrix entfernt wird ([#6662](https://github.com/fastify/fastify/pull/6662) von Tony133)."
faq:
  - question: "Was ist `request.mediaType` und warum ist es neu in v5.9.0?"
    answer: "`request.mediaType` ist ein typisierter Accessor auf der Fastify-Anfrage, der den aus dem `Accept`-Header ausgehandelten Medientyp zurückgibt, oder `undefined`, falls kein Medientyp ausgehandelt wurde. Vor v5.9.0 hat Anwendungscode `request.headers['accept']` von Hand geparst, die Q-Value-Liste durchlaufen, die beste Übereinstimmung ausgewählt und dann mit einem `Content-Type` verglichen, den die Route hoffentlich auslieferte. Der neue Accessor (hinzugefügt von [PR #6653](https://github.com/fastify/fastify/pull/6653) von climba03003) erledigt das Parsen und den Abgleich an einer Stelle. Die Implementierung lebt in `lib/request.js`, und die TypeScript-Oberfläche ist in `fastify.d.ts` exportiert. Für eine `req`, die `application/json` angefordert hat, gibt der Accessor `'application/json'` zurück; für eine `req` ohne `Accept`-Header gibt er `undefined` zurück. Der Accessor ist additiv, keine Migration für bestehende Routen nötig, die den `Accept`-Header selbst lesen, aber neuer Code soll ihn verwenden."
  - question: "Was macht die `onMaxParamLength`-Option?"
    answer: "`onMaxParamLength` ist ein Per-Routen-Hook, der ausgelöst wird, wenn ein einzelner URL-Parameter das konfigurierte `maxParamLength` überschreitet (standardmäßig 100 Zeichen). Ohne die Option wirft Fastify synchron eine `FST_ERR_VALIDATION`. Mit der Option kann die Route etwas mit der fehlerhaften Anfrage tun: eine Warnung protokollieren, eine Metrik inkrementieren, umleiten oder einen benutzerdefinierten Fehler zurückgeben. Der Hook wird von [PR #6716](https://github.com/fastify/fastify/pull/6716) (climba03003) hinzugefügt. Die Option ist eine normale Routen-Option (`{ onMaxParamLength: (req, reply, maxParamLength) => void }`), neben `preHandler`, `onRequest` und dem Rest der Lifecycle-Hooks. Die Änderung ist additiv: Routen, die die Option nicht gesetzt haben, behalten das alte Verhalten, und die Option ist standardmäßig aus."
  - question: "Was ändert der `forwarded`-Header-Vertrauensfix konkret?"
    answer: "[PR #6684](https://github.com/fastify/fastify/pull/6684) (mcollina) schließt eine Request-Spoofing-Lücke im Vertrauenspfad der Forwarded-Header. Vor dem Fix hat Fastify den `X-Forwarded-Host`- und `X-Forwarded-Proto`-Headern vertraut, auch wenn der eingehende `request.socket` fehlte oder undefiniert war (eine Situation, die hinter einem Transport auftreten kann, der die Quellverbindung entfernt, oder wenn die Anfrage aus einem geparsten Body in einem Test rekonstruiert wird). Der neue Code weigert sich, die Forwarded-Header in diesem Fall zu lesen, fällt auf das rohe `request.host` zurück und kennzeichnet die Situation als `untrusted input` in der TypeScript-Deklarationsdatei via [PR #6572](https://github.com/fastify/fastify/pull/6572) (mcollina, das die `request`-Metadaten-Accessoren `request.ip`, `request.host`, `request.protocol`, `request.ips` mit expliziten JSDoc-Warnungen versieht, dass sie nicht für Sicherheitsentscheidungen vertrauenswürdig sind). Der Fix ist für korrekt konfigurierte Proxies unsichtbar (die immer einen echten Socket an der eingehenden Anfrage haben), und die Änderung liegt auf der sicheren Seite: fehlender Socket bedeutet keinen Forwarded-Header, selbst wenn der Header in der Anfrage vorhanden ist."
  - question: "Worum geht es beim HTTP/2-Buffer-Chunking-Fix?"
    answer: "[PR #6746](https://github.com/fastify/fastify/pull/6746) (mcollina) adressiert ein Speicherproblem im HTTP/2-Antwortpfad. Vor dem Fix hat eine Route, die eine sehr große Payload zurückgab (die Art von Größe, die man bei einem Streaming-Export oder einem generierten Binär-Blob sehen würde), die gesamte Payload im Speicher gepuffert, bevor sie über die HTTP/2-Verbindung gesendet wurde. Für einen 1-GB-Export bedeutete das 1 GB residenten Speicher auf dem Server. Der Fix chunkiert den Buffer in kleinere Stücke und streamt sie, sobald die HTTP/2-Verbindung sie aufnehmen kann, sodass die Speicherkosten durch die Chunk-Größe begrenzt sind, nicht durch die Payload-Größe. Die Änderung ist für Anwendungscode unsichtbar; sie lebt im HTTP/2-Sendepfad. Routen, die kleine Payloads zurückgeben, sehen keine Änderung. Routen, die sehr große Payloads zurückgaben, halten jetzt eine begrenzte Speichermenge unabhängig von der Payload-Größe."
  - question: "Warum ist der Wechsel zu TSTyche für Typ-Tests interessant?"
    answer: "Fastify hat eine langjährige Typ-Test-Suite, die prüft, ob die öffentliche TypeScript-Oberfläche die von den Maintainern dokumentierte Form hat. Die Suite war zuvor auf handgeschriebenen `expect-type`-Assertions aufgebaut, die eine leichte Runtime-Prüfung sind. [PR #6532](https://github.com/fastify/fastify/pull/6532) (mrazauskas) migriert die Suite zu [TSTyche](https://github.com/mrazauskas/tstyche), einem zweckgebauten Typ-Test-Runner, der beim TypeScript-Compile-Schritt läuft statt zur Runtime, und der bessere Diagnosen liefert, wenn eine Assertion fehlschlägt (der Fehler verweist auf die Zeile und den erwarteten vs. tatsächlichen Typ, statt ein Runtime-`false` von `expect-type`). Die Folge-PRs [#6726](https://github.com/fastify/fastify/pull/6726) und [#6727](https://github.com/fastify/fastify/pull/6727) beenden die Migration in zwei Chargen. Die Änderung ist für Fastify-Nutzer unsichtbar; sie beschleunigt die CI der Maintainer und gibt ihnen bessere Fehlermeldungen, wenn ein Typ-Test fehlschlägt."
  - question: "Was hat sich im Dependency-Footprint von Fastify v5.9.0 geändert?"
    answer: "Die Version pinnt einen `fastify-plugin`-Bump von 5.1.0 auf 6.0.0 ([#6801](https://github.com/fastify/fastify/pull/6801)), der ein TypeScript-only-Major ist. Die Dev-Dependency `concurrently` wird auf 10.0.0 gebumpt ([#6752](https://github.com/fastify/fastify/pull/6752)), `actions/checkout` auf 7 ([#6812](https://github.com/fastify/fastify/pull/6812)), `actions/github-script` von 8 auf 9 ([#6705](https://github.com/fastify/fastify/pull/6705)), und `pnpm/action-setup` auf 6.0.4 ([#6704](https://github.com/fastify/fastify/pull/6704)). Node.js 20 wird aus der yarn-CI-Matrix entfernt ([#6662](https://github.com/fastify/fastify/pull/6662) von Tony133), und Node.js 26 wird zur Test-Matrix hinzugefügt ([#6728](https://github.com/fastify/fastify/pull/6728) von Fdawgs), was Fastifys CI auf die [Node.js 26-Linie](https://nodejs.org/en/blog/release/v26.4.0) bringt, die das Node.js-Team im Juni in Current gestellt hat."
  - question: "Ist ein Upgrade auf Fastify v5.9.0 heute sicher?"
    answer: "Ja. Die Version ist die erste Minor der v5-Linie im Jahr 2026, die öffentliche Oberfläche hat keine Breaking Changes, und der Sicherheitsfix in [PR #6684](https://github.com/fastify/fastify/pull/6684) liegt auf der sicheren Seite (er weigert sich, Forwarded-Headern zu vertrauen, wenn der Socket fehlt). Die einzigen, die innehalten sollten, sind Teams, die von einem bestimmten `forwarded`-Header-Verhalten in synthetischen Test-Setups abhängen, die eine Anfrage ohne Socket simulieren, also werden diese Tests jetzt sehen, dass `request.host` auf den rohen Header zurückfällt statt auf den Forwarded-Wert, was das korrekte Verhalten ist, aber eine Verhaltensänderung darstellt. Für alle anderen ist `npm install fastify@5.9` (oder die aktuelle Minor der Major-Version) ein Drop-in."
---

[Fastify v5.9.0](https://github.com/fastify/fastify/releases/tag/v5.9.0), veröffentlicht am 2026-06-28, ist die erste Minor-Version der Fastify-v5-Linie im Jahr 2026 und ein substanzieller 65-PR-Zyklus. Die beiden neuen öffentlichen APIs der Version sind [`request.mediaType`](https://github.com/fastify/fastify/pull/6653), ein typisierter Accessor für den ausgehandelten Medientyp, und die Routen-Option [`onMaxParamLength`](https://github.com/fastify/fastify/pull/6716), die es einem Routen-Hook ermöglicht, URLs zu behandeln, deren einzelner Parameter das konfigurierte `maxParamLength` überschreitet, anstatt synchron eine `FST_ERR_VALIDATION` zu werfen. Der Zyklus liefert auch einen Sicherheitsfix, der `X-Forwarded-Host` und `X-Forwarded-Proto` nicht mehr vertraut, wenn der eingehende Socket fehlt ([#6684](https://github.com/fastify/fastify/pull/6684) von mcollina), chunkiert große HTTP/2-Buffer-Antworten ([#6746](https://github.com/fastify/fastify/pull/6746)), migriert die Typ-Test-Suite von handgeschriebenen `expect-type`-Assertions zu [TSTyche](https://github.com/mrazauskas/tstyche) ([#6532](https://github.com/fastify/fastify/pull/6532)), und fügt Node.js 26 zur Test-Matrix hinzu, während Node.js 20 aus der yarn-Matrix entfernt wird.

Die Version ist die dritte Minor der v5-Linie in diesem Jahr. [Fastify v5.8.0](https://github.com/fastify/fastify/releases/tag/v5.8.0) wurde am 5. März 2026 veröffentlicht, und [v5.8.5](https://github.com/fastify/fastify/releases/tag/v5.8.5) war der letzte 5.8.x am 14. April 2026. v5.9.0 ist die erste seit diesem 5.8.5-Patch, die eine neue öffentliche API ausliefert.

## Die beiden neuen öffentlichen APIs

[`request.mediaType`](https://github.com/fastify/fastify/pull/6653) (climba03003) ist die Hauptfunktion. Vor v5.9.0 hat Anwendungscode, der wissen wollte, welchen Medientyp der Client angefordert hat, `request.headers['accept']` von Hand geparst, die Q-Value-Liste durchlaufen, die beste Übereinstimmung ausgewählt und dann mit einem `Content-Type` verglichen, den die Route hoffentlich auslieferte. Der neue Accessor erledigt das Parsen und den Abgleich an einer Stelle. Für eine `req`, die `application/json` angefordert hat, gibt der Accessor `'application/json'` zurück; für eine `req` ohne `Accept`-Header gibt er `undefined` zurück. Der Accessor ist additiv, und die öffentliche Oberfläche ist unverändert. Die Implementierung lebt in `lib/request.js`, und die TypeScript-Oberfläche ist in `fastify.d.ts` exportiert.

[`onMaxParamLength`](https://github.com/fastify/fastify/pull/6716) (climba03003) ist die zweite. Ohne die Option wirft Fastify synchron eine `FST_ERR_VALIDATION`, wenn ein einzelner URL-Parameter das konfigurierte `maxParamLength` überschreitet (standardmäßig 100 Zeichen). Mit der Option kann die Route etwas mit der fehlerhaften Anfrage tun: eine Warnung protokollieren, eine Metrik inkrementieren, umleiten oder einen benutzerdefinierten Fehler zurückgeben. Der Hook ist eine normale Routen-Option (`{ onMaxParamLength: (req, reply, maxParamLength) => void }`), neben `preHandler`, `onRequest` und dem Rest der Lifecycle-Hooks. Die Änderung ist additiv: Routen, die die Option nicht gesetzt haben, behalten das alte Verhalten, und die Option ist standardmäßig aus.

## Der Sicherheitsfix und die zugehörigen Arbeiten

[PR #6684](https://github.com/fastify/fastify/pull/6684) (mcollina) schließt eine Request-Spoofing-Lücke im Vertrauenspfad der Forwarded-Header. Vor dem Fix hat Fastify den `X-Forwarded-Host`- und `X-Forwarded-Proto`-Headern vertraut, auch wenn der eingehende `request.socket` fehlte oder undefiniert war (eine Situation, die hinter einem Transport auftreten kann, der die Quellverbindung entfernt, oder wenn die Anfrage aus einem geparsten Body in einem Test rekonstruiert wird). Der neue Code weigert sich, die Forwarded-Header in diesem Fall zu lesen, fällt auf das rohe `request.host` zurück und kennzeichnet die Situation als `untrusted input` in der TypeScript-Deklarationsdatei via [PR #6572](https://github.com/fastify/fastify/pull/6572) (mcollina), das die Anfrage-Metadaten-Accessoren `request.ip`, `request.host`, `request.protocol`, `request.ips` mit expliziten JSDoc-Warnungen versieht, dass sie nicht für Sicherheitsentscheidungen vertrauenswürdig sind. Der Fix ist für korrekt konfigurierte Proxies unsichtbar (die immer einen echten Socket an der eingehenden Anfrage haben), und die Änderung liegt auf der sicheren Seite: fehlender Socket bedeutet keinen Forwarded-Header, selbst wenn der Header in der Anfrage vorhanden ist.

Die Version fügt auch `useContentType`-als-Schema-Schlüssel-Unterstützung hinzu, sodass die Antwort-Schema-Suche den ausgehandelten Content-Type berücksichtigt ([#6685](https://github.com/fastify/fastify/pull/6685) von UlisesGascon), drei kleine Härtungs-Commits rund um Routing-Fehler-Codes ([#6678](https://github.com/fastify/fastify/pull/6678)) und `checkDependencies` ([#6774](https://github.com/fastify/fastify/pull/6774)), und markiert die `request`-Metadaten-Accessoren als untrusted input in der TypeScript-Deklarationsdatei ([#6572](https://github.com/fastify/fastify/pull/6572) von mcollina).

## Die Performance-Arbeit clustert sich auf dem Content-Type-Hot-Path

Drei der vier Perf-Einträge des Zyklus leben auf demselben Hot Path. [PR #6692](https://github.com/fastify/fastify/pull/6692) (aquie00t) verzögert das `ContentType`-Parsen innerhalb von `getSchemaSerializer`, bis das Schema tatsächlich gelesen wird, [#6694](https://github.com/fastify/fastify/pull/6694) (aquie00t) cachet geparste `ContentType`-Objekte innerhalb des `ContentTypeParser`, und [#6693](https://github.com/fastify/fastify/pull/6693) (aquie00t) fügt eine `typeof`-Wache vor `toString.call` in `send` und `onSendEnd` hinzu. Der vierte ist der [HTTP/2-Buffer-Chunking-Fix](https://github.com/fastify/fastify/pull/6746) (mcollina) für große Antworten: Der alte Code hat die gesamte Payload im Speicher gepuffert, bevor sie über die HTTP/2-Verbindung gesendet wurde (ein 1-GB-Export bedeutete 1 GB residenten Speicher auf dem Server); der neue Code chunkiert den Buffer in kleinere Stücke und streamt sie, sobald die HTTP/2-Verbindung sie aufnehmen kann, sodass die Speicherkosten durch die Chunk-Größe begrenzt sind, nicht durch die Payload-Größe.

Der [Vite-8.1-Artikel vom 24. Juni](/articles/2026-06-24--vite-8-1-stable-bundled-dev-mode) behandelte eine ähnliche Form von Performance-Arbeit im Dev-Server-Build-Pfad: eine kleine Änderung auf einem Hot Path, wiederholt über den Anfrage-Lebenszyklus, die sich zu einer bemerkenswerten Verbesserung summiert. Die Fastify-v5.9.0-Arbeit ist dieselbe Idee, auf einem anderen Runtime.

## Trailer, Validierung und andere Fixes

Der Zyklus liefert ein Bündel von Fixes rund um die Trailer- und Validierungspfade. [#6676](https://github.com/fastify/fastify/pull/6676) (climba03003) verhindert ein dupliziertes `res.end` in `sendTrailer`, wenn ein synchroner Callback den Trailer auslöst, und [#6714](https://github.com/fastify/fastify/pull/6714) (mcollina) ignoriert duplizierte Trailer-Completion-Ereignisse. [#6678](https://github.com/fastify/fastify/pull/6678) (mcollina) stellt den `error.code` auf Routing-Fehlern wieder her, die ihn stillschweigend fallen ließen, und [#6665](https://github.com/fastify/fastify/pull/6665) (trivikr) erlaubt `request.getValidationFunction()`, in der TypeScript-Deklaration `undefined` zurückzugeben, was dem tatsächlichen Runtime-Verhalten entspricht. [#6753](https://github.com/fastify/fastify/pull/6753) (LeSingh1) sorgt dafür, dass `hasRequestDecorator` und `hasReplyDecorator` konstruktor-zugewiesene Built-in-Eigenschaften erkennen, die zuvor übersehen wurden, was eine langjährige Lücke schließt, in der die Dekoratoren fälschlich als nicht vorhanden gemeldet wurden, wenn eine Anfrage oder Reply von einem Built-in umhüllt war.

Die Version liefert auch einen Node.js-Test-Matrix-Bump. [#6728](https://github.com/fastify/fastify/pull/6728) (Fdawgs) fügt Node.js 26 zur Test-Matrix hinzu, was sich mit der [Node.js-26.4.0-Veröffentlichung am 25. Juni](/articles/2026-06-25--node-js-26-4-current-vfs-loader-package-maps) deckt, und [#6662](https://github.com/fastify/fastify/pull/6662) (Tony133) entfernt Node.js 20 aus der yarn-CI-Matrix, was mit dem [End-of-Life-Zeitplan für Node.js 20](https://nodejs.org/en/about/previous-releases) des Node.js-Projekts konsistent ist und mit dem [Deno-2.9-Artikel vom 26. Juni](/articles/2026-06-26--deno-2-9-cold-start-supply-chain-tests), der die Runtime-Landschaft abdeckt.

## TSTyche für Typ-Tests, fastify-plugin v6.0.0

Die Migration von Fastifys Typ-Test-Suite von handgeschriebenen `expect-type`-Assertions zu [TSTyche](https://github.com/mrazauskas/tstyche) ist die interessanteste Infrastrukturänderung des Zyklus. [PR #6532](https://github.com/fastify/fastify/pull/6532) (mrazauskas) führt TSTyche ein, und [#6726](https://github.com/fastify/fastify/pull/6726) und [#6727](https://github.com/fastify/fastify/pull/6727) beenden die Migration in zwei Chargen. TSTyche ist ein zweckgebauter Typ-Test-Runner, der beim TypeScript-Compile-Schritt läuft statt zur Runtime, und der bessere Diagnosen liefert, wenn eine Assertion fehlschlägt (der Fehler verweist auf die Zeile und den erwarteten vs. tatsächlichen Typ, statt ein Runtime-`false` von `expect-type`). Die Änderung ist für Fastify-Nutzer unsichtbar; sie beschleunigt die CI der Maintainer und gibt ihnen bessere Fehlermeldungen, wenn ein Typ-Test fehlschlägt.

Die Version pinnt auch einen `fastify-plugin`-Bump von 5.1.0 auf 6.0.0 ([#6801](https://github.com/fastify/fastify/pull/6801)). `fastify-plugin` ist ein rein-typisierter Peer von Fastify; v6.0.0 ist ein Major-Versions-Bump, der einige der älteren CommonJS-Style-Codepfade entfernt und die API-Oberfläche auf die v5-Fastify-Linie ausrichtet. Der Bump liegt auf einer `dependencies`-Zeile, die Plugin-Autoren über `peerDependencies` konsumieren; Anwendungscode, der Fastify direkt verwendet, ist nicht betroffen.

## Warum das wichtig ist

Fastify v5.9.0 ist die Version, in der das Framework auf halbem Weg eines einjährigen Härtungszyklus ist. Die v5.0-Linie wurde Ende 2024 veröffentlicht, und das Projekt fügt stetig typisierte Accessoren hinzu, härtet den Vertrauenspfad der Forwarded-Header und migriert die Test-Infrastruktur zu Tools, die besser zur Codebasis passen. v5.9.0 ist die erste Version in diesem Zyklus, die sowohl eine neue öffentliche API als auch einen sicherheitsrelevanten Fix liefert, was das Muster ist, das eine Minor-Versionsnotiz wert macht.

Für Anwendungsentwickler ist die praktische Änderung klein und konkret. Die beiden neuen öffentlichen APIs sind additiv, und der Sicherheitsfix liegt auf der sicheren Seite. Die TypeScript-Oberfläche bekommt einen neuen Accessor, und die `request`-Metadaten-Accessoren sind explizit als untrusted input markiert, was die richtige Sache ist und der richtige Zeitpunkt, es zu tun. Der HTTP/2-Buffer-Chunking-Fix ist für kleine Payloads unsichtbar und signifikant für sehr große, was die Form eines Fixes ist, die für eine Route zählt, die einen generierten Binär-Blob ausliefert.

Für den breiteren Node.js-Web-Framework-Bereich reiht sich Fastify v5.9.0 neben die [Bun-Runtime-Updates](/articles/2026-04-13--bun-1-3-12-webview-browser-automation-using-await-using) und die [Deno-2.9-Versionshinweise](/articles/2026-06-26--deno-2-9-cold-start-supply-chain-tests) ein und zeigt, dass die drei großen JavaScript-Runtimes alle ihre HTTP- und Anfrage-Behandlungspfade parallel härten. Fastify ist das Gegenstück auf Framework-Ebene zu diesen Änderungen auf Runtime-Ebene.
