TanStack / TanStack/devtools

devtools-ui 0.7.0 breaks SSR boot with solid-js <=1.9.12: `use` is not exported by solid-js/web server build

Abierto Apto para principiantes
#511 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
TypeScript
Estrellas
499
Forks
100
Merge medio
1 d 17 h
PR fusionados (30 d)
4

Descripción

TanStack Devtools version

@tanstack/devtools 0.14.0 / @tanstack/devtools-ui 0.7.0 (still present in 0.14.1 / 0.7.1, the latest at time of filing)

Framework/Library version

TanStack Start (@tanstack/react-start 1.168.x) + Vite 8 (rolldown) + @cloudflare/vite-plugin, solid-js 1.9.12 in the lockfile

Describe the bug

Upgrading @tanstack/devtools 0.13.0 → 0.14.0 (which bumps the bundled @tanstack/devtools-ui 0.6.0 → 0.7.0) makes vite dev fail to boot in any app whose SSR environment processes devtools, when the resolved solid-js is ≤ 1.9.12:

Error: Error during dependency optimization:

[MISSING_EXPORT] "use" is not exported by "node_modules/solid-js/web/dist/server.js".
   ╭─[ node_modules/@tanstack/devtools/node_modules/@tanstack/devtools-ui/dist/esm/components/theme.js:2:45 ]
   │
 2 │ import { createComponent, insert, template, use } from "solid-js/web";
   │                                             ─┬─
   │                                              ╰─── Missing export

The dev server never starts, which also takes down every Playwright run driven by vite dev.

Root cause
  • @tanstack/devtools-ui 0.7.0 (PR #492, commit a46d1f5) wrapped ThemeContextProvider's children in <span style="display:contents" ref={setContainer}> so it can call ensureDevtoolsStyles(element.ownerDocument) (src/components/theme.tsx). The Solid compiler emits that ref as use(setContainer, _el$), so the published ESM (dist/esm/components/theme.js) now imports use from solid-js/web. In 0.6.0 that file imported only createComponent.
  • Under the node/SSR export condition, solid-js/web resolves to web/dist/server.js. That server build exported no use at all through solid-js 1.9.12; solid-js 1.9.13 (2026-05-15) added it as a notSup stub (notSup as use).
  • @tanstack/devtools-ui declares solid-js: >=1.9.7 (and @tanstack/devtools depends on ^1.9.9), so resolvers happily keep ≤ 1.9.12 in existing lockfiles — a lockfile that worked with devtools 0.13.0 hard-fails right after the bump.

Client-only setups never hit it (the browser build has always exported use), which is presumably why it shipped unnoticed. It surfaces wherever the SSR side bundles or import-validates devtools — e.g. TanStack Start with rolldown-vite's SSR dependency optimizer.

Steps to reproduce
  1. Lockfile with solid-js@1.9.12 (any version ≥1.9.7 and ≤1.9.12 works) and @tanstack/devtools@0.14.x.
  2. Import devtools in an app whose Vite SSR environment processes it (TanStack Start default setup is enough).
  3. vite devMISSING_EXPORT "use" during SSR dependency optimization.

Or minimally, in any Node ESM context resolving the server condition:

import { use } from 'solid-js/web'; // solid-js@1.9.12, server condition → SyntaxError/MISSING_EXPORT
Suggested fix

Raise the solid-js floor to ^1.9.13 in @tanstack/devtools-ui's (and @tanstack/devtools's) dependency ranges, so resolvers pull a solid-js whose server build has the use stub. Alternatively avoid the refuse emission in output that gets loaded under the server condition.

Workaround for affected users: force-dedupe solid-js to ≥ 1.9.13 (we removed the stale nested resolutions from the lockfile so a single hoisted 1.9.15 serves everything; that fixes the boot).

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con src/components/theme.tsx y reproduce el fallo de optimización de dependencias de SSR usando solid-js 1.9.12 y el import mínimo para la condición de servidor descrito en el issue. Resuelve el problema de compatibilidad del paquete publicado y verifica después que vite dev se inicia para una configuración SSR con el rango de dependencias afectado y que el error de exportación ausente ya no se produce.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript, vite
Área
tooling
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Tranquilo
Claridad
Bien especificado
Aptitud para principiantes
75/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.