Redwood v8.0.0 Upgrade Guide

Before we get started, just in case you missed them, here are quick links to the announcement post and Changelog:

Changelog

Highlights & Upgrading

Our highlights and upgrade guide are available at:
https://redwoodjs.com/upgrade/v8

9 Likes

Pretty smooth, nothing major that broke for me (except for trusted documents not properly working but I opened a thread on discord for that). The only other thing I see when I run yarn install is:

āž¤ YN0060: ā”‚ @redwoodjs/graphql-server is listed by your project with version 8.0.0-rc.1130 (p3b88c), which doesn't satisfy what @redwoodjs/api-server requests (but they have non-overlapping ranges!).

Great job guys!

Hereā€™s my graphql-server package.json

{
  "name": "@redwoodjs/graphql-server",
  "version": "8.0.0-rc.1130+86e6952ee",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/redwoodjs/redwood.git",
    "directory": "packages/graphql-server"
  },
  "license": "MIT",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts",
  "files": [
    "dist"
  ],
  "scripts": {
    "build": "tsx ./build.mts && yarn build:types",
    "build:pack": "yarn pack -o redwoodjs-graphql-server.tgz",
    "build:types": "tsc --build --verbose",
    "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build\"",
    "prepublishOnly": "NODE_ENV=production yarn build",
    "test": "jest src",
    "test:watch": "yarn test --watch"
  },
  "dependencies": {
    "@babel/runtime-corejs3": "7.24.8",
    "@envelop/core": "5.0.1",
    "@envelop/depth-limit": "4.0.0",
    "@envelop/disable-introspection": "6.0.0",
    "@envelop/filter-operation-type": "6.0.0",
    "@envelop/on-resolve": "4.1.0",
    "@escape.tech/graphql-armor": "3.0.1",
    "@graphql-tools/merge": "9.0.4",
    "@graphql-tools/schema": "10.0.4",
    "@graphql-tools/utils": "10.3.2",
    "@graphql-yoga/plugin-persisted-operations": "3.6.2",
    "@opentelemetry/api": "1.8.0",
    "@redwoodjs/api": "8.0.0-rc.1130+86e6952ee",
    "@redwoodjs/context": "8.0.0-rc.1130+86e6952ee",
    "core-js": "3.37.1",
    "graphql": "16.9.0",
    "graphql-scalars": "1.23.0",
    "graphql-tag": "2.12.6",
    "graphql-yoga": "5.6.2",
    "lodash": "4.17.21",
    "uuid": "10.0.0"
  },
  "devDependencies": {
    "@babel/cli": "7.24.8",
    "@babel/core": "^7.22.20",
    "@envelop/testing": "7.0.0",
    "@envelop/types": "5.0.0",
    "@redwoodjs/project-config": "8.0.0-rc.1130+86e6952ee",
    "@redwoodjs/realtime": "8.0.0-rc.1130+86e6952ee",
    "@types/aws-lambda": "8.10.142",
    "@types/jsonwebtoken": "9.0.6",
    "@types/lodash": "4.17.7",
    "@types/uuid": "10.0.0",
    "@whatwg-node/fetch": "0.9.19",
    "jest": "29.7.0",
    "jsonwebtoken": "9.0.2",
    "tsx": "4.16.2",
    "typescript": "5.5.4"
  },
  "gitHead": "86e6952eed228305717382363ddf59aae0b31daz"
}

Hereā€™s my api-server package.json

