From 3c805e7da3ae1c856d9cecc31f2a0385ae130303 Mon Sep 17 00:00:00 2001
From: Kafuu-Chinocya <38375027+Kafuu-Chinocya@users.noreply.github.com>
Date: Tue, 15 Apr 2025 15:59:36 +0800
Subject: [PATCH 01/25] fix(reference): missing parameter in hydrateRoot
(#7724)
---
src/content/reference/react-dom/client/hydrateRoot.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/content/reference/react-dom/client/hydrateRoot.md b/src/content/reference/react-dom/client/hydrateRoot.md
index 99190b03a..b74e2c38e 100644
--- a/src/content/reference/react-dom/client/hydrateRoot.md
+++ b/src/content/reference/react-dom/client/hydrateRoot.md
@@ -378,12 +378,13 @@ It is uncommon to call [`root.render`](#root-render) on a hydrated root. Usually
By default, React will log all errors to the console. To implement your own error reporting, you can provide the optional error handler root options `onUncaughtError`, `onCaughtError` and `onRecoverableError`:
-```js [[1, 6, "onCaughtError"], [2, 6, "error", 1], [3, 6, "errorInfo"], [4, 10, "componentStack", 15]]
+```js [[1, 7, "onCaughtError"], [2, 7, "error", 1], [3, 7, "errorInfo"], [4, 11, "componentStack", 15]]
import { hydrateRoot } from "react-dom/client";
+import App from "./App.js";
import { reportCaughtError } from "./reportError";
const container = document.getElementById("root");
-const root = hydrateRoot(container, {
+const root = hydrateRoot(container, , {
onCaughtError: (error, errorInfo) => {
if (error.message !== "Known error") {
reportCaughtError({
From 84261aa85c3467c4594715b41a8498c7f7772a54 Mon Sep 17 00:00:00 2001
From: Valentin <3774962+val1984@users.noreply.github.com>
Date: Tue, 15 Apr 2025 17:13:42 +0200
Subject: [PATCH 02/25] Update versions to mention the latest version: 19.1
(#7739)
GitHub Copilot web search replies that React latest version is 19.0 because 19.1 is not present in this page
---
src/content/versions.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/content/versions.md b/src/content/versions.md
index 8530f6324..54bc309f1 100644
--- a/src/content/versions.md
+++ b/src/content/versions.md
@@ -11,7 +11,7 @@ The React docs at [react.dev](https://react.dev) provide documentation for the l
We aim to keep the docs updated within major versions, and do not publish versions for each minor or patch version. When a new major is released, we archive the docs for the previous version as `x.react.dev`. See our [versioning policy](/community/versioning-policy) for more info.
You can find an archive of previous major versions below.
-## Latest version: 19.0 {/*latest-version*/}
+## Latest version: 19.1 {/*latest-version*/}
- [react.dev](https://react.dev) {/*docs-19*/}
@@ -51,6 +51,7 @@ For versions older than React 15, see [15.react.dev](https://15.react.dev).
- [React 19 Deep Dive: Coordinating HTML](https://www.youtube.com/watch?v=IBBN-s77YSI)
**Releases**
+- [v19.1.0 (March, 2025)](https://github.com/facebook/react/blob/main/CHANGELOG.md#1910-march-28-2025)
- [v19.0.0 (December, 2024)](https://github.com/facebook/react/blob/main/CHANGELOG.md#1900-december-5-2024)
### React 18 {/*react-18*/}
From 947681ea20f278c64200ea1107062765948f5a10 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Kaya?=
Date: Tue, 15 Apr 2025 15:25:35 +0000
Subject: [PATCH 03/25] docs: fix a typo in the docs (#7736)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: “Clatron” <“bariskaya1516@gmail.com”>
---
src/content/learn/creating-a-react-app.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/content/learn/creating-a-react-app.md b/src/content/learn/creating-a-react-app.md
index fc6c956d4..e51ec8b63 100644
--- a/src/content/learn/creating-a-react-app.md
+++ b/src/content/learn/creating-a-react-app.md
@@ -106,7 +106,7 @@ If your app has constraints not well-served by existing frameworks, you prefer t
Starting from scratch gives you more flexibility, but does require that you make choices on which tools to use for routing, data fetching, and other common usage patterns. It's a lot like building your own framework, instead of using a framework that already exists. The [frameworks we recommend](#full-stack-frameworks) have built-in solutions for these problems.
-If you want to build your own solutions, see our guide to [build a React app from Scratch](/learn/build-a-react-app-from-scratch) for instructions on how to set up a new React project starting with a built tool like [Vite](https://vite.dev/), [Parcel](https://parceljs.org/), or [RSbuild](https://rsbuild.dev/).
+If you want to build your own solutions, see our guide to [build a React app from Scratch](/learn/build-a-react-app-from-scratch) for instructions on how to set up a new React project starting with a build tool like [Vite](https://vite.dev/), [Parcel](https://parceljs.org/), or [RSbuild](https://rsbuild.dev/).
-----
From 4bea66b021679e307f3ccb05fdd8fbdf80dd04d7 Mon Sep 17 00:00:00 2001
From: John Kapantzakis
Date: Wed, 16 Apr 2025 23:09:11 +0300
Subject: [PATCH 04/25] Change the word 'Function' to 'Component' (#7741)
* Change the word 'Function' to 'Component'
* Trigger actions
---
src/content/reference/rsc/server-functions.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/content/reference/rsc/server-functions.md b/src/content/reference/rsc/server-functions.md
index d29693894..9cfcdb33b 100644
--- a/src/content/reference/rsc/server-functions.md
+++ b/src/content/reference/rsc/server-functions.md
@@ -54,7 +54,7 @@ function EmptyNote () {
}
```
-When React renders the `EmptyNote` Server Function, it will create a reference to the `createNoteAction` function, and pass that reference to the `Button` Client Component. When the button is clicked, React will send a request to the server to execute the `createNoteAction` function with the reference provided:
+When React renders the `EmptyNote` Server Component, it will create a reference to the `createNoteAction` function, and pass that reference to the `Button` Client Component. When the button is clicked, React will send a request to the server to execute the `createNoteAction` function with the reference provided:
```js {5}
"use client";
From 4c54ac95800fe1c8b9c2fe9c9926ae8de91e1f18 Mon Sep 17 00:00:00 2001
From: lauren
Date: Mon, 21 Apr 2025 15:35:55 -0400
Subject: [PATCH 05/25] Fix missing Sunsetting CRA entry in sidebar (#7755)
This was missed in the last blog post. Also fixed the incorrect date.
---
src/content/blog/index.md | 4 ++--
src/sidebarBlog.json | 7 +++++++
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/content/blog/index.md b/src/content/blog/index.md
index f7bbe76f3..f74a57ba6 100644
--- a/src/content/blog/index.md
+++ b/src/content/blog/index.md
@@ -4,7 +4,7 @@ title: React Blog
-This blog is the official source for the updates from the React team. Anything important, including release notes or deprecation notices, will be posted here first.
+This blog is the official source for the updates from the React team. Anything important, including release notes or deprecation notices, will be posted here first.
You can also follow the [@react.dev](https://bsky.app/profile/react.dev) account on Bluesky, or [@reactjs](https://twitter.com/reactjs) account on Twitter, but you won’t miss anything essential if you only read this blog.
@@ -12,7 +12,7 @@ You can also follow the [@react.dev](https://bsky.app/profile/react.dev) account
-
+
Today, we’re deprecating Create React App for new apps, and encouraging existing apps to migrate to a framework, or to migrate to a build tool like Vite, Parcel, or RSBuild. We’re also providing docs for when a framework isn’t a good fit for your project, you want to build your own framework, or you just want to learn how React works by building a React app from scratch ...
diff --git a/src/sidebarBlog.json b/src/sidebarBlog.json
index 5562a5a6c..567988023 100644
--- a/src/sidebarBlog.json
+++ b/src/sidebarBlog.json
@@ -11,6 +11,13 @@
"path": "/blog",
"skipBreadcrumb": true,
"routes": [
+ {
+ "title": "Sunsetting Create React App",
+ "titleForHomepage": "Sunsetting Create React App",
+ "icon": "blog",
+ "date": "February 14, 2025",
+ "path": "/blog/2025/02/14/sunsetting-create-react-app"
+ },
{
"title": "React 19",
"titleForHomepage": "React 19",
From 3a88efd82ac6e3e5a2bc31430fbe20c07cfb6ef2 Mon Sep 17 00:00:00 2001
From: lauren
Date: Mon, 21 Apr 2025 16:15:49 -0400
Subject: [PATCH 06/25] Compiler blog post (#7756)
Blog post for Compiler RC
---
next-env.d.ts | 3 +-
.../blog/2025/04/21/react-compiler-rc.md | 124 ++++++++++++++++++
src/content/blog/index.md | 7 +
src/content/learn/react-compiler.md | 8 +-
src/sidebarBlog.json | 7 +
5 files changed, 141 insertions(+), 8 deletions(-)
create mode 100644 src/content/blog/2025/04/21/react-compiler-rc.md
diff --git a/next-env.d.ts b/next-env.d.ts
index 3cd7048ed..52e831b43 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,5 @@
///
///
-///
// NOTE: This file should not be edited
-// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+// see https://nextjs.org/docs/pages/api-reference/config/typescript for more information.
diff --git a/src/content/blog/2025/04/21/react-compiler-rc.md b/src/content/blog/2025/04/21/react-compiler-rc.md
new file mode 100644
index 000000000..ab4790129
--- /dev/null
+++ b/src/content/blog/2025/04/21/react-compiler-rc.md
@@ -0,0 +1,124 @@
+---
+title: "React Compiler RC"
+author: Lauren Tan and Mofei Zhang
+date: 2025/04/21
+description: We are releasing the compiler's first Release Candidate (RC) today.
+
+---
+
+April 21, 2025 by [Lauren Tan](https://x.com/potetotes) and [Mofei Zhang](https://x.com/zmofei).
+
+---
+
+
+
+The React team is excited to share new updates:
+
+
+
+1. We're publishing React Compiler RC today, in preparation of the compiler's stable release.
+2. We're simplifying your eslint setup by merging `eslint-plugin-react-compiler` into `eslint-plugin-react-hooks`.
+3. We're working with the swc and oxc teams to add plugins to allow for Babel-free build pipelines.
+
+---
+
+[React Compiler](https://react.dev/learn/react-compiler) is a build-time tool that optimizes your React app through automatic memoization. Last year, we published React Compiler’s [first beta](https://react.dev/blog/2024/10/21/react-compiler-beta-release) and received lots of great feedback and contributions. We’re excited about the wins we’ve seen from folks adopting the compiler (see case studies from [Sanity Studio](https://github.com/reactwg/react-compiler/discussions/33) and [Wakelet](https://github.com/reactwg/react-compiler/discussions/52)) and are working towards a stable release.
+
+We are releasing the compiler's first Release Candidate (RC) today. The RC is intended to be a stable and near-final version of the compiler, and safe to use in production for all React users.
+
+## Use React Compiler RC today {/*use-react-compiler-rc-today*/}
+To install the RC:
+
+npm
+
+{`npm install --save-dev --save-exact babel-plugin-react-compiler@rc`}
+
+
+pnpm
+
+{`pnpm add --save-dev --save-exact babel-plugin-react-compiler@rc`}
+
+
+yarn
+
+{`yarn add --dev --exact babel-plugin-react-compiler@rc`}
+
+
+As part of the RC, we've been making React Compiler easier to add to your projects and added optimizations to how the compiler generates memoization. React Complier now supports optional chains and array indices as dependencies. We're exploring how to infer even more dependencies like equality checks and string interpolation. These improvements ultimately result in fewer re-renders and more responsive UIs.
+
+We have also heard from the community that the ref-in-render validation sometimes has false positives. Since as a general philosophy we want you to be able to fully trust in the compiler's error messages and hints, we are turning it off by default for now. We will keep working to improve this validation, and we will re-enable it in a follow up release.
+
+You can find more details on using the Compiler in [our docs](https://react.dev/learn/react-compiler).
+
+### Backwards Compatibility {/*backwards-compatibility*/}
+As noted in the Beta announcement, React Compiler is compatible with React 17 and up. If you are not yet on React 19, you can use React Compiler by specifying a minimum target in your compiler config, and adding `react-compiler-runtime` as a dependency. You can find docs on this [here](https://react.dev/learn/react-compiler#using-react-compiler-with-react-17-or-18).
+
+## Migrating from eslint-plugin-react-compiler to eslint-plugin-react-hooks {/*migrating-from-eslint-plugin-react-compiler-to-eslint-plugin-react-hooks*/}
+To install eslint-plugin-react-hooks:
+
+npm
+
+{`npm install --save-dev eslint-plugin-react-hooks@^6.0.0`}
+
+
+pnpm
+
+{`pnpm add --save-dev eslint-plugin-react-hooks@^6.0.0`}
+
+
+yarn
+
+{`yarn add --dev eslint-plugin-react-hooks@^6.0.0`}
+
+
+`eslint-plugin-react-hooks` 5.2.0 has been ported to TypeScript, which allowed us to improve the type-safety of the plugin. In the 6.0.0 release of the ESLint plugin, the compiler lint rule has now been merged in. If you were previously using `eslint-plugin-react-compiler`, this means you can now use a single ESLint plugin in your codebase. Many thanks to [@michaelfaith](https://bsky.app/profile/michael.faith) for contributing to this improvement!
+
+```js
+// eslint.config.js
+import * as reactHooks from 'eslint-plugin-react-hooks';
+
+export default [
+ // Flat Config (eslint 9+)
+ reactHooks.configs.recommended,
+
+ // Legacy Config
+ reactHooks.configs['recommended-latest']
+];
+```
+
+The linter does not require the compiler to be installed, so there's no risk in upgrading eslint-plugin-react-hooks. We recommend everyone upgrade today.
+
+## swc and oxc support (experimental) {/*swc-and-oxc-support-experimental*/}
+We have also been collaborating with Kang Dongyoong ([@kdy1dev](https://x.com/kdy1dev)) from the [swc](https://swc.rs/) team on adding support for React Compiler as an swc plugin. As part of the RC release, you can integrate the compiler into your [Next.js app with swc](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactCompiler) instead of babel. We are also working with the [oxc](https://oxc.rs/) team to [add support for the compiler](https://github.com/oxc-project/oxc/issues/10048), which should allow more people to use the compiler if they have already migrated off of Babel.
+
+Next.js users can upgrade to [15.3.1](https://github.com/vercel/next.js/releases/tag/v15.3.1) or greater to try this out. If you have already enabled the compiler in your Next.js's config, swc support will be enabled automatically.
+
+Vite users can continue to use [vite-plugin-react](https://github.com/vitejs/vite-plugin-react) to enable the compiler, by adding it as a [Babel plugin](https://react.dev/learn/react-compiler#usage-with-vite). Once [rolldown](https://github.com/rolldown/rolldown) is officially released and supported in Vite and oxc support is added for React Compiler, we'll update the docs with information on how to migrate.
+
+## Upgrading React Compiler {/*upgrading-react-compiler*/}
+React Compiler works best when the auto-memoization applied is strictly for performance. Future versions of the compiler may change how memoization is applied, for example it could become more granular and precise.
+
+However, because product code may sometimes break the [rules of React](https://react.dev/reference/rules) in ways that aren't always statically detectable in JavaScript, changing memoization can occasionally have unexpected results. For example, a previously memoized value might be used as a dependency for a useEffect somewhere in the component tree. Changing how or whether this value is memoized can cause over or under-firing of that useEffect. While we encourage [useEffect only for synchronization](https://react.dev/learn/synchronizing-with-effects), your codebase may have useEffects that cover other use-cases. For example you may have an effect that runs in response to some value changing (breaks the rules of React).
+
+In other words, changing memoization may under rare circumstances cause unexpected behavior. For this reason, we recommend following the Rules of React and employing continuous end-to-end testing of your app so you can upgrade the compiler with confidence and identify any rules of React violations that might cause issues.
+
+If you don't have good test coverage, we recommend pinning the compiler to an exact version (eg `19.0.0`) rather than a SemVer range (eg `^19.0.0`). You can do this by passing the `--save-exact` (npm/pnpm) or `--exact` flags (yarn) when upgrading the compiler. You should then do any upgrades of the compiler manually, taking care to check that your app still works as expected.
+
+## Roadmap to Stable {/*roadmap-to-stable*/}
+*This is not a final roadmap, and is subject to change.*
+
+After a period of final feedback from the community on the RC, we plan on a Stable Release for the compiler.
+
+* ✅ Experimental: Released at React Conf 2024, primarily for feedback from application developers.
+* ✅ Public Beta: Available today, for feedback from library authors.
+* ✅ Release Candidate (RC): React Compiler works for the majority of rule-following apps and libraries without issue.
+* General Availability: After final feedback period from the community.
+
+Post-Stable, we plan to add more compiler optimizations and improvements. This includes both continual improvements to automatic memoization, and new optimizations altogether, with minimal to no change of product code. Each upgrade will continue to improve performance and add better handling of diverse JavaScript and React patterns.
+
+## Feedback {/*feedback*/}
+During the RC period, we encourage all React users to try the compiler and provide feedback in the React repo. Please [open an issue](https://github.com/facebook/react/issues) if you encounter any bugs or unexpected behavior. If you have a general question or suggestion, please post them in the [React Compiler Working Group](https://github.com/reactwg/react-compiler/discussions).
+
+---
+
+Thanks to [Joe Savona](https://x.com/en_JS), [Jason Bonta](https://twitter.com/someextent), [Jimmy Lai](https://x.com/feedthejim), and [Kang Dongyoon](https://x.com/kdy1dev) (@kdy1dev) for reviewing and editing this post.
diff --git a/src/content/blog/index.md b/src/content/blog/index.md
index f74a57ba6..4707e5f48 100644
--- a/src/content/blog/index.md
+++ b/src/content/blog/index.md
@@ -12,6 +12,13 @@ You can also follow the [@react.dev](https://bsky.app/profile/react.dev) account
+
+
+We are releasing the compiler's first Release Candidate (RC) today. ...
+
+
+
+
Today, we’re deprecating Create React App for new apps, and encouraging existing apps to migrate to a framework, or to migrate to a build tool like Vite, Parcel, or RSBuild. We’re also providing docs for when a framework isn’t a good fit for your project, you want to build your own framework, or you just want to learn how React works by building a React app from scratch ...
diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md
index 7c46673e7..143c859a1 100644
--- a/src/content/learn/react-compiler.md
+++ b/src/content/learn/react-compiler.md
@@ -6,10 +6,6 @@ title: React Compiler
This page will give you an introduction to React Compiler and how to try it out successfully.
-
-These docs are still a work in progress. More documentation is available in the [React Compiler Working Group repo](https://github.com/reactwg/react-compiler/discussions), and will be upstreamed into these docs when they are more stable.
-
-
* Getting started with the compiler
@@ -19,9 +15,9 @@ These docs are still a work in progress. More documentation is available in the
-React Compiler is a new compiler currently in Beta, that we've open sourced to get early feedback from the community. While it has been used in production at companies like Meta, rolling out the compiler to production for your app will depend on the health of your codebase and how well you’ve followed the [Rules of React](/reference/rules).
+React Compiler is a new compiler currently in RC, that we've open sourced to get feedback from the community. We now recommend everyone to use the compiler.
-The latest Beta release can be found with the `@beta` tag, and daily experimental releases with `@experimental`.
+The latest RC release can be found with the `@rc` tag, and daily experimental releases with `@experimental`.
React Compiler is a new compiler that we've open sourced to get early feedback from the community. It is a build-time only tool that automatically optimizes your React app. It works with plain JavaScript, and understands the [Rules of React](/reference/rules), so you don't need to rewrite any code to use it.
diff --git a/src/sidebarBlog.json b/src/sidebarBlog.json
index 567988023..33a474766 100644
--- a/src/sidebarBlog.json
+++ b/src/sidebarBlog.json
@@ -11,6 +11,13 @@
"path": "/blog",
"skipBreadcrumb": true,
"routes": [
+ {
+ "title": "React Compiler RC",
+ "titleForHomepage": "React Compiler RC",
+ "icon": "blog",
+ "date": "April 21, 2025",
+ "path": "/blog/2025/04/21/react-compiler-rc"
+ },
{
"title": "Sunsetting Create React App",
"titleForHomepage": "Sunsetting Create React App",
From c1e568153e661d7236c5d6070681a0573fad1ec4 Mon Sep 17 00:00:00 2001
From: lauren
Date: Mon, 21 Apr 2025 17:03:33 -0400
Subject: [PATCH 07/25] Compiler blog post edits (#7758)
Tweaks to the post.
---
.../2024/10/21/react-compiler-beta-release.md | 8 +++++++
.../blog/2025/04/21/react-compiler-rc.md | 24 ++++++++++---------
2 files changed, 21 insertions(+), 11 deletions(-)
diff --git a/src/content/blog/2024/10/21/react-compiler-beta-release.md b/src/content/blog/2024/10/21/react-compiler-beta-release.md
index f5a870b22..58e6b24aa 100644
--- a/src/content/blog/2024/10/21/react-compiler-beta-release.md
+++ b/src/content/blog/2024/10/21/react-compiler-beta-release.md
@@ -10,6 +10,14 @@ October 21, 2024 by [Lauren Tan](https://twitter.com/potetotes).
---
+
+
+### React Compiler is now in RC! {/*react-compiler-is-now-in-rc*/}
+
+Please see the [RC blog post](/blog/2025/04/21/react-compiler-rc) for details.
+
+
+
The React team is excited to share new updates:
diff --git a/src/content/blog/2025/04/21/react-compiler-rc.md b/src/content/blog/2025/04/21/react-compiler-rc.md
index ab4790129..fe9e3c6c1 100644
--- a/src/content/blog/2025/04/21/react-compiler-rc.md
+++ b/src/content/blog/2025/04/21/react-compiler-rc.md
@@ -17,8 +17,8 @@ The React team is excited to share new updates:
1. We're publishing React Compiler RC today, in preparation of the compiler's stable release.
-2. We're simplifying your eslint setup by merging `eslint-plugin-react-compiler` into `eslint-plugin-react-hooks`.
-3. We're working with the swc and oxc teams to add plugins to allow for Babel-free build pipelines.
+2. We're merging `eslint-plugin-react-compiler` into `eslint-plugin-react-hooks`.
+3. We've added support for swc and are working with oxc to support Babel-free builds.
---
@@ -54,25 +54,25 @@ You can find more details on using the Compiler in [our docs](https://react.dev/
As noted in the Beta announcement, React Compiler is compatible with React 17 and up. If you are not yet on React 19, you can use React Compiler by specifying a minimum target in your compiler config, and adding `react-compiler-runtime` as a dependency. You can find docs on this [here](https://react.dev/learn/react-compiler#using-react-compiler-with-react-17-or-18).
## Migrating from eslint-plugin-react-compiler to eslint-plugin-react-hooks {/*migrating-from-eslint-plugin-react-compiler-to-eslint-plugin-react-hooks*/}
-To install eslint-plugin-react-hooks:
+If you have already installed eslint-plugin-react-compiler, you can now remove it and use `eslint-plugin-react-hooks@^6.0.0-rc.1`. Many thanks to [@michaelfaith](https://bsky.app/profile/michael.faith) for contributing to this improvement!
+
+To install:
npm
-{`npm install --save-dev eslint-plugin-react-hooks@^6.0.0`}
+{`npm install --save-dev eslint-plugin-react-hooks@^6.0.0-rc.1`}
pnpm
-{`pnpm add --save-dev eslint-plugin-react-hooks@^6.0.0`}
+{`pnpm add --save-dev eslint-plugin-react-hooks@^6.0.0-rc.1`}
yarn
-{`yarn add --dev eslint-plugin-react-hooks@^6.0.0`}
+{`yarn add --dev eslint-plugin-react-hooks@^6.0.0-rc.1`}
-`eslint-plugin-react-hooks` 5.2.0 has been ported to TypeScript, which allowed us to improve the type-safety of the plugin. In the 6.0.0 release of the ESLint plugin, the compiler lint rule has now been merged in. If you were previously using `eslint-plugin-react-compiler`, this means you can now use a single ESLint plugin in your codebase. Many thanks to [@michaelfaith](https://bsky.app/profile/michael.faith) for contributing to this improvement!
-
```js
// eslint.config.js
import * as reactHooks from 'eslint-plugin-react-hooks';
@@ -88,12 +88,14 @@ export default [
The linter does not require the compiler to be installed, so there's no risk in upgrading eslint-plugin-react-hooks. We recommend everyone upgrade today.
-## swc and oxc support (experimental) {/*swc-and-oxc-support-experimental*/}
-We have also been collaborating with Kang Dongyoong ([@kdy1dev](https://x.com/kdy1dev)) from the [swc](https://swc.rs/) team on adding support for React Compiler as an swc plugin. As part of the RC release, you can integrate the compiler into your [Next.js app with swc](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactCompiler) instead of babel. We are also working with the [oxc](https://oxc.rs/) team to [add support for the compiler](https://github.com/oxc-project/oxc/issues/10048), which should allow more people to use the compiler if they have already migrated off of Babel.
+## swc support (experimental) {/*swc-support-experimental*/}
+React Compiler can be installed across [several build tools](/learn/react-compiler#installation) such as Babel, Vite, and Rsbuild.
+
+In addition to those tools, we have been collaborating with Kang Dongyoong ([@kdy1dev](https://x.com/kdy1dev)) from the [swc](https://swc.rs/) team on adding additional support for React Compiler as an swc plugin. As part of the RC release, you can now integrate the compiler into your [Next.js app with swc](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactCompiler) instead of Babel.
Next.js users can upgrade to [15.3.1](https://github.com/vercel/next.js/releases/tag/v15.3.1) or greater to try this out. If you have already enabled the compiler in your Next.js's config, swc support will be enabled automatically.
-Vite users can continue to use [vite-plugin-react](https://github.com/vitejs/vite-plugin-react) to enable the compiler, by adding it as a [Babel plugin](https://react.dev/learn/react-compiler#usage-with-vite). Once [rolldown](https://github.com/rolldown/rolldown) is officially released and supported in Vite and oxc support is added for React Compiler, we'll update the docs with information on how to migrate.
+Vite users can continue to use [vite-plugin-react](https://github.com/vitejs/vite-plugin-react) to enable the compiler, by adding it as a [Babel plugin](https://react.dev/learn/react-compiler#usage-with-vite). We are also working with the [oxc](https://oxc.rs/) team to [add support for the compiler](https://github.com/oxc-project/oxc/issues/10048). Once [rolldown](https://github.com/rolldown/rolldown) is officially released and supported in Vite and oxc support is added for React Compiler, we'll update the docs with information on how to migrate.
## Upgrading React Compiler {/*upgrading-react-compiler*/}
React Compiler works best when the auto-memoization applied is strictly for performance. Future versions of the compiler may change how memoization is applied, for example it could become more granular and precise.
From 663df77853a11e52708341003fc67e750846bfd1 Mon Sep 17 00:00:00 2001
From: lauren
Date: Mon, 21 Apr 2025 17:03:41 -0400
Subject: [PATCH 08/25] React compiler doc updates (#7759)
* Compiler blog post edits
Tweaks to the post.
* React compiler doc updates
---
src/content/learn/react-compiler.md | 56 ++++++++---------------------
1 file changed, 14 insertions(+), 42 deletions(-)
diff --git a/src/content/learn/react-compiler.md b/src/content/learn/react-compiler.md
index 143c859a1..9d4e19d21 100644
--- a/src/content/learn/react-compiler.md
+++ b/src/content/learn/react-compiler.md
@@ -15,25 +15,25 @@ This page will give you an introduction to React Compiler and how to try it out
-React Compiler is a new compiler currently in RC, that we've open sourced to get feedback from the community. We now recommend everyone to use the compiler.
+React Compiler is a new compiler currently in RC, that we've open sourced to get feedback from the community. We now recommend everyone to try the compiler and provide feedback.
The latest RC release can be found with the `@rc` tag, and daily experimental releases with `@experimental`.
-React Compiler is a new compiler that we've open sourced to get early feedback from the community. It is a build-time only tool that automatically optimizes your React app. It works with plain JavaScript, and understands the [Rules of React](/reference/rules), so you don't need to rewrite any code to use it.
+React Compiler is a new compiler that we've open sourced to get feedback from the community. It is a build-time only tool that automatically optimizes your React app. It works with plain JavaScript, and understands the [Rules of React](/reference/rules), so you don't need to rewrite any code to use it.
-The compiler also includes an [ESLint plugin](#installing-eslint-plugin-react-compiler) that surfaces the analysis from the compiler right in your editor. **We strongly recommend everyone use the linter today.** The linter does not require that you have the compiler installed, so you can use it even if you are not ready to try out the compiler.
+eslint-plugin-react-hooks also includes an [ESLint rule](#installing-eslint-plugin-react-compiler) that surfaces the analysis from the compiler right in your editor. **We strongly recommend everyone use the linter today.** The linter does not require that you have the compiler installed, so you can use it even if you are not ready to try out the compiler.
-The compiler is currently released as `beta`, and is available to try out on React 17+ apps and libraries. To install the Beta:
+The compiler is currently released as `rc`, and is available to try out on React 17+ apps and libraries. To install the RC:
-npm install -D babel-plugin-react-compiler@beta eslint-plugin-react-compiler@beta
+{`npm install -D babel-plugin-react-compiler@rc eslint-plugin-react-hooks@^6.0.0-rc.1`}
Or, if you're using Yarn:
-yarn add -D babel-plugin-react-compiler@beta eslint-plugin-react-compiler@beta
+{`yarn add -D babel-plugin-react-compiler@rc eslint-plugin-react-hooks@^6.0.0-rc.1`}
If you are not using React 19 yet, please see [the section below](#using-react-compiler-with-react-17-or-18) for further instructions.
@@ -112,7 +112,7 @@ So if `expensivelyProcessAReallyLargeArrayOfObjects` was used in many different
### Should I try out the compiler? {/*should-i-try-out-the-compiler*/}
-Please note that the compiler is still in Beta and has many rough edges. While it has been used in production at companies like Meta, rolling out the compiler to production for your app will depend on the health of your codebase and how well you've followed the [Rules of React](/reference/rules).
+The compiler is now in RC and has been tested extensively in production. While it has been used in production at companies like Meta, rolling out the compiler to production for your app will depend on the health of your codebase and how well you've followed the [Rules of React](/reference/rules).
**You don't have to rush into using the compiler now. It's okay to wait until it reaches a stable release before adopting it.** However, we do appreciate trying it out in small experiments in your apps so that you can [provide feedback](#reporting-issues) to us to help make the compiler better.
@@ -120,43 +120,15 @@ Please note that the compiler is still in Beta and has many rough edges. While i
In addition to these docs, we recommend checking the [React Compiler Working Group](https://github.com/reactwg/react-compiler) for additional information and discussion about the compiler.
-### Installing eslint-plugin-react-compiler {/*installing-eslint-plugin-react-compiler*/}
+### Installing eslint-plugin-react-hooks {/*installing-eslint-plugin-react-compiler*/}
-React Compiler also powers an ESLint plugin. The ESLint plugin can be used **independently** of the compiler, meaning you can use the ESLint plugin even if you don't use the compiler.
+React Compiler also powers an ESLint plugin. You can try it out by installing eslint-plugin-react-hooks@^6.0.0-rc.1.
-npm install -D eslint-plugin-react-compiler@beta
+{`npm install -D eslint-plugin-react-hooks@^6.0.0-rc.1`}
-Then, add it to your ESLint config:
-
-```js
-import reactCompiler from 'eslint-plugin-react-compiler'
-
-export default [
- {
- plugins: {
- 'react-compiler': reactCompiler,
- },
- rules: {
- 'react-compiler/react-compiler': 'error',
- },
- },
-]
-```
-
-Or, in the deprecated eslintrc config format:
-
-```js
-module.exports = {
- plugins: [
- 'eslint-plugin-react-compiler',
- ],
- rules: {
- 'react-compiler/react-compiler': 'error',
- },
-}
-```
+See our [editor setup](/learn/editor-setup#linting) guide for more details.
The ESLint plugin will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase.
@@ -190,7 +162,7 @@ If you're starting a new project, you can enable the compiler on your entire cod
React Compiler works best with React 19 RC. If you are unable to upgrade, you can install the extra `react-compiler-runtime` package which will allow the compiled code to run on versions prior to 19. However, note that the minimum supported version is 17.
-npm install react-compiler-runtime@beta
+{`npm install react-compiler-runtime@rc`}
You should also add the correct `target` to your compiler config, where `target` is the major version of React you are targeting:
@@ -225,7 +197,7 @@ Similarly to apps, it is not necessary to fully compile 100% of your components
### Babel {/*usage-with-babel*/}
-npm install babel-plugin-react-compiler@beta
+{`npm install babel-plugin-react-compiler@rc`}
The compiler includes a Babel plugin which you can use in your build pipeline to run the compiler.
@@ -280,7 +252,7 @@ Please refer to the [Next.js docs](https://nextjs.org/docs/app/api-reference/nex
Install `vite-plugin-babel`, and add the compiler's Babel plugin to it:
-npm install vite-plugin-babel
+{`npm install vite-plugin-babel`}
```js {2,14}
From 740016e4dea7e518bd045309bc3e828cc2a787a4 Mon Sep 17 00:00:00 2001
From: lauren
Date: Mon, 21 Apr 2025 18:00:39 -0400
Subject: [PATCH 09/25] More compiler blog post tweaks (#7760)
More small tweaks.
---
src/content/blog/2025/04/21/react-compiler-rc.md | 16 ++++++++--------
src/content/blog/index.md | 3 +--
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/content/blog/2025/04/21/react-compiler-rc.md b/src/content/blog/2025/04/21/react-compiler-rc.md
index fe9e3c6c1..55c238a93 100644
--- a/src/content/blog/2025/04/21/react-compiler-rc.md
+++ b/src/content/blog/2025/04/21/react-compiler-rc.md
@@ -24,7 +24,7 @@ The React team is excited to share new updates:
[React Compiler](https://react.dev/learn/react-compiler) is a build-time tool that optimizes your React app through automatic memoization. Last year, we published React Compiler’s [first beta](https://react.dev/blog/2024/10/21/react-compiler-beta-release) and received lots of great feedback and contributions. We’re excited about the wins we’ve seen from folks adopting the compiler (see case studies from [Sanity Studio](https://github.com/reactwg/react-compiler/discussions/33) and [Wakelet](https://github.com/reactwg/react-compiler/discussions/52)) and are working towards a stable release.
-We are releasing the compiler's first Release Candidate (RC) today. The RC is intended to be a stable and near-final version of the compiler, and safe to use in production for all React users.
+We are releasing the compiler's first Release Candidate (RC) today. The RC is intended to be a stable and near-final version of the compiler, and safe to try out in production.
## Use React Compiler RC today {/*use-react-compiler-rc-today*/}
To install the RC:
@@ -50,7 +50,10 @@ We have also heard from the community that the ref-in-render validation sometime
You can find more details on using the Compiler in [our docs](https://react.dev/learn/react-compiler).
-### Backwards Compatibility {/*backwards-compatibility*/}
+## Feedback {/*feedback*/}
+During the RC period, we encourage all React users to try the compiler and provide feedback in the React repo. Please [open an issue](https://github.com/facebook/react/issues) if you encounter any bugs or unexpected behavior. If you have a general question or suggestion, please post them in the [React Compiler Working Group](https://github.com/reactwg/react-compiler/discussions).
+
+## Backwards Compatibility {/*backwards-compatibility*/}
As noted in the Beta announcement, React Compiler is compatible with React 17 and up. If you are not yet on React 19, you can use React Compiler by specifying a minimum target in your compiler config, and adding `react-compiler-runtime` as a dependency. You can find docs on this [here](https://react.dev/learn/react-compiler#using-react-compiler-with-react-17-or-18).
## Migrating from eslint-plugin-react-compiler to eslint-plugin-react-hooks {/*migrating-from-eslint-plugin-react-compiler-to-eslint-plugin-react-hooks*/}
@@ -100,11 +103,11 @@ Vite users can continue to use [vite-plugin-react](https://github.com/vitejs/vit
## Upgrading React Compiler {/*upgrading-react-compiler*/}
React Compiler works best when the auto-memoization applied is strictly for performance. Future versions of the compiler may change how memoization is applied, for example it could become more granular and precise.
-However, because product code may sometimes break the [rules of React](https://react.dev/reference/rules) in ways that aren't always statically detectable in JavaScript, changing memoization can occasionally have unexpected results. For example, a previously memoized value might be used as a dependency for a useEffect somewhere in the component tree. Changing how or whether this value is memoized can cause over or under-firing of that useEffect. While we encourage [useEffect only for synchronization](https://react.dev/learn/synchronizing-with-effects), your codebase may have useEffects that cover other use-cases. For example you may have an effect that runs in response to some value changing (breaks the rules of React).
+However, because product code may sometimes break the [rules of React](https://react.dev/reference/rules) in ways that aren't always statically detectable in JavaScript, changing memoization can occasionally have unexpected results. For example, a previously memoized value might be used as a dependency for a useEffect somewhere in the component tree. Changing how or whether this value is memoized can cause over or under-firing of that useEffect. While we encourage [useEffect only for synchronization](https://react.dev/learn/synchronizing-with-effects), your codebase may have useEffects that cover other use-cases such as effects that needs to only run in response to specific values changing.
In other words, changing memoization may under rare circumstances cause unexpected behavior. For this reason, we recommend following the Rules of React and employing continuous end-to-end testing of your app so you can upgrade the compiler with confidence and identify any rules of React violations that might cause issues.
-If you don't have good test coverage, we recommend pinning the compiler to an exact version (eg `19.0.0`) rather than a SemVer range (eg `^19.0.0`). You can do this by passing the `--save-exact` (npm/pnpm) or `--exact` flags (yarn) when upgrading the compiler. You should then do any upgrades of the compiler manually, taking care to check that your app still works as expected.
+If you don't have good test coverage, we recommend pinning the compiler to an exact version (eg `19.1.0`) rather than a SemVer range (eg `^19.1.0`). You can do this by passing the `--save-exact` (npm/pnpm) or `--exact` flags (yarn) when upgrading the compiler. You should then do any upgrades of the compiler manually, taking care to check that your app still works as expected.
## Roadmap to Stable {/*roadmap-to-stable*/}
*This is not a final roadmap, and is subject to change.*
@@ -118,9 +121,6 @@ After a period of final feedback from the community on the RC, we plan on a Stab
Post-Stable, we plan to add more compiler optimizations and improvements. This includes both continual improvements to automatic memoization, and new optimizations altogether, with minimal to no change of product code. Each upgrade will continue to improve performance and add better handling of diverse JavaScript and React patterns.
-## Feedback {/*feedback*/}
-During the RC period, we encourage all React users to try the compiler and provide feedback in the React repo. Please [open an issue](https://github.com/facebook/react/issues) if you encounter any bugs or unexpected behavior. If you have a general question or suggestion, please post them in the [React Compiler Working Group](https://github.com/reactwg/react-compiler/discussions).
-
---
-Thanks to [Joe Savona](https://x.com/en_JS), [Jason Bonta](https://twitter.com/someextent), [Jimmy Lai](https://x.com/feedthejim), and [Kang Dongyoon](https://x.com/kdy1dev) (@kdy1dev) for reviewing and editing this post.
+Thanks to [Joe Savona](https://x.com/en_JS), [Jason Bonta](https://x.com/someextent), [Jimmy Lai](https://x.com/feedthejim), and [Kang Dongyoon](https://x.com/kdy1dev) (@kdy1dev) for reviewing and editing this post.
diff --git a/src/content/blog/index.md b/src/content/blog/index.md
index 4707e5f48..fadb95243 100644
--- a/src/content/blog/index.md
+++ b/src/content/blog/index.md
@@ -14,11 +14,10 @@ You can also follow the [@react.dev](https://bsky.app/profile/react.dev) account
-We are releasing the compiler's first Release Candidate (RC) today. ...
+We are releasing the compiler's first Release Candidate (RC) today.
-
Today, we’re deprecating Create React App for new apps, and encouraging existing apps to migrate to a framework, or to migrate to a build tool like Vite, Parcel, or RSBuild. We’re also providing docs for when a framework isn’t a good fit for your project, you want to build your own framework, or you just want to learn how React works by building a React app from scratch ...
From 39b9c56f8847237ecb9e8d2ece9f626cb4241f73 Mon Sep 17 00:00:00 2001
From: Christoph Nakazawa
Date: Wed, 23 Apr 2025 09:04:09 +0900
Subject: [PATCH 10/25] Fix ESLint plugin version. (#7768)
* Fix ESLint plugin version.
* Update react-compiler-rc.md
---
src/content/blog/2025/04/21/react-compiler-rc.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/content/blog/2025/04/21/react-compiler-rc.md b/src/content/blog/2025/04/21/react-compiler-rc.md
index 55c238a93..6f6bcf3d9 100644
--- a/src/content/blog/2025/04/21/react-compiler-rc.md
+++ b/src/content/blog/2025/04/21/react-compiler-rc.md
@@ -57,7 +57,7 @@ During the RC period, we encourage all React users to try the compiler and provi
As noted in the Beta announcement, React Compiler is compatible with React 17 and up. If you are not yet on React 19, you can use React Compiler by specifying a minimum target in your compiler config, and adding `react-compiler-runtime` as a dependency. You can find docs on this [here](https://react.dev/learn/react-compiler#using-react-compiler-with-react-17-or-18).
## Migrating from eslint-plugin-react-compiler to eslint-plugin-react-hooks {/*migrating-from-eslint-plugin-react-compiler-to-eslint-plugin-react-hooks*/}
-If you have already installed eslint-plugin-react-compiler, you can now remove it and use `eslint-plugin-react-hooks@^6.0.0-rc.1`. Many thanks to [@michaelfaith](https://bsky.app/profile/michael.faith) for contributing to this improvement!
+If you have already installed eslint-plugin-react-compiler, you can now remove it and use `eslint-plugin-react-hooks@6.0.0-rc.1`. Many thanks to [@michaelfaith](https://bsky.app/profile/michael.faith) for contributing to this improvement!
To install:
@@ -89,6 +89,8 @@ export default [
];
```
+To enable the React Compiler rule, add `'react-hooks/react-compiler': 'error'` to your ESLint configuration.
+
The linter does not require the compiler to be installed, so there's no risk in upgrading eslint-plugin-react-hooks. We recommend everyone upgrade today.
## swc support (experimental) {/*swc-support-experimental*/}
From 5890bd6ecccce76b966d8b3a69bf030285f3c810 Mon Sep 17 00:00:00 2001
From: lauren
Date: Tue, 22 Apr 2025 20:46:55 -0400
Subject: [PATCH 11/25] Update react-compiler-rc.md (#7769)
---
src/content/blog/2025/04/21/react-compiler-rc.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/content/blog/2025/04/21/react-compiler-rc.md b/src/content/blog/2025/04/21/react-compiler-rc.md
index 6f6bcf3d9..141a63698 100644
--- a/src/content/blog/2025/04/21/react-compiler-rc.md
+++ b/src/content/blog/2025/04/21/react-compiler-rc.md
@@ -63,17 +63,17 @@ To install:
npm
-{`npm install --save-dev eslint-plugin-react-hooks@^6.0.0-rc.1`}
+{`npm install --save-dev eslint-plugin-react-hooks@6.0.0-rc.1`}
pnpm
-{`pnpm add --save-dev eslint-plugin-react-hooks@^6.0.0-rc.1`}
+{`pnpm add --save-dev eslint-plugin-react-hooks@6.0.0-rc.1`}
yarn
-{`yarn add --dev eslint-plugin-react-hooks@^6.0.0-rc.1`}
+{`yarn add --dev eslint-plugin-react-hooks@6.0.0-rc.1`}
```js
From dd129e4493a3ef83b30415853a320655d67cd530 Mon Sep 17 00:00:00 2001
From: Kim Sung Hyun
Date: Wed, 23 Apr 2025 09:52:14 +0900
Subject: [PATCH 12/25] fix a typo in name in the blog post (#7762)
---
src/content/blog/2025/04/21/react-compiler-rc.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/content/blog/2025/04/21/react-compiler-rc.md b/src/content/blog/2025/04/21/react-compiler-rc.md
index 141a63698..9548e57e7 100644
--- a/src/content/blog/2025/04/21/react-compiler-rc.md
+++ b/src/content/blog/2025/04/21/react-compiler-rc.md
@@ -96,7 +96,7 @@ The linter does not require the compiler to be installed, so there's no risk in
## swc support (experimental) {/*swc-support-experimental*/}
React Compiler can be installed across [several build tools](/learn/react-compiler#installation) such as Babel, Vite, and Rsbuild.
-In addition to those tools, we have been collaborating with Kang Dongyoong ([@kdy1dev](https://x.com/kdy1dev)) from the [swc](https://swc.rs/) team on adding additional support for React Compiler as an swc plugin. As part of the RC release, you can now integrate the compiler into your [Next.js app with swc](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactCompiler) instead of Babel.
+In addition to those tools, we have been collaborating with Kang Dongyoon ([@kdy1dev](https://x.com/kdy1dev)) from the [swc](https://swc.rs/) team on adding additional support for React Compiler as an swc plugin. As part of the RC release, you can now integrate the compiler into your [Next.js app with swc](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactCompiler) instead of Babel.
Next.js users can upgrade to [15.3.1](https://github.com/vercel/next.js/releases/tag/v15.3.1) or greater to try this out. If you have already enabled the compiler in your Next.js's config, swc support will be enabled automatically.
From 55ddaa4f13d778100b41187b720f43245bda0d1d Mon Sep 17 00:00:00 2001
From: Gleb Makhankov <78379892+Hlebread@users.noreply.github.com>
Date: Wed, 23 Apr 2025 03:53:34 +0300
Subject: [PATCH 13/25] Add React Summit US 2025 and React Advanced London 2025
to conferences.md (#7761)
Add `React Summit US 2025` and `React Advanced London 2025` to the list of upcoming conferences (`conferences.md`).
---
src/content/community/conferences.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/content/community/conferences.md b/src/content/community/conferences.md
index 17dd96159..84695811a 100644
--- a/src/content/community/conferences.md
+++ b/src/content/community/conferences.md
@@ -50,6 +50,16 @@ October 31 - November 01, 2025. In-person in Goa, India (hybrid event) + Oct 15
[Website](https://www.reactindia.io) - [Twitter](https://twitter.com/react_india) - [Facebook](https://www.facebook.com/ReactJSIndia) - [Youtube](https://www.youtube.com/channel/UCaFbHCBkPvVv1bWs_jwYt3w)
+### React Summit US 2025 {/*react-summit-us-2025*/}
+November 18 - 21, 2025. In-person in New York, USA + remote (hybrid event)
+
+[Website](https://reactsummit.us/) - [Twitter](https://x.com/reactsummit)
+
+### React Advanced London 2025 {/*react-advanced-london-2025*/}
+November 28 & December 1, 2025. In-person in London, UK + online (hybrid event)
+
+[Website](https://reactadvanced.com/) - [Twitter](https://x.com/reactadvanced)
+
## Past Conferences {/*past-conferences*/}
From 358d2be565098d8638ee2b74199560858eff712e Mon Sep 17 00:00:00 2001
From: Ricky
Date: Wed, 23 Apr 2025 11:27:48 -0400
Subject: [PATCH 14/25] [blog + docs] React Labs: View Transitions, Activity,
and more (#7772)
* init
* Add new error
* Bunch of updates
* Add addTransitionType
* Add Activity
* Expand on Activity
* Expand more on Activity
* Start on vt examples
* wip
* wip
* wip 2
* bump deploy
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* init
* Add new error
* Bunch of updates
* Add addTransitionType
* Add Activity
* Expand on Activity
* Expand more on Activity
* Start on vt examples
* wip
* wip
* wip 2
* bump deploy
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update existing VT examples to use video items
* Suspense animation example
* Add customization example
* typos
* Remove TODOs -- we might still want these but cutting scope
* Address wp feedback
* Fix reorder example
* wip
* wip
* wip
* wip
* fix activity iframe resize
---------
Co-authored-by: Jack Pope
---
.../blog/react-labs-april-2025/flip.gif | Bin 0 -> 171661 bytes
.../react-labs-april-2025/perf_tracks.png | Bin 0 -> 416681 bytes
.../react-labs-april-2025/perf_tracks.webp | Bin 0 -> 112310 bytes
.../perf_tracks_dark.png | Bin 0 -> 381971 bytes
.../perf_tracks_dark.webp | Bin 0 -> 93484 bytes
src/components/Icon/IconExperimental.tsx | 38 +
src/components/Layout/Page.tsx | 6 +-
src/components/Layout/Sidebar/SidebarLink.tsx | 11 +-
src/components/MDX/ExpandableCallout.tsx | 10 +
src/components/MDX/MDXComponents.tsx | 20 +
src/components/PageHeading.tsx | 17 +-
...what-we-have-been-working-on-april-2025.md | 12993 ++++++++++++++
...labs-view-transitions-activity-and-more.md | 14358 ++++++++++++++++
src/content/blog/index.md | 6 +
src/content/reference/react/Activity.md | 1161 ++
src/content/reference/react/ViewTransition.md | 2213 +++
.../reference/react/addTransitionType.md | 182 +
.../experimental_taintObjectReference.md | 5 +-
.../react/experimental_taintUniqueValue.md | 5 +-
.../react/experimental_useEffectEvent.md | 5 +-
src/sidebarBlog.json | 7 +
src/sidebarReference.json | 19 +-
22 files changed, 31039 insertions(+), 17 deletions(-)
create mode 100644 public/images/blog/react-labs-april-2025/flip.gif
create mode 100644 public/images/blog/react-labs-april-2025/perf_tracks.png
create mode 100644 public/images/blog/react-labs-april-2025/perf_tracks.webp
create mode 100644 public/images/blog/react-labs-april-2025/perf_tracks_dark.png
create mode 100644 public/images/blog/react-labs-april-2025/perf_tracks_dark.webp
create mode 100644 src/components/Icon/IconExperimental.tsx
create mode 100644 src/content/blog/2025/04/01/react-labs-what-we-have-been-working-on-april-2025.md
create mode 100644 src/content/blog/2025/04/23/react-labs-view-transitions-activity-and-more.md
create mode 100644 src/content/reference/react/Activity.md
create mode 100644 src/content/reference/react/ViewTransition.md
create mode 100644 src/content/reference/react/addTransitionType.md
diff --git a/public/images/blog/react-labs-april-2025/flip.gif b/public/images/blog/react-labs-april-2025/flip.gif
new file mode 100644
index 0000000000000000000000000000000000000000..a7363ebf625be978d141117fcad5f2fa4bafe6d0
GIT binary patch
literal 171661
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