Repository navigation
Version Packages (next) - #424
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/next
branch
from
October 21, 2026 16:07
cac16af to
dca00b7
Compare
github-actions
Bot
force-pushed
the
changeset-release/next
branch
5 times, most recently
from
October 21, 2026 20:23
469351f to
b1efbe2
Compare
github-actions
Bot
force-pushed
the
changeset-release/next
branch
from
October 21, 2026 20:36
b1efbe2 to
a068afd
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to next, this PR will be updated.
nextis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonnext.Releases
@solidjs/vite-plugin@3.0.0-next.51
Patch Changes
ff493b9: Production builds now dedupe
solid-js,@solidjs/weband@solidjs/signalsthe same way dev does. A dependency with its own nested copy of Solid no longer adds a second runtime to the bundle, which broke context lookups (solid-js is being bundled twice in production and not in dev #112).81555d8: Invalidate the dev manifest's CSS cache in isolated SSR runners after file changes. Subsequent server responses include the updated styles before hydration. Responses started before invalidation cannot restore old cache entries or remove newer pending requests.
00d6746: Lazy-route CSS no longer goes missing from dev SSR when a host imports
virtual:solid-manifestbefore the dev server is listening (Dev manifest loses lazy CSS when imported before HTTP startup #414). Nitro's isolated runner does this at startup: the manifest had no origin to bake into the bridge URL yet, so it fell back to js-only resolution for the rest of the session. The bridge URL is now looked up on first use, without making the manifest import wait for the port, and a lookup made before the server listened is retried once it does.eecd5b6: Two dev fixes for the server function manifest, which the generated handler imports when another plugin owns the SSR environment (for example
@cloudflare/vite-plugin):"use server"file, or one that no longer declares server functions, is now removed from the manifest. Before, the manifest kept importing it, and every request failed withFailed to load urluntil the dev server restarted.b0887c0: Start mode dev: a stylesheet shared by the entry graph and a lazy component now keeps its first position in
<head>, as in production. The dev shell renders it twice. The dev style patch used to drop the earlier copy, so the stylesheet moved after the lazy component's own styles and equal-specificity overrides in the lazy component lost. When both copies are server-rendered, the patch now drops the later one.711c918: The plugin no longer sets
test.environment: 'jsdom'for Vitest. Set theenvironment yourself (
jsdomorhappy-domfor DOM component tests); Vitest'sown default is
node. The default also applied to Node-only suites that loadedthe plugin through a shared config, which then ran under jsdom and failed in
ways that were hard to trace. The client test posture (browser conditions, DOM
codegen) is unchanged, and
environment: 'node'still selects the serverposture.
f3fb6f2:
start.nodewithstart.instrument:dist/server/node.jsno longer loadsnode:httpbefore the instrument module runs, so OpenTelemetry's HTTP instrumentation now records a server span for each request. The entry awaits./server.jsfirst and loads its runtime fromnode-runtime.jsafterwards.e01a6b3: Compile modules whose id has the extension after the query, such as unplugin-icons'
~icons/mdi/folder?width=2em.tsx. These were left to Vite's default JSX transform, which produced React code (vite-plugin-solid 2.11.2 and onwards (up to 2.11.6) breaks unplugin-icons/vite with "solid" icon compiler #206). Customextensionsare now also matched when the query contains a dot.3954804: With
serverFunctionson, the dev server now also pre-bundles@solidjs/web/server-functions/client(serverFunctions.components (dev): server-functions client is duplicated when @solidjs/web is in optimizeDeps.exclude, so post-boot server components resolve to undefined #428):@solidjs/web/frames, used withcomponents: true, imports the client runtime by that subpath.@solidjs/web/server-functions/rich-argsimports it by that subpath too.When the app listed
@solidjs/webinoptimizeDeps.exclude, both loaded a second copy of the client from node_modules. Server components that mounted after boot resolved toundefined, andenableRichArguments()configured a client that compiled server functions did not use.A custom
runtime.clientis unchanged.84a681d: In dev, the server function manifest is now invalidated in every Vite environment, not just
clientandssr. A host that imports the generated handler from a server environment of its own, such as Void'svoid_workeror a Cloudflare worker, kept a stale manifest before. A server function that only the client referenced then failed with "not part of the deployment" until the dev server restarted.dd21761: Pre-bundle
@solidjs/signalsup front undervite dev(and Vitest browsermode) when the app can import it by name, i.e. it resolves from the project
root. The first optimizer pass otherwise inlines signals into
solid-js, so adirect
@solidjs/signalsimport from a module the scanner never reached (abrowser-mode test file, a non-literal dynamic import) was a late discovery:
re-optimize and a full page reload ("Vite unexpectedly reloaded a test").
Apps that only get signals transitively (pnpm's isolated layout) are
unchanged.
ab61dcc: Require solid-js / @solidjs/web 2.0.0-rc.16 (peer floor) and compile with @solidjs/compiler / @solidjs/babel-plugin rc.16. rc.16 adds
reportRequestFailureto @solidjs/web, and start mode's production handler now reports a contained failure (a middleware throw, asetupfailure) through it, so theconfigureServerErrorshook hears it as{ kind: 'request', handling: 'failed', event }— and not at all when the runtime already reported that error (an uncaught in-process server-function call staysserver-function/thrown), where rc.16's per-kind ledger would otherwise have heard it twice. JSX source locations (sourceNames.locations, which rc.16's compilers emit) now point at the authored source on both compiler backends: the JSX transform runs after the primitive-names,lazy()and refresh passes have reprinted the module, so its positions are mapped back through those passes' sourcemap.cc8c3bd:
sourceNamesgains alocationskind: afile:line:colnext to every component, binding and primitive label —createComponent(Home, props, "Home", "src/App.tsx:12:5"),createSignal(0, { name: "count", loc: "src/store.ts:3:22" })— so diagnostics,whyDidRunchains and devtools point at the line that declared the node. On in dev; off forobserveand production builds unless set ({ locations: true }orsourceNames: true), since those are shipped bundles. The plugin passes the resolved Vite root to both JSX compilers and to the primitives pass asroot, so paths are root-relative andhttp://localhost:5173/<path>opens the file in the browser's sources panel. Requires the@solidjs/compilerrelease that takes the option; the plugin probes the installed compiler and, on an older one, keeps passing the names without locations (warning once whenlocationswas asked for explicitly).7335d3a: Without
ssr: true, modules loaded on the server now compile to non-hydratable SSR output instead of DOM output. Prerendering a client-rendered app withssrLoadModuleno longer throws "Client-only API called on the server side" (Make ssr settings less strict #64).c10fe96: Server builds with
ssr.target: 'webworker'now resolve the server builds ofsolid-jsand@solidjs/web. The plugin adds theworkerexport condition to that environment, sorenderToStringand the other server APIs no longer resolve to their browser stubs (Vite does not load proper build (server) on ssr webworker build #153).fe5be7b: New
start.clientSetupoption: a client module the generated client entry runs before it hydrates or mounts the app. Use it to install a server-function transport wrapper, avite:preloadErrorlistener, or an error reporter before the first render, without writing your ownentry-client/entry-serverpair. The module may use top-levelawait, andhydrate()/render()waits for it. Combining it with an authoredentry-clientis a config error.The start options list in the README now also names
instrument.56e2b85: SSR builds no longer export
$$moduleUrlfrom entry chunks, so a Cloudflare Worker whosemainis a project module starts again in workerd.5c5fd6f: In the Vitest client posture (jsdom, happy-dom), the plugin now inlines
solid-js,@solidjs/weband the packages that import them without asolidexport condition, such as@solidjs/testing-library. Before, they stayed external, and the host runtime resolved their own imports. Node gets thebrowsercondition from Vitest's worker--conditions, but Deno does not apply it in worker threads (thethreadspool) and resolvesdeno/node. Under Deno,@solidjs/testing-libraryloaded the server build of@solidjs/webandrenderfailed withisServertrue (@solidjs/testing-library resolves @solidjs/web to the server build (isServer true) in jsdom tests under a multi-project vitest setup #369). Inlining sends these imports through Vite'sbrowsercondition and loads one client-build instance. Atest.server.deps.inlinelist is merged with the plugin's, and atest.server.deps.externalentry forsolid-jsstill opts out.a6cae59: In jsdom and happy-dom tests, Node no longer gets the
browsercondition for packages that Vitest leaves external. Node-only packages such asmsw/nodenow load ('Error: No known conditions for "./node" specifier in "msw" package' when using MSW with Vitest #125).629a957: Packages with a
solidexport condition that are declared only in the workspace root'spackage.jsonare now inlined for projects in that workspace. Before, Vitest loaded them with Node and failed withUnknown file extension ".jsx"(Vitest fails with TypeError: Unknown file extension ".jsx" #157).