v8.0.0
Upgrade Guide
https://redwoodjs.com/upgrade/v8
Changelog
🚨 Breaking
fix(template): Set scripts/ module resolution to match api/ (#11366) by @Tobbe
Make the module resolution for scripts/
be more predictable/stable, and match that of api/
See also #11170
fix(tsconfig): set "module" to "ESNext" for web/tsconfig.json (#11368) by @Tobbe
Please see #11368 for more detailsrefactor(forms): Build with esbuild and add conditional exports (#11338) by @Josh-Walker-GM
This change introduces restrictions on what can be imported from the @redwoodjs/forms
package. You can no longer import from @redwoodjs/forms/dist/...
. All imports should be available simply from @redwoodjs/forms
.
refactor(prerender): build with esbuild and introduce conditional exports (#11337) by @Josh-Walker-GM
This change restricts the available imports from the @redwoodjs/prerender
package. You will also have to use modern moduleResolution
settings in your tsconfig to resolve the imports correctly within TS.
refactor(api): Add conditional exports to package.json (#11307) by @Josh-Walker-GM
This change restricts the available imports from this package. You can no longer freely import from within the dist like @redwoodjs/api/dist/...
. If you were doing so please consult the @redwoodjs/api
package.json
file to see what exports are now available.
fix(internal): Move away from babel for building package (#11304) by @Josh-Walker-GM
Please see #11304 for more detailsfix: Update default tsconfig options (target, module and moduleResolution) (#11170) by @Josh-Walker-GM
This changes the default values of:
- target
- module
- moduleResolution
in the tsconfig files for both the API and web side. The benefit of this change is increased correctness for build time checking of the imports from packages which specify exports
in their package.json
files.
This change will have a limited effect while Redwood apps are still built to CJS rather than ESM. After that switch to ESM there would be more breaking changes but they are not applied here and are a future concern.
chore: brought in typescript-eslint@v8 with stylistic preset (#10911) by @JoshuaKGoldberg
This change updates Redwood linting config and introduces some changes to the linting rules that are applied to your project.
Specifically:
jsx-a11y/no-noninteractive-element-to-interactive-role
has it's default config updated.@typescript-eslint/explicit-function-return-type
used to be turned off, now it's no longer applied.@typescript-eslint/no-empty-interface
- used to be turned off, now it's no longer applied.@typescript-eslint/explicit-module-boundary-types
- used be turned off, now it's no longer applied.@typescript-eslint/ban-types
- used to be 'warn', now it's no longer applied. This has been replaces with a set of smaller more specific rules.no-empty-function
- used be turned off, now it's no longer applied. The ts-eslint flavour is still there and turned off still.camelcase
- used to be turned off, now it's 'warn'.@typescript-eslint/camelcase
- used to be turned off, now it's no longer applied.no-use-before-define
- used to be turned off, now it's no longer applied.@typescript-eslint/no-use-before-define
- used to be turned off, now it's no longer applied.@typescript-eslint/prefer-namespace-keyword
- used to be turned off, now it's 'error'unicode-bom
- used to be turned off, now it's no longer applied.@typescript-eslint/adjacent-overload-signatures
- used to be 'error', now it's no longer applied.@typescript-eslint/no-explicit-any
- used be 'warn', now 'error'@typescript-eslint/no-inferrable-types
- used to be 'error', now it's no longer applied.no-loss-of-precision
- used be 'off', now 'error'@typescript-eslint/no-loss-of-precision
- used be 'error', now it's no longer applied.@typescript-eslint/no-non-null-assertion
- used be 'warn', now it's no longer applied.valid-typeof
- used be either 'error' or 'off', now always 'error'no-unused-expressions
- used be always 'error', now either 'error' or 'off'@typescript-eslint/prefer-function-type
- newly added as 'off'@typescript-eslint/no-require-imports
- newly added as 'off'@typescript-eslint/no-empty-object-type
- newly added as 'off'unicorn/template-indent
- newly added as 'off'@typescript-eslint/no-duplicate-enum-values
- newly added as 'error'@typescript-eslint/no-unsafe-declaration-merging
- newly added as 'error'@typescript-eslint/no-unsafe-function-type
- newly added as 'error'@typescript-eslint/no-unused-expressions
- newly added as 'error'@typescript-eslint/no-wrapper-object-types
- newly added as 'error'no-new-native-nonconstructor
- newly added as 'off'
fix(deps): update typescript-eslint monorepo to v8 (major) (#11235) by @Josh-Walker-GM
Please see #11235 for more detailsfix(api-server): Use createServer in all cases, to make fastify config consistent (#11176) by @dac09
[BREAKING] Removes serverConfig support, in favour of server file to configure your Fastify instance.
You can still customise your server settings by running yarn rw setup server-file
first. See docs for Server File
This PR removes all the cases where we use createFastifyInstance
for the api server, and replaces it with createServer
. This makes sure that the API server config is always consistent - whether you use a server file or not.
fix(deps): update dependency resend to v3 (#11040) by @Josh-Walker-GM
Please see #11040 for more detailsbreaking: remove webpack (#10867) by @Josh-Walker-GM
This PR removes support for webpack. There are a number of breaking changes associated with removing a core component of previous versions. A list of such changes is:
prebuildWebFile
is function no longer exported from@redwoodjs/babel-config
package@redwoodjs/cli-storybook
has been removedyarn rw build
no longer accepts the--stats
flagyarn rw dev
no longer accepts the--watchNodeModules
flagyarn rw setup custom-web-index
command has been removedyarn rw setup webpack
has been removed@redwoodjs/core
no longer provides@redwoodjs/core/config/*
files- The
web.bundler
TOML config option has been removed @redwoodjs/testing
no longer provides storybook config files@redwoodjs/testing
no longer provides aStorybookProvider
- The
webpack
bin has been removed from@redwoodjs/web
You can also find more information on the upgrade guide.
feat(colors): Add more chalk colors. And prepare for chalk upgrade (#10939) by @Tobbe
Add more colors to @redwoodjs/cli-helpers
.
Breaking: No longer exporting green
as a color. Use tip
or success
instead depending on what you want to convey.
remove(cli): Remove deprecated deploy providers (#10859) by @Josh-Walker-GM
This change removes the deprecated deploy providers edgio and serverless. Serverless has been restored and is available in v8.
chore(codemods): Remove pre v1 related content (#10831) by @Josh-Walker-GM
Please see #10831 for more detailsfix(deps): update dependency firebase-admin to v12 (#10833) by @renovate
This change updates our firebase auth provider to use the v12 major version of the firebase-admin
package. This will require you to update your own version of firebase-admin
that is listed in your api side package json file.
We have noticed no breaking api changes in our limited testing. Please consult the firebase-admin
upgrade guide if you experience problems after upgrading - especially if you have more extensive or complex use of the firebase suite of products.
fix(functions-test): Fix mockHttpEvent for null bodies (#10570) by @Tobbe
With an empty/null payload (which it is by default) the body should be empty, not the string 'null'
This is a breaking change for anyone who was depending on the current "null" behavior in their api function tests. More specifically, if you're NOT passing body
or payload
to mockHttpEvent({ ... })
or if you're trying to explicitly set payload
to null
you might have to update your tests.
feat: Remove `--performance` option from `yarn rw build` (#10453) by @Josh-Walker-GM
This change removes the --performance
flag from the yarn rw build
command. It will no longer be available to use and the CLI will no longer accept this flag being passed in.
Additionally, the associated webpack config (@redwoodjs/core/config/webpack.perf.js
) has been removed so it can no longer be imported if you were doing so.
fix(router): Remove barrel exports from router.tsx (#10464) by @Tobbe
We were using both index.ts
and router.tsx
as barrel export files. We should move away from barrel exports at some point, and we definitely don't need two files doing it in the same package. Everything that was exported from router.tsx
is already exported by other files (except Router
itself). So I updated the code to import from there directly instead.
This is a breaking change for anyone who does import ... from '@redwoodjs/router/dist/router'
in their project. Which hopefully isn't very many.
- The quick fix is to find the original export and pull from there instead
- The real fix is to talk to us on the core team and see if we can provide an
official way of solving it instead of relying on internal implementation
details 🙂
chore(linting): Update versions and avoid `{}` (#10266) by @Josh-Walker-GM
This PR updates the versions of the eslint
and the @typescript-eslint
packages from v5 to v7.
This is a major upgrade of the @typescript-eslint
package and although we think it is unlikely to introduce a breaking change for you we would recommend that you read the associated documentation. The v6 upgrade can be found here and the v7 one here.
fix(navlink): Replace (don't merge) className of active link (#10342) by @Tobbe
We should be replacing className with activeClassName
for the active link. Currently we try to merge them, but that makes it very difficult for end users to have full control over exactly what classes are applied to active links
Fixes #10296
Before
<NavLink
to={routes.air()}
className="inline-block rounded-t-lg border-b-2 border-transparent p-4 hover:border-gray-300 hover:text-gray-600 dark:hover:text-gray-300"
activeClassName="active inline-block rounded-t-lg border-b-2 border-blue-600 p-4 text-blue-600 dark:border-blue-500 dark:text-blue-500"
>
Air
</NavLink>
The <NavLink>
above would get the following classes if it was the active link
inline-block rounded-t-lg border-b-2 border-transparent p-4 hover:border-gray-300 hover:text-gray-600 dark:hover:text-gray-300 active inline-block rounded-t-lg border-b-2 border-blue-600 p-4 text-blue-600 dark:border-blue-500 dark:text-blue-500
After
That same <NavLink>
now only gets the activeClassName
classes active inline-block rounded-t-lg border-b-2 border-blue-600 p-4 text-blue-600 dark:border-blue-500 dark:text-blue-500
Breaking
If you were relying on the merging behavior you will now have to copy all classes from className
and also include them in activeClassName
.
So if you had this:
<NavLink
to={routes.home()}
className="border-b-2"
activeClassName="text-red-200"
>
Air
</NavLink>
you will now have to change it to:
<NavLink
to={routes.home()}
className="border-b-2"
activeClassName="border-b-2 text-red-200"
>
Air
</NavLink>
feat(prettier) upgrade to prettier v3 (#10179) by @jtoar
This PR upgrades Redwood internally to Prettier v3. We believe this won't have any downstream effect for users.
If you have Tailwind CSS configured, can upgrade prettier-plugin-tailwindcss
to a version later than 0.4.1
if you make a few changes:
- Change
prettier.config.js
toprettier.config.mjs
(js -> mjs) export default
instead ofmodule.exports
await import('...')
any plugins instead ofrequire('...')
Here's an example of an updated prettier.config.mjs
to work with prettier-plugin-tailwindcss@^0.5.12
:
// prettier.config.mjs
export default {
trailingComma: "es5",
bracketSpacing: true,
tabWidth: 2,
semi: false,
singleQuote: true,
arrowParens: "always",
overrides: [
{
files: "Routes.*",
options: {
printWidth: 999,
},
},
],
tailwindConfig: "./web/config/tailwind.config.js",
plugins: [await import("prettier-plugin-tailwindcss")],
};
🚀 Features
feat(uploads): Increase default fastify body limit to 100MB (#11412) by @dac09
Increases the default limit for receiving requests to 100MB (instead of 15MB). This number is arbitrary really, but it is the TOTAL size of the request, not of each file being uploaded.
The user can override this in their server file.
// api/server.js
const server = await createServer({
logger,
fastifyServerOptions: {
bodyLimit: 1048576 * 2, // 2 MiB
},
});
feat(rsc): Initial support for RSA rerender (#11406) by @Tobbe
This PR makes it so that the entire page is re-rendered when a React Server Action returns.
Previously when calling an RSA you'd only get the result of the action back.
Now, when calling an RSA you'll still get the result back, and in addition to that the page will update.
What this means is that if you for example update a counter on the server that a server component is displaying that counter will now immediately update.
Also, if some data has been updated by something external to the app the new data will be displayed (like if someone used an external CMS to update some .md file you're rendering)
feat(storage): Add support for createMany, updateMany and upsert (#11390) by @dac09
Extends the uploads Prisma client extension with the following:
-
createMany
: support for bulk creation with automatic cleanup of uploaded files if the operation fails. -
updateMany
: bulk update functionality that manages file uploads across multiple records, including removal of old files after successful updates. -
upsert
: determining whether it's an insert or update and managing file uploads accordingly - delete files on creation fail, and replace files on update
feat(uploads): Create uploads package with prisma extension and upload processors (#11263) by @dac09
Please see #11263 for more detailstemplate(db): Update `api/src/lib/db` template (#11379) by @dac09
Updates the template in api/src/lib/db.{js,ts}
to export db
differently.
In your existing projects, you can make the following changes:
import { PrismaClient } from '@prisma/client'
import { emitLogLevels, handlePrismaLogging } from '@redwoodjs/api/logger'
import { logger } from './logger'
import { prismaExtension } from './uploads'
- export const db = new PrismaClient({
+ const prismaClient = new PrismaClient({
log: emitLogLevels(['info', 'warn', 'error']),
})
handlePrismaLogging({
- db
+ db: prismaClient,
logger,
logLevels: ['info', 'warn', 'error'],
})
+ export const db = prismaClient
feat(uploads): Add File scalar to rootSchema (#11378) by @dac09
Adds File
scalar to rootSchema, to enable parsing fields set to File as a https://developer.mozilla.org/en-US/docs/Web/API/File
The parsing and scalar is actually built in to GraphQL Yoga, this change just enables it by default instead of having to add scalar File
to one or more of your SDLs.
RCS: Basic support for 'use server' inside components (#11376) by @Tobbe
Please see #11376 for more detailsAdds background job scheduling and execution (#11238) by @cannikin
This new package provides scheduling and processing of background jobs. We want everything needed to run a modern web application to be included in Redwood itself—you shouldn't need any third party integrations if you don't want.
Background jobs have been sorely missed, but the time has come! (If you do want to use a third party service we have had an integration with Inngest since May of 2023!)
Features
- Named queues: you can schedule jobs in separate named queues and have a different number of workers monitoring each one—makes it much easier to scale your background processing
- Priority: give your jobs a priority from 1 (highest) to 100 (lowest). Workers will sort available jobs by priority, working the most important ones first.
- Configurable delay: run your job as soon as possible (default), wait a number of seconds before running, or run at a specific time in the future
- Auto-retries with backoff: if your job fails it will back off at the rate of attempts ** 4 for a default of 24 tries, the time between the last two attempts is a little over three days.
- Run inline: instead of scheduling to run in the background, run immediately
- Integrates with Redwood's logger: use your existing one in api/src/lib/logger or create a new one just for job logging
feat(uploads): Configure apollo client to do multi-part form uploads (#11175) by @dac09
a) Configures the Apollo client we export to use upload link - https://github.com/jaydenseric/apollo-upload-client
b) Configures our API side fastify server to accept multipart form data
Notes:
- apollo-upload-client is ESM only. In order to get this working for prerender, I had to bundle it for CJS version only.
Without this change you get errors during prerender like this:
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/dac09/Experiments/apollo-upload-link/node_modules/apollo-upload-client/createUploadLink.mjs not supported.
-
Currently the multi-part config only applies when you have a server file (see separate PR with fix: #11176)
-
The upload link internally will handle whether to do a regular POST or multipart POST. In order to make use of this on the backend you need to set your graphql schema field to a scalar of
File
feat(context): Build and publish package as dual esm/cjs (#11294) by @Josh-Walker-GM
Please see #11294 for more detailsfeat(exec): Add --silent to silence all RW output (#11278) by @Tobbe
Run with --silent
(or -s
) to not have the framework itself print anything to
your console. Only console logs you have yourself in the script, or any files
the script includes, will come through.
If you're using Prisma you might want to tweak Prisma's logging (in
api/lib/db.ts
) and turn off "info" logging, depending on your goals.
feat(rsc): Register top-level function-scoped RSAs (#11255) by @Tobbe
Please see #11255 for more detailsfeat(rsc): Detect single RSA functions (not just entire files) (#11168) by @Tobbe
Please see #11168 for more detailsfeature(studio): Make studioHandler install Studio v12 (#11131) by @Tobbe
Makes sure you get the latest version of Redwood Studio the first time you run
yarn rw studio
feat(storybook): switch command for storybook vite (#11069) by @Josh-Walker-GM
This change moves the vite based storybook to the standard storybook command. Essentially making it the default storybook command.
feat(cli): Move docker setup out of experimental (#11072) by @Josh-Walker-GM
This change introduces yarn rw setup docker
. This is a result of moving our docker setup command out of it's experimental phase.
feat(link): Pass options to navigate() (#11058) by @Tobbe
Allow passing NavigateOptions
(which for now is just replace
) from a <Link>
and <NavLink>
to navigate()
by setting an options
prop on the link component.
feat(router): add router useBlocker hook (#10873) by @xmaxcooking
Add useBlocker()
hook to router to allow blocking navigation. Most commonly used to prevent users from accidentally leaving a page with unsaved changes.
feat(trusted-docs): Allows useRedwoodTrustedDocuments to set more custom UsePersistedOperationsOptions (#10894) by @dthyresson
Allows useRedwoodTrustedDocuments to set more custom UsePersistedOperationsOptions
Allows the useRedwoodTrustedDocuments plugin to define:
/**
* Whether to allow execution of arbitrary GraphQL operations aside from persisted operations.
*/
allowArbitraryOperations?: boolean | AllowArbitraryOperationsHandler;
/**
* The path to the persisted operation id
*/
extractPersistedOperationId?: ExtractPersistedOperationId;
/**
* Whether to skip validation of the persisted operation
*/
skipDocumentValidation?: boolean;
/**
* Custom errors to be thrown
*/
customErrors?: CustomPersistedQueryErrors;
This can let you override to allow certain ops or skip validation etc:
If you validate your persisted operations while building your store, we recommend to skip the validation on the server. So this will reduce the work done by the server and the latency of the requests.
The allow authenticated request is still considered, but allowArbitraryOperations
can override.
Omitted getPersistedOperation
as this extracts hash from store.
feat(prisma): Support multi file Prisma schemas (#10869) by @dthyresson
Prisma's prismaSchemaFolder
feature allows you to define multiple files in a schema subdirectory of your prisma directory.
This PR updates:
- Prisma utilities
- generators
- dbAuth setup
- documentation
to support single and multi file Prisma schemas.
If you have enabled Prisma multi file schemas, you configure your project toml api schemaPath
setting the directory where your schema.prisma can be found, for example: './api/db/schema'
When organizing your Prisma Schema into multiple files, you will need enable that feature in Prisma, move your schema.prisma
file into a new directory such as ./api/db/schema
and then set schemaPath
in the api toml config.
:::
For example:
[api]
port = 8911
schemaPath = "./api/db/schema"
feat(Storybook Vite): Add JS project support (#10900) by @arimendelow
This adds support to the SBV CLI for JS projects.
feat(eslint-plugin): support flat config (#10910) by @JoshuaKGoldberg
Makes it possible to use the eslint-plugin package in the "flat config" eslint configuration format.
feat(baremetal): Check for setup before running deploy (#10922) by @Tobbe
Print a helpful error message if baremetal has not been setup before running yarn rw deploy baremetal
.
feat(dbAuth): Hint about migration after setup (#10875) by @Tobbe
Please see #10875 for more detailsfeat(router): Navigate to splash page using routes.home() (#10874) by @Tobbe
This PR makes it so that routes.home()
works even when there's no actual /
route in the Routes.tsx
file if navigating to /
would show the splash page.
feat(dbAuth): Automatically create User model in fresh projects (#10871) by @Tobbe
Automatically create a User
model in the project's schema.prisma
when setting up dbAuth in a new project.
feat(dbAuth): Prompt to generate dbAuth pages (#10865) by @Tobbe
When setting up dbAuth we'll now prompt if the user also wants to generate pages for login, signup, password reset etc. We only prompt if no existing pages exist.
feat(g dbAuth): Detect WebAuthn support (#10864) by @Tobbe
Automatically add WebAuthn support to generated pages when WebAuthn is enabled for dbAuth
feat(dbAuth): Prompt for creating User table (#10849) by @Tobbe
To skip the prompt you can pass --createUserModel
(or just -u
) to yarn rw setup auth dbAuth
.
feat(rsc-auth): Implement getRoles function in auth mw & update default ServerAuthState (#10656) by @dac09
- Implement getRoles function in supabase and dbAuth middleware
- Updates default serverAuthState to contain roles
- Make cookieHeader a required attribute
- Introduces new
clear()
function to remove auth state - just syntax sugar
Example usage
// In entry.server.tsx
export const registerMiddleware = () => {
// This actually returns [dbAuthMiddleware, '*']
const authMw = initDbAuthMiddleware({
dbAuthHandler,
getCurrentUser,
getRoles: (decoded) => {
return decoded.currentUser.roles || [];
},
});
return [authMw];
};
feat(serverStore): Add location to serverStore for RSCs to access location (#10697) by @dac09
- Adds fullUrl property to serverStore
- Adds two utility functions:
a)getFullUrl
- to construct the absolute url from an express request
b)getFullUrlFromFlightRequest
- this is used when we get a request to render RSCs in the rscRequestHandler. This one is different because the location we want is for the actual page, not of the request (which goes to to the RSC endpoint). - Adds
getLocation
function to retrieve the Location (URL object) from server store
Short video demonstrating location coming through in two cases:
a) Soft renders (makes a request to the RSC endpoint)
b) Hard render
Usage example:
import { getLocation } from '@redwoodjs/vite/serverStore'
const NavigationLayout = ({ children, rnd }: NavigationLayoutProps) => {
const location = getLocation()
console.log(`👉 \n ~ location:`, location)
Longer term, we may want to change how the endpoint for flight requests so that the location doesn't have to be constructed specially.
In useOgImage() hook adds searchParams option for setting arbitrary query string vars to generated URL (#10677) by @cannikin
This can be used like so:
const { url } = useOgImage({ searchParams: { foo: 'bar' })
console.log(url) // => http://localhost:8910/photo.png?foo=bar
feat: Reworks RSC server entries and route manifest building to derive from routes and include if route info related to authentication (#10572) by @dthyresson
This PR is in furtherance of authentication support in RSC.
It refactors:
-
How server entries are built -- not from "processing the pages dir" (which is a deprecated function) but rather the routes ... and the page info for that route. Note here that a page can be used in multiple routes, so the auth info cannot really be determined here.
-
The route manifest building to include per route:
- isPrivate - is the route private, i.e, is it wrapped in a PrivateSet
- unauthenticated - what route to navigate to if the user in not authenticated
- roles - the roles to check to see if user has the require RBAC permission to navigate to the route
Now if some page, route request is being handled by RSC we might be able to check if it "isPrivate" and enforce auth with the roles and even where tp redirect to if not authenticated.
feat(auth-middleware): Return a Tuple with Route pattern configuration when creating dbAuth middleware (#10642) by @dac09
- This PR renames createDbAuthMiddleware -> initDbAuthMiddleware
- Returns a tuple of
[dbAuthMw, '*']
from the init function to make it harder to accidentally misconfigure the auth middleware
feat(middleware): Add .shortCircuit to MiddlewareResponse (#10586) by @dac09
Adds a helper to generate a intercept/short-circuit response, that will interrupt execution of all middleware and react rendering, and immediately return the response.
There's a few different ways you can use this, see examples below:
const shortCircuitMw: Middleware = (req, res) => {
// A) You can short circuit after building the response (or use the res param)
// This allows you to use all the convenience helpers like cookies of MW Response
if (req.url.includes("create-new-response")) {
const shortCircuitResponse = new MiddlewareResponse("Short-circuiting");
shortCircuitResponse.headers.set("shortCircuit", "yes");
shortCircuitResponse.cookies.set("shortCircuitCookie", "do-not-allow", {
expires: new Date(Date.now() + 1000 * 60 * 60),
});
shortCircuitResponse.shortCircuit();
}
// B) You can directly construct a new short-circuit response
// (discarding whatever response was built before)
if (req.url.includes("using-existing-res")) {
res.shortCircuit("Short-circuiting directly", {
headers: { shortCircuitDirect: "yes" },
});
}
};
feat(rsc-auth): Implement serverStore to hold and pass req info to RSC (#10585) by @dac09
First pass at implementing a per-request store that allows:
- access to headers and cookies from requests in server components
- access to serverAuthState from server components
- maps serverAuthState updated from middleware to the the per request store
This PR also implements execution of middleware in the RSC handler. Note that this is done in a "good enough" way currently, because the RSC handler doesn't use Fetch requests (but everything else does)
Important things to note:
- the store is initialised again in the RSC worker, with the same values on each invocation of renderRsc
- we have not tested or tried in Dev because
rw dev
does not work in RSC yet - we have not tested behaviour on initial SSR - because this is not implemented yet in RSC
feat(cli): Setup command and codemod for OG image middleware (#10485) by @Josh-Walker-GM
Please see #10485 for more detailsfeat(server-auth): Supabase web client implementation with middleware support (#10522) by @dac09
Updates supabase auth client implementation to support middleware auth
In web/src/auth.ts
:
// 👇 notice where this is imported from!
import { createBrowserClient } from '@supabase/ssr'
import { createAuth } from '@redwoodjs/auth-supabase-web'
const supabaseClient = createBrowserClient(
process.env.SUPABASE_URL || '',
process.env.SUPABASE_KEY || ''
)
export const { AuthProvider, useAuth } = createAuth(supabaseClient)
- moves some types, and getCurrentUserFromMiddleware function to a common place so it can be shared with multiple auth implementations
feat(RSC): Remove `entries.ts` file (#10533) by @Josh-Walker-GM
Please see #10533 for more detailsfeat(server-auth): Refactor useReauthenticate to prevent double currentUser calls (#10531) by @dac09
…by calling getCurrentUser to determine if youre logged in.
We achieve this by swapping the order in which getUserMetadata and getCurrentUser is called in reauthenticate.
Previously getUserMetadata was a short-hand for checking if the auth SDK think its logged in, however in middleware auth this is an issue because you need to getCurrentUser before getting user metadata in the case of purely cookie based auth like dbAuth (and potentially future ones like firebase, etc.) - since the cookie/token cannot be read on the browser.
feat(auth): Implement Supabase Auth Middleware (#10499) by @dthyresson
Implement Supabase Auth Middleware to authenticate server-side requests.
- Adds middleware to the Supabase auth-providers package.
- createSupabaseAuthMiddleware is responsible for authenticating Supabase requests
- It does so by checking if the request has a supabase auth-provider header, and then uses the authDecoder to verify the session cookie using the Supabase ServerAuthClient and returning a decoded access token -- or throwing an exception if the session cookie is invalid
- Once the middleware has the decoded JWT, it hands that to the provided getCurrentUser from he user's project to return the information about authenticated user
- Lastly, it sets serverAuthState with user and metadata info to know the request isAuthenticated
- If the session is invalid or the cookie tampered with such that the access token cannot be verified, serverAuthState is cleared as are the auth provider and Supabase cookies
feat(og-gen): Implement middleware and hooks (#10469) by @dac09
The OG Gen saga continues with @cannikin and @dac09 ⚔️
This PR:
- adds OgImageMiddleware and Hooks to
@redwoodjs/og-gen
, complete with tests
- updates entry.client template to pass in Routes to App
- updates App to take children (i.e. Routes)
This is so that we can pass the OG component to be rendered with your App's CSS setup.
How to use this?
-
Registering the middleware:
import OgImageMiddleware from "@redwoodjs/ogimage-gen/middleware"; export const registerMiddleware = () => { const ogMw = new OgImageMiddleware({ App, Document, }); return [ogMw]; };
-
Configure your
vite.config.ts
import vitePluginOgImageGen from "@redwoodjs/ogimage-gen/plugin"; const viteConfig: UserConfig = { // 👇 so it builds your OG components plugins: [redwood(), vitePluginOgImageGen()], }; export default defineConfig(viteConfig);
-
Add your OG Image component next to the page it's for
e.g. web/src/pages/AboutPage/AboutPage.png.tsx -
Use hooks on AboutPage to generate the ogURL
feat(eslint): Disable restricted $api imports for entryserver (#10520) by @dac09
With the introduction of middleware, it's pretty common to import things from the $api side. This is a non-issue as entry.server.{jsx,tsx} is not part of the client bundle we generate.
feat(server-auth): WebAuthN support during SSR (#10498) by @dac09
This PR changes the following:
1. Moves webAuthN imports to be dynamic imports
This is because the dbauth-provider-web packages are still CJS only. When importing in an ESM environment (such as SSR/RSC server) - it complains that about ESM imports
2. Updates the default auth provider state for middleware auth
Middleware auth default state is almost the same as SPA default auth state. Except that loading is always false! Otherwise you can get stuck in a loading state forever.
feat(cookieJar): Change cookie.get to directly return value (#10493) by @dac09
Motivation
My original design of the CookeiJar.get
would return the full cookie object we store, including cookie options. This is not ideal because you need to access the cookie like this:
const myCookie = mwRequest.cookies.get("myCookie");
// 👇
const actualValue = myCookie.value;
This is unwieldy, and feels unergonomic for the 98% of cases where get
will be used to just see the value.
How do I still see the options of the cookie?
You can still access all the details of the cookie by doing cookie.entries
. I don't really have a case for this yet, so let's not optimise for this case, but we know it's possible!
This is me just stabilizing the API for Middleware stuff, before we ship it out of experimental
feat: redwoodjs/auth-dbauth-middleware - Part 2/3 - Auth Middleware for dbAuth to authenticate users via cookie (#10447) by @dthyresson
- Implements createDbAuthMiddleware in @redwoodjs/auth-dbauth-middleware:build
- Used to register middleware for dbAuth in RedwoodJS projects
feat(server-auth): Update getAuthenticationContext to support cookies and tokens both (#10465) by @dac09
1. Updates getAuthenticationContext
to parse the cookie header and pass it to authDecoder.
Note that the authentication context itself does not pull out the token from cookies, because with some providers (e.g. supabase) - we don't know the name of the cookie. This is left to the authDecoder implementation.
The return type from this function is actually just a deserialized cookie header i.e.
cookie: auth-provider=one; session=xx/yy/zz; somethingElse=bsbs
=> { 'auth-provider': 'one', session: 'xx/yy/zz', somethingElse: 'bsbs'
2. Retains support for header/token based auth
See test on line 259 of packages/api/src/auth/__tests__/getAuthenticationContext.test.ts
. If a the authorization
and auth-provider
headers are passed in the request (as we do for SPA based auth) - then cookies will take precedence.
The end result is that graphql requests will now work with middleware-based auth providers!
feat(server-auth): dbAuth 3/3 - handle login, logout, signup, etc. requests if forwarded from middleware (#10457) by @dac09
This PR updates the DbAuthHandler class to handle requests forwarded from middleware, so it can generate responses for login, logout, signup, etc. These are POST requests - it used to be to the /auth
function, but now they will be captured by dbAuth middleware and forwarded onto DbAuthHandler.
High level changes:
- use the
Headers
class in each of the "method" responses. This allows us to set multi-value headers like Set-Cookie. A simple object would not. See typeAuthMethodOutput
- extracts
buildResponse
into a testable function and adds test. ForSet-Cookie
headers we return an array of strings.
In the middleware here's the code I had for the final conversion:
if (AUTHHANDLER_REQUEST) {
const output = await dbAuthHandler(req);
const finalHeaders = new Headers();
Object.entries(output.headers).forEach(([key, value]) => {
if (Array.isArray(value)) {
value.forEach((v) => finalHeaders.append(key, v));
} else {
finalHeaders.append(key, value);
}
});
return new MiddlewareResponse(output.body, {
headers: finalHeaders,
status: output.statusCode,
});
}
feat(server-auth): Part 1/3: dbAuth middleware support (web side changes) (#10444) by @dac09
Adds ability to `createMiddlewareAuth` in dbAuth client which:- Updates the dbAuth web client to speak to middleware instead of graphql
- Implements fetching current user from middleware
feat(og-gen): Update implementation of useLocation | Update App template (#10441) by @dac09
**Updated App.tsx template** We modified the `App.tsx` template to accept possible children, and render them if present. This lets the og:image handler inject your component into the Document tree, without including the entire Router, but still style your og:image component using whatever you used to style the rest of your app (Tailwind, perhaps?)Updated useLocation implementation
We also modified the useLocation()
hook to now return everything that the URL API returns. Previously it only returned three attributes of the url (pathname, search, hash), now it returns everything available to a call to new URL()
(origin, href, searchParams, etc.).
The reason for this is now that we have SSR, we can get access to more details in the hook - in this case we needed origin
Both changes should be non-breaking!
feat: [Auth] Common AuthProvider & use* changes for middleware auth (#10420) by @dac09
- First step of supporting Auth using middleware
- Ensure backwards compatibility with non-SSR auth
Breaking Change
Removes skipFetchCurrentUser
which was used by the no longer existing nHost auth provider, but could potentially have been used by custom auth.
Middleware Routing & `registerMiddleware` (#10395) by @dac09
Implements the new syntax of using Middleware after discussion. This sets us up for doing Auth better, but also for implementations like OG Image generation.
export const registerMiddleware = async () => {
return [
dbAuthMiddleware(),
[new OgMiddleware({ rootFilename: "index" }), ["/:route.:extension"]],
];
};
Features
- Registering middleware with above syntax
- Chaining multiple middleware by passing array of middleware, or tuples
- Defining the route patterns to match in the find-my-way syntax
What syntax are you using for the route patterns?
After discussion that Regexes are slow and unwieldy, I did some research and comparisons here: https://www.notion.so/redwoodjs/Middleware-Route-patterns-0f1c5587b4134073adfae896a782b5ea?pvs=
This implementation uses https://github.com/delvedor/find-my-way - which is the Fastify version - but still keeps us decoupled from Fastify (see implementation, or document for why).
Important for understanding
Quoting from find-my-way docs:
The nodes are matched in the following order:
static
parametric node with static ending
parametric(regex)/multi-parametric
parametric
wildcard
Which means, if you have a more specific one - example you have [mw1,
*]
and [mw2, '/refresh_auth']
- then a request to /refresh_auth will ONLY trigger mw2. This is sort of counter intuitive, but them are the rules with fmw.
feat: Send RSC Flight Payload to Studio (#10213) by @dthyresson
This PR sends the rendered RSC payload (aka "flight") to Studio to be ingested, persisted, and fetched.
Performance and metadata enrichments are performed in order to visualize in Studio
RSC: Initial pass at enabling `rw dev` for RSC (#10158) by @Tobbe
Please see #10158 for more detailsfeat(rsc-streaming): Integrating RSC builds with Streaming and Client side hydration (#10031) by @dac09
Please see #10031 for more detailsRSC: Make babel insert `renderFromRscServer` calls into Routes.tsx (#10074) by @Tobbe
Please see #10074 for more detailsRSC: Insert 'use client' in scaffolded components (#9998) by @Tobbe
Please see #9998 for more detailsRSC: Enable babel plugins to get client Cell support (#9973) by @Tobbe
Please see #9973 for more detailsfeat(middleware): Add support for Middleware to SSR-Streaming server (#9883) by @dac09
Please see #9883 for more details🛠️ Fixes
fix: Use sse link with `@live` directive (#11375) by @callingmedic911
Use SSE links that allows proper headers that in turn show proper requests with the body in browser devtools.
fix(cli-helpers): Don't add spaces around `=` for env vars (#11414) by @Tobbe
The addEnvVar
helper function in packages/cli-helpers
no longer adds spaces around =
when setting environment variables.
fix(template): api type declaration merging for scripts (#11367) by @Tobbe
Make imports in scripts (files in scripts/
) find our mirror types used for declaration merging also for api/src/
imports (not just web imports)
Users upgrading are adviced to manually upgrade their tsconfig files to match
what is now in the template.
RSC: Disable client side flight caching for now (#11400) by @Tobbe
Please see #11400 for more detailsfeat(codegen): support sdl generation for model with compound id (#8556) by @russell-dot-js
The SDL generator will no longer error when handling a table with a composite id, like so:
model Order {
tenantId String
id String @unique @default(uuid())
@@id([tenantId, id])
}
It will now generate code in the SDL that handles input of both these variables:
input TempIdInput {
tenantId: String!
id: String!
}
If you are using a custom sdl.{j,t}s.template
then you may have to update it to support the new idInput
.
few Flightcontrol template & doc updates (#11383) by @flybayer
Updates the flight control deployment command and documentation. Corrects issue #10754 which is to do with an outdated database setup.
Catch errors when studio is not running and mail tries to send (#11387) by @cannikin
Please see #11387 for more detailsfix(jobs): Fix the `deleteSuccessfulJobs` type showing up (#11377) by @Josh-Walker-GM
Please see #11377 for more detailsfix(jobs): Allow passing empty array when scheduling parameterless jobs (#11372) by @Josh-Walker-GM
Please see #11372 for more detailsfix(jobs): Type-safe arguments passing to jobs from scheduler (#11371) by @Tobbe
Please see #11371 for more detailsfeat(storybook): Remove consideration of mjs from docgen plugin (#11346) by @arimendelow
Please see #11346 for more detailsfix(jobs): Include bin proxies and only build to cjs (#11344) by @Josh-Walker-GM
Please see #11344 for more detailsfix(api-server): Fix issue with clean builds (#11340) by @Josh-Walker-GM
Please see #11340 for more detailsfix(record): Update dependencies and build dual esm/cjs (#11300) by @Josh-Walker-GM
Please see #11300 for more detailsfix(codemods): Move away from babel for building package (#11306) by @Josh-Walker-GM
Please see #11306 for more detailsfix(api): Move away from babel for building package (#11305) by @Josh-Walker-GM
Please see #11305 for more detailsfix(auth-providers): Move away from babel for building 'api' packages (#11301) by @Josh-Walker-GM
Please see #11301 for more detailsfix(auth-providers): Move away from babel for building 'setup' packages (#11303) by @Josh-Walker-GM
Please see #11303 for more detailsDetect/resolve ambiguous script names (#9848) by @codersmith
Detects and resolves ambiguous script name combinations like [foo.js, foo.ts]
or [foo.ts, foo.json]
when running yarn rw exec foo
.
fix(cli): Service generator supports relations (#11250) by @dthyresson
This PR address an issue when using yarn rw g service
independently vs having ti be called by yarn rw g sdl
or yarn rw g scaffold
.
When using yarn rw g service
, the model's relations were not correctly determined. For the sdl generator, relations are determined and then passed as an argument to the service generator; however, if you run just the service generator, the relations were always []
.
This PR fixes that by adding a check to see if the relations are already passed in as an argument. If they are, it uses that; otherwise, it falls back to determining the relations itself.
fix(exec): Include nested scripts in --list (#11262) by @Tobbe
Now also nested scripts, like scripts/nested/script.ts
, are included in the
output of yarn rw exec --list
fix(babel-plugins): Handle additional syntax when extracting graphql options (#11189) by @Josh-Walker-GM
This fixes an issue with the automatic extraction of options from the createGraphQLHandler
function when you were wrapping that function within a custom handler function. For example the following would have failed before this fix:
const graphQLHandler = createGraphQLHandler({
// ...options
});
export const handler = (event, context) => {
return graphQLHandler(event, context);
};
refactor: api-server's `watch` build process (#11110) by @callingmedic911
Please see #11110 for more detailsfix: Comment out unused import line in seed script template (#11171) by @Josh-Walker-GM
Please see #11171 for more detailsRemove erronerous console.log("In decorators") in Storybook package (#11141) by @Philzen
Please see #11141 for more detailsfix(cli): Update react versions during RSC setup command (#11140) by @Josh-Walker-GM
Please see #11140 for more detailsfix(cli-cache): Remove RW CLI cache on upgrade (#11135) by @dac09
This change removes the redwood cli plugin cache in .redwood/commandCache.json
on running rw upgrade
.
This prevents the redwood CLI from using outdated versions of CLI plugins, and is particularly important when they same alias.
Before
running yarn rw sb
-> would use the outdated storybook-cli package, and error out.
After
with no commandCache, it'll create a new command cache, and attempt to install the new vite CLI
feat(testing): Configure jest to ignore sidecar files in __tests__ folder (#11108) by @V1shvesh
Solves for #10870
Description:
./api
directory structure:
./web
directory structure:
Before:
fix: concurrent api builds (#11109) by @callingmedic911
Don't edit the title, but in editing the body, try to explain what this PR means for Redwood users. The more detail the better. E.g., is it a new feature? How do they use it? Code examples go a long way!- fix: concurrent api builds (#11109) by @callingmedic911
A few users reported that the API server crashes with the error EADDRINUSE
when switching between branches. This issue happens on the API side when:
- New files are added or existing files are removed.
- Immediately after, an existing file is changed.
This scenario is common when doing git operations like switching branches or using git stash, where these changes occur simultaneously. When this happens, step 1 triggers a full build (without esbuild's rebuild), and step 2, without canceling the build from step 1, triggers a separate rebuild
. This results in concurrent builds and two instances of the API server trying to start.
This PR provides a quick fix for the issue. A follow-up PR will be created to refactor the process, aiming to avoid separate build processes altogether, ensure a cleaner separation between the build and the server, and improve overall readability.
fix(crwrsca): Fix yarn detection when running using tsx (#11107) by @Tobbe
Please see #11107 for more detailsfix(cli): restore serverless deploy (#11068) by @Josh-Walker-GM
Serverless deployment is deprecated and was removed in #10859. This PR restores this for now until we can provide a better alternative to users.
fix(router): Add check for excessively long path (#11062) by @Josh-Walker-GM
This change adds an additional internal check to protect against route paths which are excessively long.
fix(realtime/trusted-docs): Supports GraphQL subscriptions and trusted documents (#10893) by @dthyresson
Fixes: #10892
This PR updates the SSELink to check if there is a trusted document hash in the request. If there is, then don't also include the query.
The persisted operations plugin checks if the params has a query. If it does then raises an error that only persisted operations are allowed.
Subscriptions failed this test because the request had both the hash and a query. And since there were query details, the request was blocked.
Now, if there is a hash, the SSELink won't add back the query and thus it succeeds.
fix(storybook): Fix import issues with storybook vite (#10961) by @Josh-Walker-GM
Fixes an issue with the yarn rw storybook-vite
command where it would not start due to an import issue.
fix(dbAuth): Don't throw errors under normal auth flow conditions (#10927) by @Tobbe
Please see #10927 for more detailsfix: Fixes support for Mocking GraphQL Queries in Storybook when using GraphQL Fragments (#10825) by @dthyresson
Fixes #10807
If one used GraphQL fragments, when mocking the GraphQL query for use in Storybook, the typename
for the data object must be included otherwise Apollo client cannot properly map the data.
This PR
- adds the typename to the cell generator templates
- updates the testing and graphql mock and fragments documentation to show how properly defines mock data
fix(dbAuth): Generate types after adding new pages to make `routes.home()` work (#10882) by @Tobbe
Please see #10882 for more detailsfix(docs): Update url for new docs subdomain (#10863) by @Josh-Walker-GM
Please see #10863 for more detailsRSC: Silence unsupported-dynamic-import warning (#10750) by @Tobbe
Please see #10750 for more detailsfix(og-mw-setup): Fix typo in notes for og-middleware setup (#10736) by @dac09
Please see #10736 for more detailsfix(dbAuthMw): Update and fix logic related to dbAuth "verbs" and decryptionErrors (#10668) by @dac09
This PR does the following:
- updates the dbauth mw to correctly handle the cookieName option (it should always have been optional)
- throws an error when the
dbAuthSession
returns an empty decoded token so that it clears the authState - we had a check for only "POST" requests to be passed to the dbAuthHandler. This was incorrect because some of the dbAuth "verbs" or actions - like
webAuthnRegOptions
- uses a GET request.
As a result, the tests started showing failures, so I:
- added a mock for
dbAuthSession
, so we can check both happy path and unhappy paths for session decryption - updated the tests where relevant
RSC: Add 'use client' to all client cells in kitchen-sink (#10659) by @Tobbe
Please see #10659 for more detailsfix(vite): Rename `serverAuthContext` to `serverAuthState` (#10653) by @Josh-Walker-GM
Please see #10653 for more detailsfix(mw): Pass matched params in invokeOptions in runFeServer (#10571) by @dac09
Please see #10571 for more detailsRSC: No need to use memo or useMemo in the server router (#10568) by @Tobbe
Please see #10568 for more detailsfix(rsc): Load all css links to support css with rsc (#10544) by @Josh-Walker-GM
Please see #10544 for more detailsDefine `process.env.NODE_ENV` in build process. (#10553) by @peterp
Please see #10553 for more detailsfix(rsc): Remove entries file setup step and remove from test fixtures (#10549) by @Josh-Walker-GM
Please see #10549 for more detailsfix(serverauth): Export dbAuthMiddleware as default export to match supabase (#10538) by @dac09
An example:
//before
import { createDbAuthMiddleware } from "@redwoodjs/auth-dbauth-middleware";
// after
import createDbAuthMiddleware from "@redwoodjs/auth-dbauth-middleware";
fix(dbauth-mw): Use response passed in to middleware (#10516) by @dac09
Middleware can be chained - which means if auth middleware is not the first one on the list of middleware being registered, we need to use the MiddlewareResponse
that gets passed to the middleware, instead of creating a new one.
fix(dbauth-mw): Unset cookie instead of clearing (#10502) by @dac09
Updates dbAuth middleware implementation to _unset_ the cookies, instead of clearing them.fix(rsc): Disable RSC CSS loading plugin (#10503) by @Josh-Walker-GM
Please see #10503 for more detailsRSC: css preinit: Add required option precedence (#10481) by @Tobbe
Please see #10481 for more detailsfix(cli): await async prettier functions (#10478) by @Josh-Walker-GM
Please see #10478 for more detailsfix(ssr): Successfully serve static assets like `favicon.png` (#10455) by @Josh-Walker-GM
Please see #10455 for more detailsfix(middleware): Handle POST requests in middleware router too (#10418) by @dac09
Fixes issue with middleware router not accepted POST requests.
SSR: Better ServerEntry types (#10412) by @Tobbe
When enabling SSR the setup command will generate an entry.server.tsx
file in the user's app. This file exports a ServerEntry
component that takes css
and meta
as props. The meta
props used to be typed as any
, making it difficult to use with confidence. This PR makes the type be TagDescriptor[]
which is more correct.
fix(rw-eslint): Implement more specific checking on Routes (#10404) by @dac09
Fixes: If you use any other elements outside the Route tree it should not throw a linting error or warning
RSC: Vite route auto loader plugin: Fix error message grammar (#10283) by @Tobbe
Please see #10283 for more detailsRSC: Vite plugin for route loading (#10252) by @Josh-Walker-GM
Please see #10252 for more detailsRSC: Differentiate routes autoloading behaviour (#10241) by @Josh-Walker-GM
Please see #10241 for more detailsRSC: fix css and add smoke tests for it (#10226) by @Josh-Walker-GM
Please see #10226 for more detailsfix(rsc): Preinit client component css for server components in production (#10210) by @Josh-Walker-GM
Please see #10210 for more detailsRSC: Inline dependencies during rsc build (#10217) by @Josh-Walker-GM
Please see #10217 for more detailsfix(rsc): only use `web/src/entries.ts` as the `rscBuildAnalyze` entry point (#10218) by @jtoar
Please see #10218 for more detailsfix(rsc): emit files with `.mjs` instead of `.js` (#10189) by @jtoar
Please see #10189 for more detailsfix(cli): avoid `require` in prettier config during tailwind setup (#10183) by @Josh-Walker-GM
With the recent switch to prettier v3 we are no longer able to use require
within the prettier.config.js
config file. This change prevents the tailwind setup CLI command from adding a require statement when it adds
the 'prettier-plugin-tailwindcss'
plugin and instead it simply inserts the plugin name as a string. This
fixes commands such as yarn rw lint
which would have failed in the presence of such a require
statement.
fix(prettier): revert breaking changes in prettier v3 upgrade (#10188) by @jtoar
Please see #10188 for more detailsRSC: Fix syntax error in node-loader ('2024' -> 2024) (#10171) by @Tobbe
Please see #10171 for more detailsRSC: Babel react plugin not needed for analyze phase (#10106) by @Tobbe
Please see #10106 for more detailsfix: Handle static assets on the `rw-serve-fe` (#10018) by @Josh-Walker-GM
Please see #10018 for more detailsfix(RSC/SSR): pass CLI options through to apiServerHandler (#10012) by @jtoar
Please see #10012 for more detailsRSC: Fix babel-plugin-redwood-cell to work wiht more than one cell (#9994) by @Tobbe
Please see #9994 for more detailsRSC: Make RWJS_ENV etc available on the server during runtime (#9971) by @Tobbe
Please see #9971 for more detailsfix(cell-suspense): pass through variables if passed to refetch (#9965) by @dac09
Please see #9965 for more details📚 Docs
Adds docs for jobs setup and generate commands (#11359) by @cannikin
Please see #11359 for more detailsUpdates caching doc code snippets to be consistent (#11331) by @cannikin
Please see #11331 for more details[gh11317] Added documentation for working with Jest and Alias Paths (#11323) by @ahaywood
Please see #11323 for more detailsDocs: Updated api-side-currentuser.md (#11314) by @OwenJRJones
Please see #11314 for more detailsdocs(serverConfig): Remove server config option from TOML (#11236) by @dac09
Please see #11236 for more detailsDocs: update GitHub workflow file for running tests (#11173) by @c-ciobanu
Please see #11173 for more detailsUpdate GraphQL docs for Docusaurus graphql documentation generator plugin (#11102) by @edno
Please see #11102 for more detailsfeat(storybook): Switch docs to be only about the new version (#11086) by @arimendelow
Please see #11086 for more details📝 Added page for using GitPod to the documentation (#9366) by @ahaywood
This introduces new documentation to make getting started with redwood using GitPod easy!
chore(docs): Update Storybook Vite docs to reflect recent change (#10987) by @arimendelow
Please see #10987 for more detailsdocs: Updates vercel config for functions (#10891) by @dthyresson
Please see #10891 for more detailschore: remove MailChimp Tutorial all versions (#10959) by @thedavidprice
Please see #10959 for more detailsfix(docs): Fix introduction link (#10938) by @Josh-Walker-GM
Please see #10938 for more detailsDocs: Update Storybook docs to differentiate between the Webpack and Vite versions (#10895) by @arimendelow
Please see #10895 for more detailsSupabase How To updated for auth setup changes (#10883) by @saminightshift
Please see #10883 for more detailsdocs(router): Document new NavLink className replacement behavior (#10401) by @Tobbe
Please see #10401 for more details📦 Dependencies
Click to see all dependency updates
- chore(deps): Remove webpack related dependencies (#11299) by @Josh-Walker-GM
- fix(deps): update dependency @whatwg-node/fetch to v0.9.20 (#11269) by @renovate
- fix(deps): update dependency @swc/core to v1.7.11 (#11268) by @renovate
- fix(deps): update dependency vite to v5.4.1 (#11276) by @renovate
- fix(deps): update dependency @whatwg-node/server to v0.9.47 (#11270) by @renovate
- fix(deps): update dependency isbot to v5.1.16 (#11271) by @renovate
- chore(deps): update dependency firebase to v10.13.0 (#11277) by @renovate
- fix(deps): update dependency @graphql-tools/utils to v10.5.3 (#11267) by @renovate
- fix(deps): update dependency jscodeshift to v17 (#11233) by @renovate
- chore(deps): update babel monorepo (#11228) by @Josh-Walker-GM
- chore(deps): update dependency @clerk/types to v3.65.3 (#11230) by @renovate
- fix(deps): update dependency vite-plugin-cjs-interop to v2.1.2 (#11224) by @renovate
- fix(deps): update graphql-tools monorepo (#11232) by @renovate
- chore(deps): update dependency @clerk/clerk-react to v4.32.3 (#11229) by @renovate
- fix(deps): update dependency @clerk/clerk-sdk-node to v4.13.21 (#11231) by @renovate
- fix(deps): update dependency cheerio to v1.0.0 (#11218) by @renovate
- chore(deps): update yarn to v4.4.0 (#11227) by @Josh-Walker-GM
- fix(deps): update dependency core-js to v3.38.0 (#11226) by @Josh-Walker-GM
- fix(deps): update dependency @graphql-yoga/plugin-defer-stream to v3.6.3 (#11211) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-persisted-operations to v3.6.3 (#11213) by @renovate
- fix(deps): update dependency isbot to v5.1.14 (#11221) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-graphql-sse to v3.6.3 (#11212) by @renovate
- chore(deps): update dependency @supabase/supabase-js to v2.45.1 (#11192) by @renovate
- chore(deps): update dependency redis to v4.7.0 (#11197) by @renovate
- fix(deps): update dependency @graphql-tools/utils to v10.3.4 (#11210) by @renovate
- fix(deps): update dependency graphql-yoga to v5.6.3 (#11220) by @renovate
- fix(deps): update dependency @graphql-codegen/client-preset to v4.3.3 (#11209) by @renovate
- chore(deps): update dependency rollup to v4.20.0 (#11198) by @renovate
- fix(deps): update dependency @types/node to v20.14.15 (#11216) by @renovate
- fix(deps): update dependency @swc/core to v1.7.10 (#11214) by @renovate
- fix(deps): update dependency @whatwg-node/server to v0.9.46 (#11217) by @renovate
- fix(deps): update dependency qs to v6.13.0 (#11205) by @renovate
- fix(deps): update dependency vite to v5.4.0 (#11207) by @renovate
- fix(deps): update dependency systeminformation to v5.23.4 (#11206) by @renovate
- fix(deps): update dependency @types/aws-lambda to v8.10.143 (#11215) by @renovate
- fix(deps): update dependency vscode-languageserver-textdocument to v1.0.12 (#11225) by @renovate
- fix(deps): update dependency react-hook-form to v7.52.2 (#11223) by @renovate
- fix(deps): update dependency magic-string to v0.30.11 (#11222) by @renovate
- fix(deps): update dependency firebase-admin to v12.3.1 (#11219) by @renovate
- chore(deps): update dependency firebase to v10.12.5 (#11187) by @renovate
- fix(deps): update prisma monorepo to v5.18.0 (#11165) by @renovate
- chore(deps): Upgrade to React 19 RC 20240802 (#11150) by @Tobbe
- fix(deps): update dependency @whatwg-node/server to v0.9.44 (#11100) by @renovate
- fix(deps): update dependency @whatwg-node/fetch to v0.9.19 (#11099) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-graphql-sse to v3.6.2 (#11088) by @renovate
- fix(deps): update dependency @whatwg-node/server to v0.9.43 (#11091) by @renovate
- fix(deps): update dependency pino to v9.3.2 (#11093) by @renovate
- fix(deps): update dependency firebase-admin to v12.3.0 (#11094) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-persisted-operations to v3.6.2 (#11089) by @renovate
- fix(deps): update dependency graphql-yoga to v5.6.2 (#11092) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-defer-stream to v3.6.2 (#11087) by @renovate
- fix(deps): update dependency @swc/core to v1.7.2 (#11090) by @renovate
- fix(deps): update dependency vite to v5.3.5 (#11084) by @renovate
- fix(deps): update dependency @escape.tech/graphql-armor to v3 (#11082) by @renovate
- fix(deps): update dependency @escape.tech/graphql-armor to v2.4.0 (#11073) by @Josh-Walker-GM
- fix(deps): update dependency @whatwg-node/server to v0.9.38 (#11080) by @renovate
- fix(deps): update dependency @types/aws-lambda to v8.10.142 (#11076) by @renovate
- fix(deps): update dependency unplugin-auto-import to v0.18.2 (#11081) by @renovate
- fix(deps): update dependency @react-email/render to v0.0.17 (#11079) by @renovate
- chore(deps): update dependency node to v20.16.0 (#11077) by @renovate
- fix(deps): update dependency @swc/core to v1.7.1 (#11075) by @renovate
- fix(deps): update @apollo/client to v3.11.1 (#11071) by @Josh-Walker-GM
- chore(deps): update dependency @testing-library/jest-dom to v6.4.8 (#11064) by @renovate
- fix(deps): update dependency unplugin-auto-import to v0.18.1 (#11063) by @renovate
- chore(deps): update dependency typescript to v5.5.4 (#10994) by @renovate
- chore(deps): update dependency @testing-library/jest-dom to v6.4.7 (#11053) by @renovate
- fix(deps): update dependency resend to v3.5.0 (#11057) by @renovate
- fix(deps): update dependency jscodeshift to v0.16.1 (#11051) by @Josh-Walker-GM
- fix(deps): update dependency ts-morph to v23 (#11044) by @renovate
- chore(deps): update dependency typescript to v5.5.3 (#11035) by @Josh-Walker-GM
- fix(deps): update dependency ts-morph to v22 (#11041) by @Josh-Walker-GM
- fix(deps): update dependency http-proxy-middleware to v3 (#11038) by @Josh-Walker-GM
- fix(deps): update dependency uuid to v10 (#11036) by @renovate
- fix(deps): update dependency pino to v9 (#11030) by @renovate
- fix(deps): update dependency lru-cache to v11 (#11029) by @renovate
- fix(deps): update dependency @sdl-codegen/node to v1 (#11027) by @renovate
- chore(deps): update yarn to v4.3.1 (#11026) by @renovate
- fix(deps): update dependency @react-email/render to v0.0.16 (#11025) by @renovate
- chore(deps): update dependency rimraf to v6 (#11024) by @renovate
- fix(deps): update dependency @whatwg-node/fetch to v0.9.18 (#11016) by @renovate
- chore(deps): update dependency @supabase/ssr to v0.4.0 (#11017) by @renovate
- fix(deps): update dependency @joshwooding/vite-plugin-react-docgen-typescript to v0.4.0 (#11018) by @renovate
- fix(deps): update dependency esbuild to v0.23.0 (#11015) by @renovate
- fix(deps): update dependency @swc/core to v1.7.0 (#11012) by @renovate
- chore(storybook): Pin versions and update them (#11011) by @Josh-Walker-GM
- fix(deps): update dependency eslint-plugin-prettier to v5.2.1 (#11010) by @renovate
- fix(deps): update dependency @vitejs/plugin-react to v4.3.1 (#11013) by @renovate
- fix(deps): update dependency graphql-yoga to v5.6.1 (#11007) by @renovate
- fix(deps): update dependency eslint-plugin-jsx-a11y to v6.9.0 (#11009) by @renovate
- fix(deps): update dependency graphql to v16.9.0 (#11006) by @renovate
- fix(deps): update dependency eslint-plugin-react to v7.35.0 (#11005) by @renovate
- chore(deps): update dependency rollup to v4.19.0 (#11003) by @renovate
- chore(deps): update dependency node to v20.15.1 (#11002) by @renovate
- fix(deps): update dependency lru-cache to v10.4.3 (#11004) by @renovate
- fix(deps): update prisma monorepo to v5.17.0 (#11001) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-graphql-sse to v3.6.1 (#10996) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-defer-stream to v3.6.1 (#10995) by @renovate
- fix(deps): update dependency @graphql-yoga/plugin-persisted-operations to v3.6.1 (#10997) by @renovate
- fix(deps): update dependency firebase-admin to v12.2.0 (#10999) by @renovate
- fix(deps): update dependency smol-toml to v1.3.0 (#11000) by @renovate
- fix(deps): update dependency fastify to v4.28.1 (#10998) by @renovate
- chore(deps): update dependency @supabase/supabase-js to v2.44.4 (#10990) by @renovate
- chore(deps): update babel monorepo (#10980) by @renovate
- fix(deps): update dependency eslint-plugin-react to v7.34.4 (#10983) by @renovate
- fix(deps): update dependency vite to v5.3.4 (#10984) by @renovate
- fix(deps): update graphql-tools monorepo (#10985) by @renovate
- fix(deps): update graphqlcodegenerator monorepo (#10986) by @renovate
- chore(deps): update dependency rollup to v4.18.1 (#10974) by @renovate
- chore(deps): update dependency redis to v4.6.15 (#10973) by @renovate
- chore(deps): update dependency nodemon to v3.1.4 (#10972) by @renovate
- chore(deps): update dependency firebase to v10.12.4 (#10971) by @renovate
- fix(deps): update dependency @graphql-yoga/redis-event-target to v3.0.1 (#10975) by @renovate
- fix(deps): update dependency @graphql-yoga/subscription to v5.0.1 (#10976) by @renovate
- fix(deps): update dependency react-hook-form to v7.52.1 (#10979) by @renovate
- fix(deps): update dependency prettier to v3.3.3 (#10967) by @renovate
- chore(deps): update dependency rimraf to v5.0.9 (#10963) by @renovate
- fix(deps): update dependency qs to v6.12.3 (#10968) by @renovate
- fix(deps): update dependency isbot to v5.1.13 (#10966) by @renovate
- chore(deps): update dependency semver to v7.6.3 (#10964) by @renovate
- fix(deps): update dependency smol-toml to v1.2.2 (#10877) by @renovate
- fix(deps): update graphqlcodegenerator monorepo (#10856) by @renovate
- fix(deps): update dependency prettier to v3.3.2 (#10852) by @renovate
- fix(deps): update dependency vite to v5.3.1 (#10854) by @renovate
- fix(deps): update prisma monorepo to v5.15.1 (#10857) by @renovate
- fix(deps): update dependency react-hook-form to v7.52.0 (#10853) by @renovate
- fix(deps): update dependency webpack to v5.92.0 (#10855) by @renovate
- chore(deps): update dependency @testing-library/jest-dom to v6.4.6 (#10845) by @renovate
- chore(deps): update dependency @supabase/supabase-js to v2.43.5 (#10844) by @renovate
- chore(deps): update dependency rollup to v4.18.0 (#10799) by @renovate
- fix(deps): update dependency @swc/core to v1.5.27 (#10781) by @renovate
- chore(deps): update dependency @types/busboy to v1.5.4 (#10773) by @renovate
- fix(deps): update dependency vite-plugin-cjs-interop to v2.1.1 (#10787) by @renovate
- fix(deps): update dependency isbot to v5.1.9 (#10783) by @renovate
- fix(deps): update dependency vite to v5.2.13 (#10786) by @renovate
- fix(deps): update dependency isbot to v5 (#10340) by @renovate
- fix(deps): update dependency @swc/core to v1.5.7 (#10634) by @renovate
- fix(deps): update dependency find-my-way to v8.2.0 (#10631) by @renovate
- fix(deps): update dependency vite to v5.2.11 (#10606) by @renovate
- fix(deps): update dependency @whatwg-node/server to v0.9.34 (#10592) by @renovate
- chore(deps): update dependency rollup to v4.17.2 (#10346) by @renovate
- chore(deps): Update vite to 5.2.8 (#10427) by @Tobbe
- fix(deps): update dependency isbot to v3.8.0 (#10369) by @renovate
- chore(deps): update dependency rollup to v4.13.0 (#10305) by @renovate
- fix(deps): update dependency express to v4.18.3 (#10257) by @renovate
- fix(deps): update dependency vite to v5.1.6 (#10200) by @renovate
- chore(deps): acorn-loose 8.4.0 (#10042) by @Tobbe
🧹 Chore
Click to see all chore contributions
- chore(rsa): Add missing routes to test project blog (#11421) by @Tobbe
- RSC: Add blog pages to kitchen sink test project (#11420) by @Tobbe
- chore(rsc): Refactor: Clean up RSA babel transform (#11415) by @Tobbe
- chore(uploads): Reorganise, change uploads package to storage (#11411) by @dac09
- chore: Rebuild fixture (#11413) by @dac09
- chore(rsc): Refactor: Rename RscFetcher -> RscRoutes (#11409) by @Tobbe
- chore(test-project): Update postcss to 8.4.42 (#11408) by @Tobbe
- chore(rsc): Rename rscFetch to rscFetchRoutes and hardcode the rscId (#11407) by @Tobbe
- chore(router): Switch to experimental types (#11405) by @Tobbe
- chore(router): Make React a normal dependency (#11404) by @Tobbe
- feat(rsc): Return flight from RSAs (#11403) by @Tobbe
- rscRequestHandler.ts: Make BASE_PATH naming match client.ts (#11401) by @Tobbe
- chore(fixtures): Use proper name for AuthLayout component (#11399) by @Tobbe
- chore(ci): Follow up to workflow permissions (#11397) by @Josh-Walker-GM
- chore(deps): Bump 'loader-utils' within docs (#11396) by @Josh-Walker-GM
- chore(ci): Pin action dependencies by digest (#11395) by @Josh-Walker-GM
- chore(ci): More workflow permission changes (#11394) by @Josh-Walker-GM
- chore(ci): Add permissions to some workflows/jobs (#11393) by @Josh-Walker-GM
- Add OSSF scorecard action to our CI (#11392) by @Josh-Walker-GM
- chore(rsc): Rename rsf -> rsa (#11391) by @Tobbe
- chore(jobs tests): Fix a couple of TS issues (#11389) by @Tobbe
- chore(deps): bump webpack from 5.89.0 to 5.94.0 in /docs (#11388) by @dependabot
- chore(test): Update tests to make them compatible with Vite's ecosystem CI (#11384) by @Tobbe
- chore(deps): Add missing dev dep (memfs) to our vite package (#11373) by @Tobbe
- chore(jobs tests): String literal array for queues (#11370) by @Tobbe
- chore(deps): bump micromatch to 4.0.8 (#11362) by @Josh-Walker-GM
- chore(deps): bump micromatch to 4.0.8 in create-redwood-rsc-app (#11363) by @Josh-Walker-GM
- chore(deps): bump micromatch from 4.0.5 to 4.0.8 in /docs (#11358) by @dependabot
- chore(tarsync): Add watch mode to project:tarsync (#11347) by @Josh-Walker-GM
- chore(docs): Move content to main so we can deploy from that branch (#11356) by @Josh-Walker-GM
- chore(jobs test): Remove unused file. Use toContain() (#11355) by @Tobbe
- chore(listr2mock): Move comments closer to referenced code (#11354) by @Tobbe
- chore(listr2mock): Improve types and make it more capable (#11352) by @Tobbe
- chore(jobs): Add e2e test script and CI job (#11348) by @Josh-Walker-GM
- chore(cli tests): Fix include glob (#11351) by @Tobbe
- chore(tests): TypeScript Listr2 mock (#11350) by @Tobbe
- chore(jobs tests): Fix types (#11349) by @Tobbe
- Highlight output commands (#11343) by @cannikin
- chore(jobs): Mostly nitpicky changes to the Jobs PR (#11328) by @Tobbe
- refactor(testing): build 'testing' package with esbuild (#11342) by @Josh-Walker-GM
- chore(project-sync): Fix infinite looping due to package.json changes (#11341) by @Josh-Walker-GM
- chore(test-fixture): correct rebuild script string suffix substitution (#11339) by @Josh-Walker-GM
- Adds more tests! Refactor rw-jobs-worker (#11335) by @cannikin
- refactor(auth-providers): switch to esbuild for some 'web' packages (#11334) by @Josh-Walker-GM
- chore(ci): Split formatting check into separate job (#11332) by @Josh-Walker-GM
- chore(tsconfig): Properly link to api-server's tsconfig (#11330) by @Tobbe
- chore(build): Consistent tsconfig and buildinfo naming for CJS (#11326) by @Tobbe
- chore(test): Fix RSC server cell smoke test (#11327) by @Tobbe
- chore(playwright): Make RSC tests less flakey (#11325) by @Tobbe
- chore(ci): Temporary fix for format checking on all PRs (#11324) by @Josh-Walker-GM
- chore(build): Move more repetitive code into framework-tools (#11320) by @Tobbe
- fix(deps): update typescript-eslint monorepo to v8.2.0 (#10370) by @renovate
- chore(build): refactoring cjs type generation (#11312) by @Josh-Walker-GM
- chore(babel-config): Fix incorrect internal type for tsconfig paths option (#11313) by @Josh-Walker-GM
- linting: enable 'typescript-eslint/await-thenable' rule (#11311) by @Josh-Walker-GM
- chore(readme): Add my middle initials (#11310) by @Josh-Walker-GM
- chore(README): Fix formatting. One row (#11309) by @Tobbe
- chore(README): Move Kris from Maintainer to Alumni (#11308) by @Tobbe
- chore(build): build core with esbuild (#11298) by @Josh-Walker-GM
- chore(exec test): Clean up (#11302) by @Tobbe
- chore(lint): tidy up the prettier ignore (#11297) by @Josh-Walker-GM
- chore(lint): fix prettier configs and ignores (#11295) by @Josh-Walker-GM
- chore(docs): update prettier config and format docs content (#11293) by @Josh-Walker-GM
- chore(check): Refactor 'yarn check' away from being a standalone node script (#11292) by @Josh-Walker-GM
- chore: delete crowdin config file (#11291) by @Josh-Walker-GM
- chore(yarn): update to use js config for constraints (#11290) by @Josh-Walker-GM
- chore(formatting): include tasks dir in prettier (#11289) by @Josh-Walker-GM
- chore(deps): bump elliptic from 6.5.5 to 6.5.7 (#11288) by @dependabot
- chore(formatting): include .github dir in prettier (#11287) by @Josh-Walker-GM
- chore(formatting): include .changesets dir in prettier config (#11286) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/prefer-optional-chain' (#11285) by @Josh-Walker-GM
- chore(lint): first refactoring towards enabling 'require-await' rule (#11279) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/no-unnecessary-type-assertion' (#11284) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/prefer-string-starts-ends-with' (#11280) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/no-implied-eval' (#11282) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/no-duplicate-type-constituents' (#11283) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/no-unsafe-enum-comparison' (#11281) by @Josh-Walker-GM
- fix(deps): update babel monorepo (#11275) by @renovate
- chore(lint): enable '@typescript-eslint/only-throw-error' (#11260) by @Josh-Walker-GM
- chore(deps): update dependency publint to v0.2.10 (#11265) by @renovate
- chore(deps): update chore (#11264) by @renovate
- fix(deps): update docusaurus monorepo to v3.5.2 (#11272) by @renovate
- chore(lint): enable 'typescript-eslint/prefer-find' (#11259) by @Josh-Walker-GM
- chore(lint): enable 'typescript-eslint/prefer-includes' (#11261) by @Josh-Walker-GM
- chore(deps): update dependency @eslint-community/eslint-plugin-eslint-comments to v4.4.0 (#11273) by @renovate
- chore(deps): update dependency eslint-plugin-perfectionist to v3.2.0 (#11274) by @renovate
- chore(deps): update dependency publint to v0.2.10 (#11266) by @renovate
- chore(linting): enable type checked linting (#11258) by @Josh-Walker-GM
- chore(lint): lint config refactoring and re-enable some stylistic rules (#11257) by @Josh-Walker-GM
- chore(linting): Re-enable some ts-eslint rules (#11256) by @Josh-Walker-GM
- chore(lint): refactor react, react-hooks and ts-eslint usage (#11254) by @Josh-Walker-GM
- chore(formatting): Add prettier check to CI (#11253) by @Josh-Walker-GM
- chore(formatting): Formatting 2 of n (#11252) by @Josh-Walker-GM
- chore(formatting): Formatting 1 of n (#11251) by @Josh-Walker-GM
- chore(formatting): Format readme files (#11248) by @Josh-Walker-GM
- chore(record): Remove used file (#11247) by @Josh-Walker-GM
- chore(formatting): Remove 'insert_final_newline' from editor config (#11249) by @Josh-Walker-GM
- chore(lint): Split linting and formatting (#11246) by @Josh-Walker-GM
- chore(linting): Remove/fix references to non-existant files (#11245) by @Josh-Walker-GM
- chore(rsa): Use swc for parsing server actions (#11243) by @Tobbe
- chore(lint): Remove override for 'unused-imports/no-unused-imports' (#11244) by @Josh-Walker-GM
- chore(linting): Separate out framework and user linting config (#11242) by @Josh-Walker-GM
- chore(fixture): Update tailwind dep (#11241) by @Tobbe
- chore(deps): bump fast-xml-parser from 4.4.0 to 4.4.1 (#11239) by @dependabot
- chore(rsc): Switch last remaining transform-server test to inline snapshot (#11240) by @Tobbe
- chore(deps): bump axios from 1.7.3 to 1.7.4 (#11237) by @dependabot
- chore(deps): update babel monorepo (#11190) by @renovate
- chore(deps): update eslint monorepo to v9.9.0 (#11202) by @renovate
- chore(deps): update dependency tsx to v4.17.0 (#11199) by @renovate
- chore(deps): update dependency @types/vscode to v1.92.0 (#11193) by @renovate
- chore(deps): update dependency eslint-plugin-perfectionist to v3.1.3 (#11195) by @renovate
- chore(deps): update dependency eslint-plugin-jsdoc to v48.11.0 (#11194) by @renovate
- chore(deps): update dependency @playwright/test to v1.46.0 (#11191) by @renovate
- chore(deps): update dependency type-fest to v4.24.0 (#11201) by @renovate
- chore(deps): update dependency memfs to v4.11.1 (#11196) by @renovate
- chore(deps): update dependency tsx to v4.17.0 (#11200) by @renovate
- fix(deps): update docusaurus monorepo to v3.5.1 (#11208) by @renovate
- chore(deps): update dependency tstyche to v2.1.1 (#11179) by @renovate
- chore(deps): update dependency vitest to v2.0.5 (#11180) by @renovate
- chore(deps): update dependency @types/yargs to v17.0.33 (#11184) by @renovate
- chore(deps): update dependency cypress-fail-fast to v7.1.1 (#11185) by @renovate
- chore(deps): update dependency eslint-plugin-n to v17.10.2 (#11186) by @renovate
- chore(deps): update dependency lerna to v8.1.8 (#11178) by @renovate
- chore(deps): update dependency @types/ws to v8.5.12 (#11183) by @renovate
- chore(deps): update dependency @arethetypeswrong/cli to v0.15.4 (#11182) by @renovate
- chore(deps): update dependency knip to v5.27.2 (#11188) by @renovate
- chore(deps): update chore (#11181) by @renovate
- chore(rsc): Add RSA unit test for module scoped 'use server' (#11169) by @Tobbe
- chore(tsconfig.build): Fix type checking for tests etc (#11167) by @Tobbe
- chore(config): migrate renovate config (#11157) by @renovate
- chore(fixture): Rebuild test project fixture (#11166) by @Josh-Walker-GM
- chore(ci): Print full diff when check-test-project-fixture fails (#11164) by @Tobbe
- chore(rwjs/vite): Rename build script and format source (#11163) by @Tobbe
- chore(tsconfig): Format vite tsconfig (#11162) by @Tobbe
- RSC: RSA: Better match error handling with how we generally do it in RW (#11161) by @Tobbe
- RSC: RSA: Add more comments to the basic 'use server' check (#11160) by @Tobbe
- RSC: Fix red squiggles in transform client tests (#11156) by @Tobbe
- RSC: Improve type safety in RSC transform plugins (#11155) by @Tobbe
- RSC: 🦄 🦋 (#11151) by @Tobbe
- chore(test-project): Update autoprefier (#11148) by @Tobbe
- feat(crwrsca): Add support for --version/-V (#11147) by @Tobbe
- fix(crwrsca): Set env when re-spawning crwrsca (#11146) by @Tobbe
- fix(crwrsca): Use the correct version of crwrsca when spawning (#11145) by @Tobbe
- fix(crwrsca): Spell please correctly (#11143) by @Tobbe
- fix(crwrsca): Remove execa to loosen up node version requirements (#11142) by @Tobbe
- fix(crwrsca): Fix handling of positional args (#11138) by @Tobbe
- chore(crwrsca): log process.argv when --verbose (#11137) by @Tobbe
- chore(crwrsca): Update knip config to include publish.ts (#11136) by @Tobbe
- chore(crwrsca): implement basic telemetry (#11132) by @Josh-Walker-GM
- chore(crwrsca): Fix TS issues in index.ts (#11133) by @Tobbe
- chore(ci): update release label list (#11129) by @Josh-Walker-GM
- chore(rsc): Add ServerDelayForm to rsc-caching fixture (missing files) (#11130) by @Tobbe
- chore(rsc): Add ServerDelayForm to rsc-caching fixture (#11128) by @Tobbe
- Disable unused imports/ vars/ params in TypeScript compiler, opt for ESLint instead (#11125) by @peterp
- RSC: Add rsc-caching project fixture (#11120) by @Tobbe
- chore(kitchen-sink): Disable test and stories generation (#11118) by @Tobbe
- crwrsca: publish.ts script (#11114) by @Tobbe
- build(deps): bump fast-xml-parser from 4.4.0 to 4.4.1 (#11115) by @dependabot
- chore(crwrsca): npm pkg fix (#11113) by @Tobbe
- chore(changelog): tweaks to existing entries (#11111) by @Josh-Walker-GM
- chore(test-project): Fix rebuild-test-project-fixture script (#11103) by @Josh-Walker-GM
- chore(crwrsca): Get rid of vitest as we don't have any tests (for now) (#11106) by @Tobbe
- chore(crwrsca): Fix TS issue in error.ts (#11105) by @Tobbe
- chore(crwrsca): Remove tsup, use esbuild (#11104) by @Tobbe
- chore(deps): update dependency eslint-plugin-n to v17.10.1 (#11101) by @renovate
- fix(deps): update babel monorepo to v7.24.8 (#11098) by @renovate
- chore(lint): Make `yarn lint` lint both the FW and CRWRSCA (#11095) by @Tobbe
- chore(rebuild-test-project-fixture): Make addDbAuth resumable (#11097) by @Tobbe
- chore(clean): Don't clean inside nested node_modules (#11096) by @Tobbe
- chore(lint): tell eslint to ignore crwrsca (#11085) by @Tobbe
- chore(deps): update dependency nx to v19.5.3 (#11083) by @renovate
- chore(deps): update dependency dependency-cruiser to v16.3.10 (#11078) by @renovate
- chore(deps): update dependency memfs to v4.9.4 (#11074) by @renovate
- chore(types): Fix/improve types config for the router package (#11070) by @Tobbe
- Add Storybook Vite unit tests (#10768) by @arimendelow
- chore(deps): update dependency nx to v19.5.2 (#10805) by @renovate
- chore(deps): update dependency vitest to v2.0.4 (#11061) by @Josh-Walker-GM
- chore(deps): update dependency @playwright/test to v1.45.3 (#11052) by @renovate
- chore(deps): Add missing semver dep to cli-helpers (#11060) by @Tobbe
- chore(router): Fix type errors in our routes tests (#11059) by @Tobbe
- chore(RSC): Add smoke tests for retrieving headers and cookies in RSC (#11050) by @dac09
- chore(rsc): Update page generate templates to use exports fields (#11049) by @dac09
- chore(deps): update dependency type-fest to v4.23.0 (#11056) by @renovate
- chore(deps): update dependency @types/eslint to v8.56.11 (#11054) by @renovate
- RSC: Fix RscRouter import order (#11048) by @Tobbe
- chore(vite): attw: Update outdated comment (#11047) by @Tobbe
- chore(prerender types): Remove `any` type (#11046) by @Tobbe
- chore(router): attw: removed invalid copy/pasted comment (#11045) by @Tobbe
- chore(esm/cjs): Make the router package dual & move RSC router (#10957) by @dac09
- chore(deps): update chore (#11042) by @Josh-Walker-GM
- chore(deps): update dependency lerna to v8.1.7 (#11039) by @renovate
- chore(deps): update dependency ora to v8 (#11037) by @renovate
- chore(deps): update dependency jsdom to v24.1.1 (#11033) by @renovate
- chore(test): Document vitest issue in cli-helper test (#11032) by @Tobbe
- chore(vite): Don't exclude Router in attw check (#11031) by @Tobbe
- chore(deps): Remove webpack related packages (#11028) by @Josh-Walker-GM
- chore(deps): update dependency vitest to v2 (#11021) by @Josh-Walker-GM
- chore(deps): update dependency make-dir-cli to v4 (#11023) by @renovate
- chore(deps): update dependency glob to v11 (#11022) by @renovate
- chore(deps): update dependency type-fest to v4 (#11020) by @renovate
- chore(deps): update dependency tsx to v4.16.2 (#10993) by @renovate
- chore(deps): update dependency @types/vscode to v1.91.0 (#10991) by @renovate
- chore(deps): update dependency tstyche to v2.1.0 (#10992) by @renovate
- chore(deps): update dependency @playwright/test to v1.45.2 (#10989) by @renovate
- chore(deps): update dependency lerna to v8.1.6 (#10988) by @renovate
- chore(deps): update dependency @npmcli/arborist to v7.5.4 (#10981) by @renovate
- chore(deps): update dependency @types/lodash to v4.17.7 (#10982) by @renovate
- fix(deps): update dependency react-docgen to v7.0.3 (#10978) by @renovate
- fix(deps): update dependency @types/aws-lambda to v8.10.141 (#10977) by @renovate
- chore(deps): update dependency type-fest to v3.13.1 (#10970) by @renovate
- chore(publint): fix concurrently usage (#10969) by @Josh-Walker-GM
- chore(deps): update dependency publint to v0.2.9 (#10965) by @renovate
- chore(test-project): switch to tarsync (#10962) by @Josh-Walker-GM
- chore(check:pkg): Make all ESM packages have check:package script (#10956) by @dac09
- chore(esm/cjs): Make dbauth middleware a dual package (#10948) by @dac09
- chore(supabase-mw): Convert supabase-mw to dual package (#10954) by @dac09
- chore(esm/cjs): Make the rwjs/vite package dual (#10934) by @dac09
- chore(auth): More gracefully handle build failures (#10953) by @Tobbe
- chore(project-config): Verify package.json with publint and attw (#10951) by @Tobbe
- chore(apollo client): Add types for cjs imports (#10949) by @Tobbe
- chore(tsconfig.types-cjs): Specify tsBuildInfoFile location (#10950) by @Tobbe
- chore(auth): build tweaks and add missing devdep (#10947) by @Tobbe
- chore(web): tsconfig.build.json (#10946) by @Tobbe
- chore(web): Use attw args instead of custom output parsing (#10944) by @Tobbe
- chore(web): publint and attw (#10943) by @Tobbe
- chore(auth): Fix esm cjs exports and add tooling to verify correctness (#10942) by @Tobbe
- chore(middleware): Move middleware out of rwjs/vite -> rwjs/web/middleware (#10917) by @dac09
- fix(cli-helpers): Fix CJS support (#10936) by @Tobbe
- chore(cli-helpers): loadEnvFiles cleanup (#10935) by @Tobbe
- feat(cli-helpers): Add loadEnvFiles (#10931) by @Tobbe
- chore(cli-helpers): Fix dual package build. Align with new pattern (#10933) by @Tobbe
- chore(dbAuth): Fix typo in comment, and refactor dbAuthSession (#10928) by @Tobbe
- chore: apply code cleanups from typescript-eslint@v8's stylistic preset (#10924) by @JoshuaKGoldberg
- chore(structure): Remove obsolete placeholder implementation (#10923) by @Tobbe
- RSC: Test logging out (#10921) by @Tobbe
- chore(server-store): Alias imports for getting request details to `@redwoodjs/web/request` (#10904) by @dac09
- chore(ci): Cleaner log when publishing, unless failure (#10919) by @Tobbe
- chore(tests): Fix failing kitchen-sink tests by logging in (#10920) by @Tobbe
- fix(internal gql): Update types in test fixture (#10918) by @Tobbe
- debug(ci): Print publishing command output (#10916) by @Tobbe
- chore(ci): Use more supported syntax in publish_canary script (#10915) by @Tobbe
- chore(ci): Exit canary publishing if version cannot be determined (#10914) by @Tobbe
- chore(comment): Remove comment that's wrong (#10912) by @Tobbe
- chore(esm): Fix project-config dual packaging (#10901) by @dac09
- RSC: dbAuth in kitchen-sink (#10907) by @Tobbe
- RSC: No need to pass location to Router anymore (#10905) by @Tobbe
- Updates document template to use exports field for htmlTags (#10902) by @dac09
- chore(esm): Update storybook build and package.json to build dual package (#10896) by @dac09
- chore(readme): Update contributors section: Dom to Alumni (#10898) by @Tobbe
- Convert @redwoodjs/web to ESM/CJS dual package (#10868) by @dac09
- fix(deps): update dependency nodemailer to v6.9.14 (#10887) by @renovate
- chore(dbAuth): Remove unmatched parenthesis in notes (#10884) by @Tobbe
- chore(eslint-config): Remove `jest` devDep (#10878) by @Josh-Walker-GM
- chore(esm/cjs): Build rwjs/web to cjs with new build system (#10826) by @dac09
- chore(deps): update babel monorepo (#10843) by @renovate
- chore: fix deps (#10860) by @Josh-Walker-GM
- chore(ci): do not enforce changeset entry for certain milestones (#10858) by @Josh-Walker-GM
- chore(deps): update dependency tsx to v4.15.6 (#10847) by @renovate
- New plausible tag for docs.redwoodjs.com (#10851) by @cannikin
- chore(deps): update dependency memfs to v4.9.3 (#10846) by @renovate
- chore(cli): switch from `param-case` to `change-case` (#10841) by @Josh-Walker-GM
- chore(fixtures): use canary instead of latest (#10842) by @Josh-Walker-GM
- fix(deps): update docusaurus monorepo to v3.4.0 (#10837) by @renovate
- chore(deps): bump semver to 5.7.2 (#10838) by @Josh-Walker-GM
- chore(deps): bump ws (#10839) by @Josh-Walker-GM
- chore(deps): bump ws (docs) (#10840) by @Josh-Walker-GM
- chore(deps): bump @grpc/grpc-js from 1.9.3 to 1.9.15 (#10836) by @dependabot
- chore(deps): bump ws from 7.5.7 to 7.5.10 in /docs (#10835) by @dependabot
- chore(fixtures): change redwood versions in fixtures (#10832) by @Josh-Walker-GM
- chore(deps): update dependency @types/memjs to v1.3.3 (#10776) by @renovate
- chore(deps): update dependency @types/nodemailer to v6.4.15 (#10778) by @renovate
- chore(deps): update dependency @types/mjml to v4.7.4 (#10777) by @renovate
- chore(naming): Rename variable to match usage (#10767) by @Tobbe
- RSC: Wrap App around Routes in ServerEntry (#10760) by @Tobbe
- @redwoodjs/server-store and @redwoodjs/cookie-jar (#10756) by @Tobbe
- chore(spelling): Fix some spelling mistakes in vite/middleware (#10755) by @Tobbe
- chore(tasks): Switch target react version in downgrade script (#10749) by @Josh-Walker-GM
- RSC: Remove redundant code in register.ts (#10743) by @Tobbe
- RSC: Rename dist/client to dist/browser (#10744) by @Tobbe
- RSC: Add `` to kitchen-sink test project (#10742) by @Tobbe
- chore(client-entry): Slight tweaks around entry.client handling (#10741) by @Tobbe
- chore(rename): Rename output to distSsr (#10740) by @Tobbe
- RSC: Add middleware to kitchen-sink (#10735) by @Tobbe
- RSC: Remove forbidden non-null assertion (#10733) by @Tobbe
- Run smoke-tests on React 18 too (#10729) by @Tobbe
- chore(deps): bump jose from 4.15.4 to 4.15.5 (#10726) by @dependabot
- chore(ci): Track `@redwoodjs/router` in RSC CI (#10727) by @Josh-Walker-GM
- chore(deps): bump ejs from 3.1.9 to 3.1.10 (#10725) by @dependabot
- chore(logging): Remove overly verbose logging (#10723) by @Tobbe
- chore(comment): Update comment to match implementation (#10720) by @Tobbe
- chore(imports): Differentiate between React type import and method imports (#10721) by @Tobbe
- chore(ServerInject): Named imports and source format (#10714) by @Tobbe
- chore(vite): dist imports from router (#10713) by @Tobbe
- chore(auth): Separate AuthProviderState export (#10712) by @Tobbe
- chore(exports): Separate export for ServerAuthProvider (#10711) by @Tobbe
- chore(ssr/rsc): Update tsconfig when enabling streaming-ssr (#10701) by @dac09
- Always execute the component on the client (#10271) by @cannikin
- RSC: kitchen-sink: Fix css pixels unit (#10696) by @Tobbe
- RSC: kitchen-sink: Use `` from @redwoodjs/router (#10695) by @Tobbe
- RSC: Extract fetchRsc out into its own file (#10689) by @Tobbe
- chore(supabase-mw): Return tuple from initSupabaseMw to prevent accidental misconfiguration (#10687) by @dac09
- chore: Adds pageIdentifier to route manifest (#10680) by @dthyresson
- RSC: client side navigation (#10684) by @Tobbe
- RSC: Support CJS 'use client' modules (#10683) by @Tobbe
- RSC: Better typings for acorn-loose usage (#10681) by @Tobbe
- chore(router): switch to vitest (#10674) by @Josh-Walker-GM
- RSC: clientSsr changes to make usage more clear (#10676) by @Tobbe
- RSC: routes-auto-loader is not used for SSR anymore (#10672) by @Tobbe
- RSC: rscBuildEntriesFile: Only ServerEntry and Routes needed for serverEntries (#10671) by @Tobbe
- RSC: clientSsr: getServerEntryComponent() (#10670) by @Tobbe
- RSC: worker: getFunctionComponent -> getRoutesComponent (#10669) by @Tobbe
- RSC: kitchen-sink: Make the ReadFileServerCell output take up less space (#10667) by @Tobbe
- RSC: Remove commented code related to prefixToRemove transform() (#10666) by @Tobbe
- RSC: Add 'use client' to remaining client cells in kitchen-sink (#10665) by @Tobbe
- RSC: vite auto-loader: Spell out 'path' and other chores (#10662) by @Tobbe
- RSC: kitchen-sink: Make it more clear where layout ends and main content starts (#10661) by @Tobbe
- RSC: Make the kitchen-sink smoke-test more robust/resilient (#10660) by @Tobbe
- RSC: Source format of EmptyUsersCell in kitchen-sink (#10658) by @Tobbe
- chore(__fixtures__): Follow-up: Make test projects match newer CRWA template (#10657) by @Tobbe
- chore(__fixtures__): Make test projects match newer CRWA template (#10655) by @Tobbe
- chore(ssr): Make entry.client.tsx better match standard entry.client (#10652) by @Tobbe
- chore(ci): Update rsc readme (#10650) by @Tobbe
- chore(serverAuth): Rename serverAuthContext to serverAuthState where relevant (#10643) by @dac09
- Add missing rwjs/auth deps (#10648) by @Tobbe
- chore(deps): update dependency @types/busboy to v1.5.4 (#10594) by @renovate
- chore(router): Add more code comments to analyzeRoutes (#10569) by @Tobbe
- RSC: getViteConfig in rscWorker (#10567) by @Tobbe
- Split RSC and RSA handling in rscWorker (#10565) by @Tobbe
- RSC: Extract the fetchRSC function (#10564) by @Tobbe
- RSC: Fix TODO regarding SSR in client.ts (#10562) by @Tobbe
- chore(docs): Update dbAuth and Supabase middleware READMEs (#10552) by @Tobbe
- chore(deps): Upgrade React 19 to beta 20240508 (#10560) by @Tobbe
- Revert "chore(deps): React beta 20240508 (#10558)" (#10559) by @Tobbe
- chore(deps): React beta 20240508 (#10558) by @Tobbe
- chore(middleware): Format code and comments and fix comment grammar (#10554) by @Tobbe
- Rename og component assets from *.png.jsx to just *.og.jsx (#10542) by @cannikin
- chore(linting): fix minor lint warnings (#10545) by @Josh-Walker-GM
- RSC: Chore: Need to await getEntries in console.log (#10541) by @Tobbe
- RSC: Remove one level of nesting for server-router (#10539) by @Tobbe
- RSC: Clean up overly verbose logging (#10536) by @Tobbe
- chore(router): Refactor: Move analyzeRoutes to separate file (#10535) by @Tobbe
- chore(server-auth): Automagic middleware auth on supported providers (dbAuth so far) (#10529) by @dac09
- chore(deps): Stop using PR build of rehackt - use proper version (#10523) by @Tobbe
- RSC: Rename RSC CI test case (#10521) by @Tobbe
- RSC: Add RSC+SSR smoke test to CI (#10477) by @Tobbe
- chore(tests): Fix packages/web tests (#10517) by @Tobbe
- chore(deps): Upgrade to React canary 20240424 (#10513) by @Tobbe
- fix(deps): update React to latest canary 19.x (#10496) by @Tobbe
- Revert React 19 upgrade (#10482 and #10491) (#10495) by @Tobbe
- RSC: Update test projects to use new @apollo/client-react-streaming (#10488) by @Tobbe
- RSC: Remove unused vite patch from test-project-rsa (#10487) by @Tobbe
- chore(ssr): Switch to use `@apollo/client-react-streaming` package (#10484) by @Josh-Walker-GM
- RSC: Clean up some comments and logs (#10480) by @Tobbe
- chore(tests): add use location typetests to prevent regressions (#10474) by @dac09
- chore(filepath): Use node:url to convert to file path (#10475) by @Tobbe
- Revert "chore(location): Accept URL-like object" (#10473) by @dac09
- RSC: Be consistent about inlining rollup input (#10472) by @Tobbe
- chore(paths): Remove outdated comment (#10471) by @Tobbe
- chore(location): Accept URL-like object (#10467) by @Tobbe
- chore(dbauth-mw): Refactor web side dbAuth creation (#10460) by @dac09
- chore(router): Prevent circular dependency for namedRoutes (#10463) by @Tobbe
- chore(router): route-validators: Better types and clean up comments (#10462) by @Tobbe
- chore(refactor): Split the router out into smaller logical units (#10434) by @Tobbe
- RSC: Explain noExternal vite config option (#10429) by @Tobbe
- chore(web): Fix .d.ts overwrite build issue (#10431) by @Tobbe
- chore(rsc): simplify `noExternals` config (#10220) by @jtoar
- chore(route-manifest): Add relativeFilePath to route manifest (#10416) by @dac09
- chore(middleware): Fix some internal types, spelling etc (#10415) by @Tobbe
- chore(types): Update types for registerMiddleware to be async also (#10414) by @dac09
- RSC: Add comment explaining `use()` (#10411) by @Tobbe
- fix(deps): update dependency vite to v5.1.7 [security] (#10408) by @renovate
- chore(deps): update chore (#10332) by @renovate
- chore(deps): update dependency @playwright/test to v1.42.1 (#10333) by @renovate
- chore(deps): bump express from 4.18.3 to 4.19.2 in /packages/vite (#10324) by @dependabot
- RSC: Only shim webpack when RSC is enabled (#10285) by @Tobbe
- chore(types): Type react-dom/server.edge (#10284) by @Tobbe
- RSC: Refactor forRsc camelcase and add rscEnabled (#10282) by @Tobbe
- chore(test-project): Update autoprefixer and postcss versions (#10281) by @Tobbe
- RSC: serve.js: Extract "enabled" var rsc and streaming (#10279) by @Tobbe
- Don't try to start the api server unless RSC is enabled (#10275) by @cannikin
- chore(ci): remove unused workflows (#10250) by