diff --git a/packages/react-reconciler/src/__tests__/ActivityReactServer-test.js b/packages/react-reconciler/src/__tests__/ActivityReactServer-test.js
new file mode 100644
index 0000000000000..93f4e5683b620
--- /dev/null
+++ b/packages/react-reconciler/src/__tests__/ActivityReactServer-test.js
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @emails react-core
+ * @jest-environment node
+ */
+
+'use strict';
+
+let act;
+let Activity;
+let React;
+let ReactServer;
+let ReactNoop;
+let ReactNoopFlightClient;
+let ReactNoopFlightServer;
+
+describe('ActivityReactServer', () => {
+ beforeEach(() => {
+ jest.resetModules();
+ jest.mock('react', () => require('react/react.react-server'));
+ ReactServer = require('react');
+ Activity = ReactServer.Activity;
+ ReactNoopFlightServer = require('react-noop-renderer/flight-server');
+
+ jest.resetModules();
+ __unmockReact();
+ React = require('react');
+ ReactNoopFlightClient = require('react-noop-renderer/flight-client');
+ ReactNoop = require('react-noop-renderer');
+ const InternalTestUtils = require('internal-test-utils');
+ act = InternalTestUtils.act;
+ });
+
+ afterEach(() => {
+ jest.restoreAllMocks();
+ });
+
+ it('can be rendered in React Server', async () => {
+ function App() {
+ return ReactServer.createElement(
+ Activity,
+ {mode: 'hidden'},
+ ReactServer.createElement('div', null, 'Hello, Dave!'),
+ );
+ }
+
+ const transport = ReactNoopFlightServer.render(
+ ReactServer.createElement(App, null),
+ );
+
+ await act(async () => {
+ const app = await ReactNoopFlightClient.read(transport);
+
+ ReactNoop.render(app);
+ });
+
+ expect(ReactNoop).toMatchRenderedOutput(
+
Hello, Dave!
,
+ );
+ });
+});
diff --git a/packages/react-reconciler/src/__tests__/ViewTransitionReactServer-test.js b/packages/react-reconciler/src/__tests__/ViewTransitionReactServer-test.js
new file mode 100644
index 0000000000000..8f1104a12833e
--- /dev/null
+++ b/packages/react-reconciler/src/__tests__/ViewTransitionReactServer-test.js
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ *
+ * @emails react-core
+ * @jest-environment node
+ */
+
+'use strict';
+
+let act;
+let ViewTransition;
+let React;
+let ReactServer;
+let ReactNoop;
+let ReactNoopFlightClient;
+let ReactNoopFlightServer;
+
+describe('ViewTransitionReactServer', () => {
+ beforeEach(() => {
+ jest.resetModules();
+ jest.mock('react', () => require('react/react.react-server'));
+ ReactServer = require('react');
+ ViewTransition = ReactServer.unstable_ViewTransition;
+ ReactNoopFlightServer = require('react-noop-renderer/flight-server');
+
+ jest.resetModules();
+ __unmockReact();
+ React = require('react');
+ ReactNoopFlightClient = require('react-noop-renderer/flight-client');
+ ReactNoop = require('react-noop-renderer');
+ const InternalTestUtils = require('internal-test-utils');
+ act = InternalTestUtils.act;
+ });
+
+ afterEach(() => {
+ jest.restoreAllMocks();
+ });
+
+ // @gate enableViewTransition || fb
+ it('can be rendered in React Server', async () => {
+ function App() {
+ return ReactServer.createElement(
+ ViewTransition,
+ {},
+ ReactServer.createElement('div', null, 'Hello, Dave!'),
+ );
+ }
+
+ const transport = ReactNoopFlightServer.render(
+ ReactServer.createElement(App, null),
+ );
+
+ await act(async () => {
+ const app = await ReactNoopFlightClient.read(transport);
+
+ ReactNoop.render(app);
+ });
+
+ expect(ReactNoop).toMatchRenderedOutput(Hello, Dave!
);
+ });
+});
diff --git a/packages/react/src/ReactServer.experimental.development.js b/packages/react/src/ReactServer.experimental.development.js
index 082eb58ccacc2..9e9417677bb46 100644
--- a/packages/react/src/ReactServer.experimental.development.js
+++ b/packages/react/src/ReactServer.experimental.development.js
@@ -58,6 +58,7 @@ export {
export {
Children,
+ REACT_ACTIVITY_TYPE as Activity,
REACT_FRAGMENT_TYPE as Fragment,
REACT_PROFILER_TYPE as Profiler,
REACT_STRICT_MODE_TYPE as StrictMode,
@@ -83,6 +84,5 @@ export {
// Experimental
REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList,
REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition,
- REACT_ACTIVITY_TYPE as unstable_Activity,
captureOwnerStack, // DEV-only
};
diff --git a/packages/react/src/ReactServer.experimental.js b/packages/react/src/ReactServer.experimental.js
index 4fe83248e2c77..e380789d71bf6 100644
--- a/packages/react/src/ReactServer.experimental.js
+++ b/packages/react/src/ReactServer.experimental.js
@@ -57,6 +57,7 @@ export {
export {
Children,
+ REACT_ACTIVITY_TYPE as Activity,
REACT_FRAGMENT_TYPE as Fragment,
REACT_PROFILER_TYPE as Profiler,
REACT_STRICT_MODE_TYPE as StrictMode,
@@ -82,5 +83,4 @@ export {
// Experimental
REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList,
REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition,
- REACT_ACTIVITY_TYPE as Activity,
};
diff --git a/packages/react/src/ReactServer.fb.js b/packages/react/src/ReactServer.fb.js
index 998a78679830e..fe6089fc160a7 100644
--- a/packages/react/src/ReactServer.fb.js
+++ b/packages/react/src/ReactServer.fb.js
@@ -12,10 +12,13 @@ export {default as __SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRA
import {forEach, map, count, toArray, only} from './ReactChildren';
import {captureOwnerStack as captureOwnerStackImpl} from './ReactOwnerStack';
import {
+ REACT_ACTIVITY_TYPE,
REACT_FRAGMENT_TYPE,
REACT_PROFILER_TYPE,
REACT_STRICT_MODE_TYPE,
REACT_SUSPENSE_TYPE,
+ REACT_SUSPENSE_LIST_TYPE,
+ REACT_VIEW_TRANSITION_TYPE,
} from 'shared/ReactSymbols';
import {
cloneElement,
@@ -45,6 +48,7 @@ if (__DEV__) {
export {
Children,
+ REACT_ACTIVITY_TYPE as Activity,
REACT_FRAGMENT_TYPE as Fragment,
REACT_PROFILER_TYPE as Profiler,
REACT_STRICT_MODE_TYPE as StrictMode,
@@ -65,4 +69,7 @@ export {
useMemo,
version,
captureOwnerStack, // DEV-only
+ // Experimental
+ REACT_SUSPENSE_LIST_TYPE as unstable_SuspenseList,
+ REACT_VIEW_TRANSITION_TYPE as unstable_ViewTransition,
};
diff --git a/packages/react/src/ReactServer.js b/packages/react/src/ReactServer.js
index be5cd22d91b3f..f218074deea41 100644
--- a/packages/react/src/ReactServer.js
+++ b/packages/react/src/ReactServer.js
@@ -11,6 +11,7 @@ export {default as __SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRA
import {forEach, map, count, toArray, only} from './ReactChildren';
import {
+ REACT_ACTIVITY_TYPE,
REACT_FRAGMENT_TYPE,
REACT_PROFILER_TYPE,
REACT_STRICT_MODE_TYPE,
@@ -40,6 +41,7 @@ const Children = {
export {
Children,
+ REACT_ACTIVITY_TYPE as Activity,
REACT_FRAGMENT_TYPE as Fragment,
REACT_PROFILER_TYPE as Profiler,
REACT_STRICT_MODE_TYPE as StrictMode,