{
  "name": "@redwoodjs/api-server",
  "version": "8.0.0-rc.1130+86e6952ee",
  "description": "Redwood's HTTP server for Serverless Functions",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/redwoodjs/redwood.git",
    "directory": "packages/api-server"
  },
  "license": "MIT",
  "main": "./dist/createServer.js",
  "types": "./dist/createServer.d.ts",
  "bin": {
    "rw-api-server-watch": "./dist/watch.js",
    "rw-log-formatter": "./dist/logFormatter/bin.js",
    "rw-server": "./dist/bin.js"
  },
  "files": [
    "dist"
  ],
  "scripts": {
    "build": "tsx ./build.mts && yarn build:types",
    "build:pack": "yarn pack -o redwoodjs-api-server.tgz",
    "build:types": "tsc --build --verbose tsconfig.build.json",
    "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx\" --ignore dist --exec \"yarn build && yarn fix:permissions\"",
    "fix:permissions": "chmod +x dist/index.js; chmod +x dist/watch.js",
    "prepublishOnly": "NODE_ENV=production yarn build",
    "test": "vitest run",
    "test:watch": "vitest watch"
  },
  "dependencies": {
    "@fastify/url-data": "5.4.0",
    "@redwoodjs/context": "8.0.0-rc.1130+86e6952ee",
    "@redwoodjs/fastify-web": "8.0.0-rc.1130+86e6952ee",
    "@redwoodjs/project-config": "8.0.0-rc.1130+86e6952ee",
    "@redwoodjs/web-server": "8.0.0-rc.1130+86e6952ee",
    "chalk": "4.1.2",
    "chokidar": "3.6.0",
    "dotenv-defaults": "5.0.2",
    "fast-glob": "3.3.2",
    "fast-json-parse": "1.0.3",
    "fastify": "4.28.1",
    "fastify-raw-body": "4.3.0",
    "lodash": "4.17.21",
    "pretty-bytes": "5.6.0",
    "pretty-ms": "7.0.1",
    "qs": "6.12.3",
    "split2": "4.2.0",
    "yargs": "17.7.2"
  },
  "devDependencies": {
    "@redwoodjs/framework-tools": "7.0.0",
    "@types/aws-lambda": "8.10.142",
    "@types/lodash": "4.17.7",
    "@types/qs": "6.9.15",
    "@types/split2": "4.2.3",
    "@types/yargs": "17.0.32",
    "pino-abstract-transport": "1.2.0",
    "tsx": "4.16.2",
    "typescript": "5.5.4",
    "vitest": "2.0.4"
  },
  "peerDependencies": {
    "@redwoodjs/graphql-server": "workspace:*"
  },
  "peerDependenciesMeta": {
    "@redwoodjs/graphql-server": {
      "optional": true
    }
  },
  "gitHead": "86e6952eed228305717382363ddf59aae0b31daz"
}

Thank you @Tobbe for this detailed upgrade guide!


Does this mean storybook with webpack is no longer supported too?

I got this error when running yarn rw storybook :

Error: Cannot find module '@redwoodjs/testing/config/storybook/main.js'

The command still installs and runs the webpack version of storybook and does not have RC package version.


We also have an unlisted breaking change with the type of ApolloError, nothing major, mostly misused of Apollo Client error on our part that is now explicit in type.


Something seems to have changed with the default behavior of context.currentUser that is now undefined on jest API unit test, I will dig more on my side about this one.


Otherwise, everything seems to run properly on local dev! :rocket:

Thanks for the feedback! I havenā€™t looked into the discord thread but I hope things moved forward with that?

The workspace:* is a problem on our side that Iā€™ll address and get an updated rc out. Thanks!

Thanks @simoncrypta! I was going to reach out to you so awesome youā€™ve started exploring the upgrade.

  1. Webpack
    Yeah we no longer support the webpack version of storybook. The reason your CLI is still picking up the old on is because of the commandCache.json in the .redwood directory. I hope that if you try deleting that file and then running the command again that it will use the new vite version of storybook.
    Iā€™m going to release a patch for v7 that will make that happen automatically during the rw upgrade command.

  2. ApolloError
    Interesting. Is there information you think we should add to this upgrade guide? I hadnā€™t noticed a type change but itā€™s easy for things to split by with this major.

  3. currentUser
    Hmm interesting. Iā€™d be happy to look into this with you since I donā€™t think we wanted to introduce a change here.

