Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Bytes Issue 345, published November 26, 2024, highlighted two Expo Router developments: a developer preview of React Server Components (RSC) and Server Functions, and DOM Components for embedding web modules in native apps. The ideas solve different problems: RSC moves selected work to a server, while DOM Components let a native app run selected web code in a WebView. Expo’s announcements describe preview-era capabilities and limitations, not their current production status.

What did Expo announce in November 2024?

Expo’s November 14 announcement introduced universal React Server Components and Server Functions in Expo Router as a developer preview for native apps and websites. Expo said the preview was intended to help library authors add support and gather feedback; production exports were not supported at that time. Expo’s announcement described the approach as an option alongside the existing client-component model.

On November 19, Expo announced DOM Components, a way to import a web module into a native app using the "use dom" directive. The module runs through a WebView proxy rather than becoming a native view. Expo presented it as a way to reuse parts of a React website and migrate selected components to native views incrementally. Expo’s DOM Components announcement explains the implementation and tradeoffs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The Bytes issue framed these updates as Expo Router “magic.” The phrase refers to these two announcements, not to a single feature or a general change to React Native. Bytes Issue 345 was published November 26, 2024. Its stated figure of 186,638 developers refers to people receiving the Bytes newsletter each week, not Expo or React Native adoption.

How do RSC and Server Functions work in Expo Router?

React Server Components run in a server environment, with components rendered at build time or when a request arrives. Expo Router’s server functions use the "use server" directive; the functions are asynchronous, can return JSX, and need a network connection to resolve. That makes them distinct from ordinary client-side code, which can run locally and support the app’s existing interaction and offline behavior.

Expo said client components remained the default in the 2024 preview. Developers could introduce server rendering selectively rather than moving an entire application to the server. The boundary matters: server modules do not have client APIs such as useState, useEffect, or useContext, and they cannot access native modules or views. Expo’s guidance was to place interactive code in a "use client" module.

“This is a developer preview of universal React Server Components. For the first time ever, you can use React Server Components & Server Actions in native apps.” — Evan Bacon, Expo Engineering

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How do DOM Components reuse web code in a native app?

A developer marks a web module with "use dom" and imports it into a native app. Expo described that directive as converting the file into a native WebView proxy. In production, the DOM component was bundled as an Expo website and embedded in the native binary, so the embedded component could be available offline after installation.

This approach is most useful when a web feature is costly to recreate immediately in native UI. Expo named Markdown and MDX rendering, TipTap rich-text editing, and React Flow charts as examples. A DOM Component can receive serializable props and send asynchronous callbacks across the DOM/native boundary, including requests to use native functionality such as haptics.

The web component and native app have separate React trees. Context and JavaScript globals do not cross between them automatically, so a DOM Component is not simply another native React component in the same runtime.

“The biggest limitation is that DOM components are still WebViews.” — Evan Bacon, Expo Engineering

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Which Expo feature fits which problem?

Question RSC and Server Functions DOM Components
What problem does it address? Rendering React components on a server and running asynchronous server functions. Running selected web modules inside a native app to reuse web UI.
Where does the work run? In a server environment; components may render at build time or request time. In a WebView-backed DOM environment embedded in the native app.
Does it require a network connection? Server functions require a network connection to resolve. The 2024 announcement described production bundles embedded in the app; it did not present the DOM component itself as a server function.
What is the main reuse strategy? Keep client components by default and opt selected work into server rendering. Import selected web modules, then migrate components to native views over time.
What crosses the boundary? Server modules cannot use client hooks or native APIs; interactive code belongs in a client module. Serializable props and asynchronous callbacks can pass between DOM and native code; React context and globals are not shared automatically.

These features are complementary only in a broad architectural sense. RSC concerns where React rendering and server functions execute; DOM Components concern how web code is hosted within a native app. Expo said RSC and Server Actions could not be used inside DOM Components in the 2024 announcement.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What limitations did Expo document for DOM Components?

  • WebView interaction: gestures, scrolling, and animations may feel less responsive on touch screens than native implementations.
  • Separate runtime boundary: the web and native sides have separate React trees; context and JavaScript globals do not automatically transfer.
  • No built-in navigation across the boundary: Expo Router did not provide built-in navigation across the DOM boundary in the announcement.
  • OTA limitation at announcement: Expo said over-the-air updates would not yet deliver new DOM Components.
  • No server components within DOM Components: the announcement said React Server Components and Server Actions could not be used inside them.

These constraints point to a practical decision: use a DOM Component when reuse of a substantial web feature outweighs the cost of keeping it in a WebView; prefer native UI when touch responsiveness, native integration, or seamless navigation is central.

What is known about current support?

The cited Expo posts establish what the company announced on November 14 and 19, 2024, including preview status and limitations at that time. They do not establish whether either feature is production-ready or has changed since then. Check current Expo documentation and release notes before choosing either approach for a new app; do not treat the 2024 preview conditions as a statement of present availability.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.