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

Offen Anfängerfreundlich
#511 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
TypeScript
Sterne
499
Forks
100
Ø Merge
1 T. 17 Std.
Gemergte PRs (30 T.)
4

Beschreibung

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).

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit src/components/theme.tsx und reproduziere den Fehler bei der SSR-Abhängigkeitsoptimierung mit solid-js 1.9.12 und dem im Issue beschriebenen minimalen Import für die Server-Bedingung. Behebe das Kompatibilitätsproblem des veröffentlichten Pakets und verifiziere anschließend, dass vite dev für ein SSR-Setup mit dem betroffenen Abhängigkeitsbereich startet und der Fehler wegen des fehlenden Exports nicht mehr auftritt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript, vite
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
75/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.