Which project does this relate to?
Start
Describe the bug
When a React Server Component is rendered (note in the reproduction, <div>Server Component</div> is simply rendered), and something imports radix-ui, the following error is thrown on build:
Error: [vite]: Rolldown failed to resolve import "@radix-ui/react-switch" from "virtual:vite-rsc/client-references/group/facade:src/router.tsx".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rolldownOptions.external`
This error occurs both on pnpm 11.5.2 and yarn 4.16.0.
The fix is either:
- Add
"use client"; wherever radix-ui is imported
- Add whatever dependencies need to be imported to package.json ("@radix-ui/react-switch" in the reproduction)
Complete minimal reproducer
https://github.com/jeremy-code/tanstack-radix-rsc
Steps to Reproduce the Bug
- Use "radix-ui" package
- Render RSC (in repro:
<div>Server Component</div>)
- Build
$ vite build
[1/5] analyze client references...
vite v8.0.16 building rsc environment for production...
? 16 modules transformed.
? built in 57ms
[2/5] analyze server references...
vite v8.0.16 building ssr environment for production...
? 288 modules transformed.
? built in 379ms
[3/5] build rsc environment...
vite v8.0.16 building rsc environment for production...
? 235 modules transformed.
computing gzip size...
dist/server/rsc/assets/styles-CnB0YbZX.css 6.79 kB ? gzip: 2.12 kB
dist/server/rsc/assets/getRsc-C5R062Hw.js 9.87 kB ? gzip: 3.26 kB
dist/server/rsc/assets/createServerFn-BobEx3_D.js 15.14 kB ? gzip: 4.59 kB
dist/server/rsc/index.js 136.53 kB ? gzip: 29.28 kB
dist/server/rsc/assets/router-CLIglB1Y.js 156.02 kB ? gzip: 37.63 kB
? built in 537ms
[4/5] build client environment...
vite v8.0.16 building client environment for production...
? 264 modules transformed.
computing gzip size...
dist/client/assets/styles-CnB0YbZX.css 6.79 kB ? gzip: 2.12 kB
dist/client/assets/styles-CnB0YbZX.css 6.79 kB ? gzip: 2.12 kB
dist/client/assets/getRsc-QiuN-GFR.js 0.07 kB ? gzip: 0.07 kB
dist/client/assets/router-DL6vnptt.js 0.41 kB ? gzip: 0.29 kB
dist/client/assets/routes-DGUEbE_g.js 8.72 kB ? gzip: 3.61 kB
dist/client/assets/index-Dsutsb6Q.js 344.59 kB ? gzip: 109.32 kB
? Build failed in 348ms
error during build:
Build failed with 1 error:
Error: [vite]: Rolldown failed to resolve import "@radix-ui/react-switch" from "virtual:vite-rsc/client-references/group/facade:src/router.tsx".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rolldownOptions.external`
at viteLog (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33346:57)
at file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33382:71
at onwarn (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/@vitejs+plugin-react@6.0.2_vite@8.0.16_@types+node@22.19.20_jiti@2.7.0_/node_modules/@vitejs/plugin-react/dist/index.js:40:7)
at file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33382:28
at onRollupLog (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33377:63)
at onLog (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33146:4)
at file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/rolldown@1.0.3/node_modules/rolldown/dist/shared/rolldown-build-CrPk_lZe.mjs:50:26
at logger (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/rolldown@1.0.3/node_modules/rolldown/dist/shared/rolldown-build-CrPk_lZe.mjs:41:3)
at aggregateBindingErrorsIntoJsError (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/rolldown@1.0.3/node_modules/rolldown/dist/shared/error-BuvQYXuZ.mjs:48:18)
at unwrapBindingResult (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/rolldown@1.0.3/node_modules/rolldown/dist/shared/error-BuvQYXuZ.mjs:18:128)
at #build (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/rolldown@1.0.3/node_modules/rolldown/dist/shared/rolldown-build-CrPk_lZe.mjs:3246:34)
at async buildEnvironment (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33253:64)
at async Object.build (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33675:19)
at async buildApp (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/@vitejs+plugin-rsc@0.5.27_react-dom@19.2.7_react@19.2.7__react@19.2.7_vite@8.0.16_@types+node@22.19.20_jiti@2.7.0_/node_modules/@vitejs/plugin-rsc/dist/plugin-BK29Va7z.js:658:3)
at async BasicMinimalPluginContext.handler (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/@vitejs+plugin-rsc@0.5.27_react-dom@19.2.7_react@19.2.7__react@19.2.7_vite@8.0.16_@types+node@22.19.20_jiti@2.7.0_/node_modules/@vitejs/plugin-rsc/dist/plugin-BK29Va7z.js:771:43)
at async Object.buildApp (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/chunks/node.js:33669:5)
at async CAC.<anonymous> (file:///$HOME/Github/tanstack-radix-rsc/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.20_jiti@2.7.0/node_modules/vite/dist/node/cli.js:777:3) {
errors: [Getter/Setter]
}
[ELIFECYCLE] Command failed with exit code 1.
yarn build
[1/5] analyze client references...
vite v8.0.16 building rsc environment for production...
✓ 16 modules transformed.
✓ built in 59ms
[2/5] analyze server references...
vite v8.0.16 building ssr environment for production...
✓ 288 modules transformed.
✓ built in 379ms
[3/5] build rsc environment...
vite v8.0.16 building rsc environment for production...
✓ 235 modules transformed.
computing gzip size...
dist/server/rsc/assets/styles-_kF3mkCq.css 8.05 kB │ gzip: 2.35 kB
dist/server/rsc/assets/getRsc-q48-lJ4K.js 10.00 kB │ gzip: 3.26 kB
dist/server/rsc/assets/createServerFn-B6413yml.js 15.59 kB │ gzip: 4.68 kB
dist/server/rsc/index.js 136.79 kB │ gzip: 29.35 kB
dist/server/rsc/assets/router-C2qD0Fbu.js 157.75 kB │ gzip: 37.78 kB
✓ built in 515ms
[4/5] build client environment...
vite v8.0.16 building client environment for production...
✓ 264 modules transformed.
✗ Build failed in 219ms
error during build:
Build failed with 1 error:
[RESOLVE_ERROR] Could not resolve '@radix-ui/react-switch' in \0virtual:vite-rsc/client-references/group/facade:src/router.tsx
╭─[ \0virtual:vite-rsc/client-references/group/facade:src/router.tsx:2:52 ]
│
2 │ import * as import_5fe8ff67a435 from "@radix-ui/react-switch";
│ ────────────┬───────────
│ ╰───────────── Your application tried to access @radix-ui/react-switch, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.
Required package: @radix-ui/react-switch
Required by: $HOME/Github/tanstack-radix-rsc/virtual:vite-rsc/client-references/group/facade:src/
│
│ Help: '\0virtual:vite-rsc/client-references/group/facade:src/router.tsx' is imported by the following path:
│ - \0virtual:vite-rsc/client-references/group/facade:src/router.tsx
│ - \0virtual:vite-rsc/client-references
│ - .yarn/__virtual__/@vitejs-plugin-rsc-virtual-5f5735ead0/3/.local/share/yarn/berry/cache/@vitejs-plugin-rsc-npm-0.5.27-8f7f17eee6-10c0.zip/node_modules/@vitejs/plugin-rsc/dist/browser.js
│ - \0virtual:tanstack-rsc-browser-decode
│ - .yarn/__virtual__/@tanstack-react-start-rsc-virtual-4ecf756ce4/3/.local/share/yarn/berry/cache/@tanstack-react-start-rsc-npm-0.1.24-a08dd24c29-10c0.zip/node_modules/@tanstack/react-start-rsc/dist/esm/createServerComponentFromStream.js
│ - .yarn/__virtual__/@tanstack-react-start-rsc-virtual-4ecf756ce4/3/.local/share/yarn/berry/cache/@tanstack-react-start-rsc-npm-0.1.24-a08dd24c29-10c0.zip/node_modules/@tanstack/react-start-rsc/dist/esm/serialization.client.js
│ - .yarn/__virtual__/@tanstack-react-start-virtual-81b1bcb7c7/3/.local/share/yarn/berry/cache/@tanstack-react-start-npm-1.168.25-e821f0410d-10c0.zip/node_modules/@tanstack/react-start/dist/esm/rsc/serialization/client.js
│ - \0virtual:tanstack-start-plugin-adapters/client
│ - ../../.local/share/yarn/berry/cache/@tanstack-start-client-core-npm-1.170.12-cbef131128-10c0.zip/node_modules/@tanstack/start-client-core/dist/esm/client/hydrateStart.js
│ - ../../.local/share/yarn/berry/cache/@tanstack-start-client-core-npm-1.170.12-cbef131128-10c0.zip/node_modules/@tanstack/start-client-core/dist/esm/client/index.js
│ - .yarn/__virtual__/@tanstack-react-start-client-virtual-0c397ddb06/3/.local/share/yarn/berry/cache/@tanstack-react-start-client-npm-1.168.13-188a5f5142-10c0.zip/node_modules/@tanstack/react-start-client/dist/esm/hydrateStart.js
│ - .yarn/__virtual__/@tanstack-react-start-client-virtual-0c397ddb06/3/.local/share/yarn/berry/cache/@tanstack-react-start-client-npm-1.168.13-188a5f5142-10c0.zip/node_modules/@tanstack/react-start-client/dist/esm/index.js
│ - .yarn/__virtual__/@tanstack-react-start-virtual-81b1bcb7c7/3/.local/share/yarn/berry/cache/@tanstack-react-start-npm-1.168.25-e821f0410d-10c0.zip/node_modules/@tanstack/react-start/dist/esm/client.js
│ - .yarn/__virtual__/@tanstack-react-start-virtual-81b1bcb7c7/3/.local/share/yarn/berry/cache/@tanstack-react-start-npm-1.168.25-e821f0410d-10c0.zip/node_modules/@tanstack/react-start/dist/plugin/default-entry/client.tsx
───╯
at aggregateBindingErrorsIntoJsError (file://$HOME/.local/share/yarn/berry/cache/rolldown-npm-1.0.3-6add5bd31e-10c0.zip/node_modules/rolldown/dist/shared/error-BuvQYXuZ.mjs:48:18)
at unwrapBindingResult (file://$HOME/.local/share/yarn/berry/cache/rolldown-npm-1.0.3-6add5bd31e-10c0.zip/node_modules/rolldown/dist/shared/error-BuvQYXuZ.mjs:18:128)
at #build (file://$HOME/.local/share/yarn/berry/cache/rolldown-npm-1.0.3-6add5bd31e-10c0.zip/node_modules/rolldown/dist/shared/rolldown-build-CrPk_lZe.mjs:3246:34)
at async buildEnvironment (file://$HOME/Github/tanstack-radix-rsc/.yarn/__virtual__/vite-virtual-b24d3f36d7/3/.local/share/yarn/berry/cache/vite-npm-8.0.16-a3c339cd2e-10c0.zip/node_modules/vite/dist/node/chunks/node.js:33253:64)
at async Object.build (file://$HOME/Github/tanstack-radix-rsc/.yarn/__virtual__/vite-virtual-b24d3f36d7/3/.local/share/yarn/berry/cache/vite-npm-8.0.16-a3c339cd2e-10c0.zip/node_modules/vite/dist/node/chunks/node.js:33675:19)
at async buildApp (file://$HOME/Github/tanstack-radix-rsc/.yarn/__virtual__/@vitejs-plugin-rsc-virtual-5f5735ead0/3/.local/share/yarn/berry/cache/@vitejs-plugin-rsc-npm-0.5.27-8f7f17eee6-10c0.zip/node_modules/@vitejs/plugin-rsc/dist/plugin-BK29Va7z.js:658:3)
at async BasicMinimalPluginContext.handler (file://$HOME/Github/tanstack-radix-rsc/.yarn/__virtual__/@vitejs-plugin-rsc-virtual-5f5735ead0/3/.local/share/yarn/berry/cache/@vitejs-plugin-rsc-npm-0.5.27-8f7f17eee6-10c0.zip/node_modules/@vitejs/plugin-rsc/dist/plugin-BK29Va7z.js:771:43)
at async Object.buildApp (file://$HOME/Github/tanstack-radix-rsc/.yarn/__virtual__/vite-virtual-b24d3f36d7/3/.local/share/yarn/berry/cache/vite-npm-8.0.16-a3c339cd2e-10c0.zip/node_modules/vite/dist/node/chunks/node.js:33669:5)
at async CAC.<anonymous> (file://$HOME/Github/tanstack-radix-rsc/.yarn/__virtual__/vite-virtual-b24d3f36d7/3/.local/share/yarn/berry/cache/vite-npm-8.0.16-a3c339cd2e-10c0.zip/node_modules/vite/dist/node/cli.js:777:3) {
errors: [Getter/Setter]
}
Expected behavior
As a user, I expected the behavior that the import would be resolved correctly without the use of "use client", but I am seeing that an error occurs.
Screenshots or Videos
No response
Platform
- Router / Start Version: 1.168.25
- OS: macOS
- Browser: Chrome
- Browser Version: 148.0.7778.216
- Bundler: vite
- Bundler Version: 8.0.16
Additional context
This doesn't work:
// Switch.tsx
import { Switch as SwitchPrimitive } from "radix-ui";
...
// package.json
"dependencies": {
"radix-ui": "^1.5.0",
...
While the following do work:
// Switch.tsx
"use client";
import { Switch as SwitchPrimitive } from "radix-ui";
...
// package.json
"dependencies": {
"radix-ui": "^1.5.0",
...
// Switch.tsx
import { Switch as SwitchPrimitive } from "radix-ui";
...
// package.json
"dependencies": {
"@radix-ui/react-switch": "^1.3.0",
"radix-ui": "^1.5.0",
...
// Switch.tsx
import * as SwitchPrimitive from "@radix-ui/react-switch";
...
// package.json
"dependencies": {
"@radix-ui/react-switch": "^1.3.0",
"radix-ui": "^1.5.0",
...
Which project does this relate to?
Start
Describe the bug
When a React Server Component is rendered (note in the reproduction,
<div>Server Component</div>is simply rendered), and something importsradix-ui, the following error is thrown on build:This error occurs both on pnpm 11.5.2 and yarn 4.16.0.
The fix is either:
"use client";wherever radix-ui is importedComplete minimal reproducer
https://github.com/jeremy-code/tanstack-radix-rsc
Steps to Reproduce the Bug
<div>Server Component</div>)Expected behavior
As a user, I expected the behavior that the import would be resolved correctly without the use of "use client", but I am seeing that an error occurs.
Screenshots or Videos
No response
Platform
Additional context
This doesn't work:
While the following do work: