Skip to content

Fastify V4->V5 Upgrade #12046

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Fastify V4->V5 Upgrade #12046

wants to merge 2 commits into from

Conversation

ladderschool
Copy link

V4 of Fastify is approaching end of life by 6/30/25. This PR seeks to upgrade the relevant packages.
Fastify V5 also requires node>=20 now.

Migration docs:
https://fastify.dev/docs/latest/Guides/Migration-Guide-V5/

Luckily many changes were already deprecated from V3->V4 and I have found no issues running V5 in my production app. The only breaking change is how Fastify handles the logger, which this PR addresses, specifically in the createServerHelpers.ts file.

// v5
const loggerInstance = require('pino')();
const fastify = require('fastify')({
  loggerInstance
});

I have a test repository that I used to confirm these updates in this PR from:
https://github.com/ladderschool/fastify-v5-test

Local build succeeded: https://cloud.nx.app/runs/saVKz8Qhgn
Local tests succeeded: https://cloud.nx.app/runs/5SujFvDgYM

I did notice though that I had to change the imports to:

import Fastify from 'fastify/fastify'

Could be a module resolution issue in tsconfig that I have? The Fastify docs don't mention anything in regards to that, though.

Tobbe added a commit to cedarjs/cedar that referenced this pull request Jun 7, 2025
Huge shoutout to @ladderschool who originally created this PR over at
the RedwoodGQL repo: redwoodjs/graphql#12046

V4 of Fastify is approaching end of life by 6/30/25. This PR seeks to
upgrade the relevant packages.
Fastify V5 also requires node >=20 now.

Migration docs:
https://fastify.dev/docs/latest/Guides/Migration-Guide-V5/

Luckily many changes were already deprecated from V3->V4 and I have
found no issues running V5 in my production app. The only breaking
change is how Fastify handles the logger, which this PR addresses,
specifically in the
[createServerHelpers.ts](https://github.com/redwoodjs/graphql/compare/main...ladderschool:redwood:main?expand=1#diff-2f9b7c2c7a03d2b1aca7d841ce3365a524a92b7bee07c5177272f1dbf1395d84)
file.

```js
// v5
const loggerInstance = require('pino')()
const fastify = require('fastify')({
  loggerInstance
})
```

There's a test repository that @ladderschool used to confirm these
updates in this PR from:
https://github.com/ladderschool/fastify-v5-test

Local build succeeded: https://cloud.nx.app/runs/saVKz8Qhgn
Local tests succeeded: https://cloud.nx.app/runs/5SujFvDgYM

---------

Co-authored-by: ladderschool <[email protected]>
@ladderschool ladderschool marked this pull request as ready for review June 7, 2025 19:56
@ladderschool
Copy link
Author

I think @Tobbe's implementation in CedarJS is probably more type safe and easier to maintain down the line:

function isCustomLoggerInstance(
  logger: FastifyServerOptions['logger'] | FastifyServerOptions['loggerInstance'],
): logger is FastifyServerOptions['loggerInstance'] {
  return !!logger && typeof logger === 'object' && 'info' in logger;
}

const logger = options.logger ?? defaults.logger;

const resolvedOptions: ResolvedOptions = {
  apiRootPath: options.apiRootPath ?? defaults.apiRootPath,
  fastifyServerOptions: options.fastifyServerOptions ?? {
    requestTimeout: defaults.fastifyServerOptions.requestTimeout,
    logger: options.logger ?? defaults.logger,
    bodyLimit: defaults.fastifyServerOptions.bodyLimit,
  },
};

if (isCustomLoggerInstance(logger)) {
  resolvedOptions.fastifyServerOptions.loggerInstance = logger;
} else {
  resolvedOptions.fastifyServerOptions.logger = logger;
}

Tobbe added a commit to cedarjs/cedar that referenced this pull request Jun 8, 2025
Huge shoutout to @ladderschool who originally created this PR over at
the RedwoodGQL repo: redwoodjs/graphql#12046

V4 of Fastify is approaching end of life by 6/30/25. This PR seeks to
upgrade the relevant packages.
Fastify V5 also requires node >=20 now.

Migration docs:
https://fastify.dev/docs/latest/Guides/Migration-Guide-V5/

Luckily many changes were already deprecated from V3->V4 and I have
found no issues running V5 in my production app. The only breaking
change is how Fastify handles the logger, which this PR addresses,
specifically in the
[createServerHelpers.ts](https://github.com/redwoodjs/graphql/compare/main...ladderschool:redwood:main?expand=1#diff-2f9b7c2c7a03d2b1aca7d841ce3365a524a92b7bee07c5177272f1dbf1395d84)
file.

```js
// v5
const loggerInstance = require('pino')()
const fastify = require('fastify')({
  loggerInstance
})
```

There's a test repository that @ladderschool used to confirm these
updates in this PR from:
https://github.com/ladderschool/fastify-v5-test

Local build succeeded: https://cloud.nx.app/runs/saVKz8Qhgn
Local tests succeeded: https://cloud.nx.app/runs/5SujFvDgYM

---------

Co-authored-by: ladderschool <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant