Release <ViewTransition /> to Canary#34712
Merged
jackpope merged 2 commits intofacebook:mainfrom Oct 7, 2025
Merged
Conversation
69f1b2a to
cb62af3
Compare
cb62af3 to
79e63b5
Compare
ViewTransition and addTransitionType in CanaryViewTransition and addTransitionType to Canary
ViewTransition and addTransitionType to Canary<ViewTransition /> to Canary
rickhanlonii
approved these changes
Oct 3, 2025
Member
rickhanlonii
left a comment
There was a problem hiding this comment.
Left a comment, and we need to merge the docs at the same time.
packages/react/src/ReactServer.fb.js
Outdated
| * @flow | ||
| */ | ||
|
|
||
| import {enableViewTransition} from 'shared/ReactFeatureFlags'; |
Member
There was a problem hiding this comment.
To be safe, can you remove the feature flag and just continue exporting it as unstable_ViewTransition? I have no idea if turning this off would break our infra.
Collaborator
Author
I need to cut a Canary first so this needs to go in first before docs go out. |
f22aea7 to
bac4b8d
Compare
github-actions bot
pushed a commit
that referenced
this pull request
Oct 7, 2025
## Overview This PR ships the View Transition APIs to `react@canary`: - [`<ViewTransition />`](https://react.dev/reference/react/ViewTransition) - [`addTransitionType`](https://react.dev/reference/react/addTransitionType) This means these APIs are ready for final feedback and prepare for semver stable release. ## What this means Shipping `<ViewTransition />` and `addTransitionType` to canary means they have gone through extensive testing in production, we are confident in the stability of the APIs, and we are preparing to release it in a future semver stable version. Libraries and frameworks following the [Canary Workflow](https://react.dev/blog/2023/05/03/react-canaries) should begin implementing and testing these features. ## Why we follow the Canary Workflow To prepare for semver stable, libraries should test canary features like `<ViewTransition />` with `react@canary` to confirm compatibility and prepare for the next semver release in a myriad of environments and configurations used throughout the React ecosystem. This provides libraries with ample time to catch any issues we missed before slamming them with problems in the wider semver release. Since these features have already gone through extensive production testing, and we are confident they are stable, frameworks following the [Canary Workflow](https://react.dev/blog/2023/05/03/react-canaries) can also begin adopting canary features like `<ViewTransition />`. This adoption is similar to how different Browsers implement new proposed browser features before they are added to the standard. If a frameworks adopts a canary feature, they are committing to stability for their users by ensuring any API changes before a semver stable release are opaque and non-breaking to their users. Apps not using a framework are also free to adopt canary features like `<ViewTransition>` as long as they follow the [Canary Workflow](https://react.dev/blog/2023/05/03/react-canaries), but we generally recommend waiting for a semver stable release unless you have the capacity to commit to following along with the canary changes and debugging library compatibility issues. Waiting for semver stable means you're able to benefit from libraries testing and confirming support, and use semver as signal for which version of a library you can use with support of the feature. ## Docs Check out the ["React Labs: View Transitions, Activity, and more"](https://react.dev/blog/2025/04/23/react-labs-view-transitions-activity-and-more#view-transitions) blog post, and [the new docs for `<ViewTransition />`](https://react.dev/reference/react/ViewTransition) and [`addTransitionType`](https://react.dev/reference/react/addTransitionType) for more info. DiffTrain build for [6a8c7fb](6a8c7fb)
github-actions bot
pushed a commit
that referenced
this pull request
Oct 7, 2025
## Overview This PR ships the View Transition APIs to `react@canary`: - [`<ViewTransition />`](https://react.dev/reference/react/ViewTransition) - [`addTransitionType`](https://react.dev/reference/react/addTransitionType) This means these APIs are ready for final feedback and prepare for semver stable release. ## What this means Shipping `<ViewTransition />` and `addTransitionType` to canary means they have gone through extensive testing in production, we are confident in the stability of the APIs, and we are preparing to release it in a future semver stable version. Libraries and frameworks following the [Canary Workflow](https://react.dev/blog/2023/05/03/react-canaries) should begin implementing and testing these features. ## Why we follow the Canary Workflow To prepare for semver stable, libraries should test canary features like `<ViewTransition />` with `react@canary` to confirm compatibility and prepare for the next semver release in a myriad of environments and configurations used throughout the React ecosystem. This provides libraries with ample time to catch any issues we missed before slamming them with problems in the wider semver release. Since these features have already gone through extensive production testing, and we are confident they are stable, frameworks following the [Canary Workflow](https://react.dev/blog/2023/05/03/react-canaries) can also begin adopting canary features like `<ViewTransition />`. This adoption is similar to how different Browsers implement new proposed browser features before they are added to the standard. If a frameworks adopts a canary feature, they are committing to stability for their users by ensuring any API changes before a semver stable release are opaque and non-breaking to their users. Apps not using a framework are also free to adopt canary features like `<ViewTransition>` as long as they follow the [Canary Workflow](https://react.dev/blog/2023/05/03/react-canaries), but we generally recommend waiting for a semver stable release unless you have the capacity to commit to following along with the canary changes and debugging library compatibility issues. Waiting for semver stable means you're able to benefit from libraries testing and confirming support, and use semver as signal for which version of a library you can use with support of the feature. ## Docs Check out the ["React Labs: View Transitions, Activity, and more"](https://react.dev/blog/2025/04/23/react-labs-view-transitions-activity-and-more#view-transitions) blog post, and [the new docs for `<ViewTransition />`](https://react.dev/reference/react/ViewTransition) and [`addTransitionType`](https://react.dev/reference/react/addTransitionType) for more info. DiffTrain build for [6a8c7fb](6a8c7fb)
hoxyq
added a commit
that referenced
this pull request
Oct 20, 2025
Full list of changes: * Text layout fixes for stack traces with badges ([eps1lon](https://github.com/eps1lon) in [#34925](#34925)) * chore: read from build/COMMIT_SHA fle as fallback for commit hash ([hoxyq](https://github.com/hoxyq) in [#34915](#34915)) * fix: dont ship source maps for css in prod builds ([hoxyq](https://github.com/hoxyq) in [#34913](#34913)) * Lower case "rsc stream" debug info ([sebmarkbage](https://github.com/sebmarkbage) in [#34921](#34921)) * BuiltInCallSite should have padding-left ([sebmarkbage](https://github.com/sebmarkbage) in [#34922](#34922)) * Show the Suspense boundary name in the rect if there's no overlap ([sebmarkbage](https://github.com/sebmarkbage) in [#34918](#34918)) * Don't attach filtered IO to grandparent Suspense ([eps1lon](https://github.com/eps1lon) in [#34916](#34916)) * Infer name from stack if it's the generic "lazy" name ([sebmarkbage](https://github.com/sebmarkbage) in [#34907](#34907)) * Use same Suspense naming heuristics when reconnecting ([eps1lon](https://github.com/eps1lon) in [#34898](#34898)) * Assign a different color and label based on environment ([sebmarkbage](https://github.com/sebmarkbage) in [#34893](#34893)) * Compute environment names for the timeline ([sebmarkbage](https://github.com/sebmarkbage) in [#34892](#34892)) * Don't highlight the root rect if no roots has unique suspenders ([sebmarkbage](https://github.com/sebmarkbage) in [#34885](#34885)) * Highlight the rect when the corresponding timeline bean is hovered ([sebmarkbage](https://github.com/sebmarkbage) in [#34881](#34881)) * Repeat the "name" if there's no short description in groups ([sebmarkbage](https://github.com/sebmarkbage) in [#34894](#34894)) * Tweak the rects design and create multi-environment color scheme ([sebmarkbage](https://github.com/sebmarkbage) in [#34880](#34880)) * Adjust the rects size by one pixel smaller ([sebmarkbage](https://github.com/sebmarkbage) in [#34876](#34876)) * Remove steps title from scrubber ([sebmarkbage](https://github.com/sebmarkbage) in [#34878](#34878)) * Include some sub-pixel precision in rects ([sebmarkbage](https://github.com/sebmarkbage) in [#34873](#34873)) * Don't pluralize if already plural ([sebmarkbage](https://github.com/sebmarkbage) in [#34870](#34870)) * Don't try to load anonymous or empty urls ([sebmarkbage](https://github.com/sebmarkbage) in [#34869](#34869)) * Add inspection button to Suspense tab ([sebmarkbage](https://github.com/sebmarkbage) in [#34867](#34867)) * Don't select on hover ([sebmarkbage](https://github.com/sebmarkbage) in [#34860](#34860)) * Don't highlight on timeline ([sebmarkbage](https://github.com/sebmarkbage) in [#34861](#34861)) * The bridge event types should only be defined in one direction ([sebmarkbage](https://github.com/sebmarkbage) in [#34859](#34859)) * Attempt at a better "unique suspender" text ([sebmarkbage](https://github.com/sebmarkbage) in [#34854](#34854)) * Track whether a boundary is currently suspended and make transparent ([sebmarkbage](https://github.com/sebmarkbage) in [#34853](#34853)) * Don't hide overflow rectangles ([sebmarkbage](https://github.com/sebmarkbage) in [#34852](#34852)) * Measure text nodes ([sebmarkbage](https://github.com/sebmarkbage) in [#34851](#34851)) * Don't measure fallbacks when suspended ([sebmarkbage](https://github.com/sebmarkbage) in [#34850](#34850)) * Filter out built-in stack frames ([sebmarkbage](https://github.com/sebmarkbage) in [#34828](#34828)) * Exclude Suspense boundaries in hidden Activity ([eps1lon](https://github.com/eps1lon) in [#34756](#34756)) * Group consecutive suspended by rows by the same name ([sebmarkbage](https://github.com/sebmarkbage) in [#34830](#34830)) * Preserve the original index when sorting suspended by ([sebmarkbage](https://github.com/sebmarkbage) in [#34829](#34829)) * Don't show the root as being non-compliant ([sebmarkbage](https://github.com/sebmarkbage) in [#34827](#34827)) * Ignore suspense boundaries, without visual representation, in the timeline ([sebmarkbage](https://github.com/sebmarkbage) in [#34824](#34824)) * Explicitly say which id to scroll to and only once ([sebmarkbage](https://github.com/sebmarkbage) in [#34823](#34823)) * devtools: fix ellipsis truncation for key values ([sophiebits](https://github.com/sophiebits) in [#34796](#34796)) * fix(devtools): remove duplicated "Display density" field in General settings ([Anatole-Godard](https://github.com/Anatole-Godard) in [#34792](#34792)) * Gate SuspenseTab ([hoxyq](https://github.com/hoxyq) in [#34754](#34754)) * Release `<ViewTransition />` to Canary ([eps1lon](https://github.com/eps1lon) in [#34712](#34712))
github-actions bot
pushed a commit
to code/lib-react
that referenced
this pull request
Oct 24, 2025
Full list of changes: * Text layout fixes for stack traces with badges ([eps1lon](https://github.com/eps1lon) in [facebook#34925](facebook#34925)) * chore: read from build/COMMIT_SHA fle as fallback for commit hash ([hoxyq](https://github.com/hoxyq) in [facebook#34915](facebook#34915)) * fix: dont ship source maps for css in prod builds ([hoxyq](https://github.com/hoxyq) in [facebook#34913](facebook#34913)) * Lower case "rsc stream" debug info ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34921](facebook#34921)) * BuiltInCallSite should have padding-left ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34922](facebook#34922)) * Show the Suspense boundary name in the rect if there's no overlap ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34918](facebook#34918)) * Don't attach filtered IO to grandparent Suspense ([eps1lon](https://github.com/eps1lon) in [facebook#34916](facebook#34916)) * Infer name from stack if it's the generic "lazy" name ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34907](facebook#34907)) * Use same Suspense naming heuristics when reconnecting ([eps1lon](https://github.com/eps1lon) in [facebook#34898](facebook#34898)) * Assign a different color and label based on environment ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34893](facebook#34893)) * Compute environment names for the timeline ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34892](facebook#34892)) * Don't highlight the root rect if no roots has unique suspenders ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34885](facebook#34885)) * Highlight the rect when the corresponding timeline bean is hovered ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34881](facebook#34881)) * Repeat the "name" if there's no short description in groups ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34894](facebook#34894)) * Tweak the rects design and create multi-environment color scheme ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34880](facebook#34880)) * Adjust the rects size by one pixel smaller ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34876](facebook#34876)) * Remove steps title from scrubber ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34878](facebook#34878)) * Include some sub-pixel precision in rects ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34873](facebook#34873)) * Don't pluralize if already plural ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34870](facebook#34870)) * Don't try to load anonymous or empty urls ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34869](facebook#34869)) * Add inspection button to Suspense tab ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34867](facebook#34867)) * Don't select on hover ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34860](facebook#34860)) * Don't highlight on timeline ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34861](facebook#34861)) * The bridge event types should only be defined in one direction ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34859](facebook#34859)) * Attempt at a better "unique suspender" text ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34854](facebook#34854)) * Track whether a boundary is currently suspended and make transparent ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34853](facebook#34853)) * Don't hide overflow rectangles ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34852](facebook#34852)) * Measure text nodes ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34851](facebook#34851)) * Don't measure fallbacks when suspended ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34850](facebook#34850)) * Filter out built-in stack frames ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34828](facebook#34828)) * Exclude Suspense boundaries in hidden Activity ([eps1lon](https://github.com/eps1lon) in [facebook#34756](facebook#34756)) * Group consecutive suspended by rows by the same name ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34830](facebook#34830)) * Preserve the original index when sorting suspended by ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34829](facebook#34829)) * Don't show the root as being non-compliant ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34827](facebook#34827)) * Ignore suspense boundaries, without visual representation, in the timeline ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34824](facebook#34824)) * Explicitly say which id to scroll to and only once ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34823](facebook#34823)) * devtools: fix ellipsis truncation for key values ([sophiebits](https://github.com/sophiebits) in [facebook#34796](facebook#34796)) * fix(devtools): remove duplicated "Display density" field in General settings ([Anatole-Godard](https://github.com/Anatole-Godard) in [facebook#34792](facebook#34792)) * Gate SuspenseTab ([hoxyq](https://github.com/hoxyq) in [facebook#34754](facebook#34754)) * Release `<ViewTransition />` to Canary ([eps1lon](https://github.com/eps1lon) in [facebook#34712](facebook#34712)) DiffTrain build for [3cde211](facebook@3cde211)
github-actions bot
pushed a commit
to code/lib-react
that referenced
this pull request
Oct 24, 2025
Full list of changes: * Text layout fixes for stack traces with badges ([eps1lon](https://github.com/eps1lon) in [facebook#34925](facebook#34925)) * chore: read from build/COMMIT_SHA fle as fallback for commit hash ([hoxyq](https://github.com/hoxyq) in [facebook#34915](facebook#34915)) * fix: dont ship source maps for css in prod builds ([hoxyq](https://github.com/hoxyq) in [facebook#34913](facebook#34913)) * Lower case "rsc stream" debug info ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34921](facebook#34921)) * BuiltInCallSite should have padding-left ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34922](facebook#34922)) * Show the Suspense boundary name in the rect if there's no overlap ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34918](facebook#34918)) * Don't attach filtered IO to grandparent Suspense ([eps1lon](https://github.com/eps1lon) in [facebook#34916](facebook#34916)) * Infer name from stack if it's the generic "lazy" name ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34907](facebook#34907)) * Use same Suspense naming heuristics when reconnecting ([eps1lon](https://github.com/eps1lon) in [facebook#34898](facebook#34898)) * Assign a different color and label based on environment ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34893](facebook#34893)) * Compute environment names for the timeline ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34892](facebook#34892)) * Don't highlight the root rect if no roots has unique suspenders ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34885](facebook#34885)) * Highlight the rect when the corresponding timeline bean is hovered ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34881](facebook#34881)) * Repeat the "name" if there's no short description in groups ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34894](facebook#34894)) * Tweak the rects design and create multi-environment color scheme ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34880](facebook#34880)) * Adjust the rects size by one pixel smaller ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34876](facebook#34876)) * Remove steps title from scrubber ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34878](facebook#34878)) * Include some sub-pixel precision in rects ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34873](facebook#34873)) * Don't pluralize if already plural ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34870](facebook#34870)) * Don't try to load anonymous or empty urls ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34869](facebook#34869)) * Add inspection button to Suspense tab ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34867](facebook#34867)) * Don't select on hover ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34860](facebook#34860)) * Don't highlight on timeline ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34861](facebook#34861)) * The bridge event types should only be defined in one direction ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34859](facebook#34859)) * Attempt at a better "unique suspender" text ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34854](facebook#34854)) * Track whether a boundary is currently suspended and make transparent ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34853](facebook#34853)) * Don't hide overflow rectangles ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34852](facebook#34852)) * Measure text nodes ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34851](facebook#34851)) * Don't measure fallbacks when suspended ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34850](facebook#34850)) * Filter out built-in stack frames ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34828](facebook#34828)) * Exclude Suspense boundaries in hidden Activity ([eps1lon](https://github.com/eps1lon) in [facebook#34756](facebook#34756)) * Group consecutive suspended by rows by the same name ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34830](facebook#34830)) * Preserve the original index when sorting suspended by ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34829](facebook#34829)) * Don't show the root as being non-compliant ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34827](facebook#34827)) * Ignore suspense boundaries, without visual representation, in the timeline ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34824](facebook#34824)) * Explicitly say which id to scroll to and only once ([sebmarkbage](https://github.com/sebmarkbage) in [facebook#34823](facebook#34823)) * devtools: fix ellipsis truncation for key values ([sophiebits](https://github.com/sophiebits) in [facebook#34796](facebook#34796)) * fix(devtools): remove duplicated "Display density" field in General settings ([Anatole-Godard](https://github.com/Anatole-Godard) in [facebook#34792](facebook#34792)) * Gate SuspenseTab ([hoxyq](https://github.com/hoxyq) in [facebook#34754](facebook#34754)) * Release `<ViewTransition />` to Canary ([eps1lon](https://github.com/eps1lon) in [facebook#34712](facebook#34712)) DiffTrain build for [3cde211](facebook@3cde211)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR ships the View Transition APIs to
react@canary:<ViewTransition />addTransitionTypeThis means these APIs are ready for final feedback and prepare for semver stable release.
What this means
Shipping
<ViewTransition />andaddTransitionTypeto canary means they have gone through extensive testing in production, we are confident in the stability of the APIs, and we are preparing to release it in a future semver stable version.Libraries and frameworks following the Canary Workflow should begin implementing and testing these features.
Why we follow the Canary Workflow
To prepare for semver stable, libraries should test canary features like
<ViewTransition />withreact@canaryto confirm compatibility and prepare for the next semver release in a myriad of environments and configurations used throughout the React ecosystem. This provides libraries with ample time to catch any issues we missed before slamming them with problems in the wider semver release.Since these features have already gone through extensive production testing, and we are confident they are stable, frameworks following the Canary Workflow can also begin adopting canary features like
<ViewTransition />.This adoption is similar to how different Browsers implement new proposed browser features before they are added to the standard. If a frameworks adopts a canary feature, they are committing to stability for their users by ensuring any API changes before a semver stable release are opaque and non-breaking to their users.
Apps not using a framework are also free to adopt canary features like
<ViewTransition>as long as they follow the Canary Workflow, but we generally recommend waiting for a semver stable release unless you have the capacity to commit to following along with the canary changes and debugging library compatibility issues.Waiting for semver stable means you're able to benefit from libraries testing and confirming support, and use semver as signal for which version of a library you can use with support of the feature.
Docs
Check out the "React Labs: View Transitions, Activity, and more" blog post, and the new docs for
<ViewTransition />andaddTransitionTypefor more info.