1 Like

Thanks Josh, I was wondering if the workspace:* was causing that issue. Hadnā€™t seen that before.

Honestly everything runs smoothly (considering I run sockets, tus, zenstack, etc. Iā€™m surprised nothing broke honestly), I had some issues with fragments/trusted documents but I opened a thread here on the forum to condense my ā€œissueā€. I donā€™t think itā€™s an actual issue but rather a misunderstanding on my part on how to make fragments work seamlessly but thank you for checking in! :slight_smile:

1 Like

Sometimes yarn will break and not know how to handle it when we publish packages that include workspace:*. We handle doing that in our release process for stable releases but looks like our script that releases release candidates doesnā€™t.

Iā€™ve seen your posts here about your tech stack and really need to find the time to dive into what youā€™ve experienced because it sounds awesome! Weā€™re in the process of building our own deployment platform to make deploying redwood apps truly effortless. Sounds like weā€™ll be playing catch-up to match your feature set. Itā€™s awesome youā€™re building with redwood!

For Apollo Client, you mentioned that the Apollo PR make a small breaking change on type :yum: :

I donā€™t know whatā€™s the impact exactly, but itā€™s nothing really new since the type was wrong at first, so any error we had was a misused of graphQLErrors like transforming the message on the client. For what I know, the change that has impact on us is error.message is now read-only and error.name doesnā€™t exist anymore.

For currentUser, it seems like the upgrade command forgot some rw packages, I donā€™t remember which one, but now everything works correctly.

Thank you @Josh-Walker-GM !

1 Like

Currently, our only blocker to be able to run RW v8 is the storybook-vite upgrade :

1 Like

Haha, it turns out I was the culprit all along! Thanks for the additional information. Iā€™ll probably update the guide in the main post to call out the fix in the types.

1 Like

Replied to you there! :slight_smile:

Just an FYI that this command:

yarn rw upgrade -t rc put me onto v7.74.rc.0

I ran:

yarn rw upgrade -t canary to get onto v8, but that may not be what you want

1 Like

Ah thanks for pointing that out. Should be fixed now.

Hi, Iā€™m using Canary. Canary is completely separate from these v# updates, correct? I tried implementing these upgrades and it actually broke my code. I did a git reset --hard command to undo the updates I made per this v8 upgrade guide and my code is working as expected now.

Hi. Canary is ā€œbleeding edgeā€ latest and not a proper release. It has the very most current updates to the main branch as PRs for features roll in.

Iā€™d stick to either the release v8 packages or 7.x if building and not looking to try out the latest features.

1 Like

Thank you, @dthyresson! That clears things up for me.

I tried giving v8 a spin and just spun up a new project. Do these commands not yet work?

yarn rw setup exp-streaming-ssr
yarn rw setup exp-rsc

I know the old commands were:
yarn rw experimental setup-streaming-ssr -f
yarn rw experimental setup-rsc

But the blog guide had these news ones here: https://redwoodjs.com/upgrade/v8

Do the old commands behave the same way if I use those on a v8 project?
I just made a new project via:

yarn create redwood-app Version8Test --typescript
yarn cd Version8Test
yarn install
yarn rw dev

and then the new commands were not found with suggestions for things like setup graphql or setup docker

One thing that is weird too is when i try to confirm RW versions via cli:

yarn rw --version

i get an ā€œunknownā€, but in package.json do see it installed v8.0.0. When I roll back to 7.7.4 I do see the version with that command.

Excited to try RSC and SSR!

1 Like

Hello - trying to upgrade to v8 from latest v7

One of the issue I am seeing is navigate() or <Link> require to be run twice to actually navigate to the page. I see the url updating in the bar, but somehow, no navigation happens. I can see I have 2 active RWHISTORY_LISTENER_ID (if that matters), and I am not using blockers. Any idea ?

Thanks!