WIP: Upgrade to solid 2 beta#2091
Draft
brenelz wants to merge 45 commits into
Draft
Conversation
✅ Deploy Preview for solid-start-landing-page ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
🦋 Changeset detectedLatest commit: 712731b The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
commit: |
brenelz
commented
Mar 4, 2026
brenelz
commented
Mar 4, 2026
brenelz
commented
Mar 4, 2026
brenelz
commented
Mar 7, 2026
brenelz
commented
Mar 7, 2026
lxsmnsyc
reviewed
Mar 9, 2026
Member
|
We can probably use |
Member
|
needs rebasing |
- Update leftover accessor-style children callbacks to beta.15 semantics: non-keyed <For> and keyed <Show> now pass raw values, not accessors (notes, hackernews, todomvc fixtures + one missed spot in the dev overlay) - Patch terracotta to shim removed @solidjs/web createDynamic export - Align @solidjs/signals in apps/tests with solid-js 2.0.0-beta.15 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts: # apps/tests/vite.config.ts # packages/start/package.json # packages/start/src/config/index.ts # packages/start/src/fns/handler.ts # packages/start/src/fns/server.ts # packages/start/src/server/handler.ts # pnpm-lock.yaml
- onSettled no longer accepts async callbacks (a returned Promise is an invalid cleanup value) — wrap the async work in a void IIFE across the test routes, and convert main's new server-env route from createEffect(async) to the same pattern - dev overlay: Errored's fallback now receives an accessor, and signal writes inside the boundary's owned scope throw — read the error and defer the push to a microtask Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
In Solid 2, createEffect's compute runs during SSR, so the export check executed on the server — where the "use server" module legitimately still exports testQuery — baking "true" into the markup. Use onSettled (a server no-op) like the other server-function routes so the check runs against the client module, where non-function exports are stripped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
terracotta next.6 migrated to solid 2.0.0-beta.15 (own createDynamic helper, JSX types from @solidjs/web), so the pnpm patch shimming the removed @solidjs/web createDynamic export is no longer needed, and the dev overlay's Select props no longer need the `as any` cast. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
katywings
reviewed
Jul 8, 2026
brenelz
commented
Jul 8, 2026
Bring back the withAssets logic in shared/lazy.ts (id$$ manifest lookup + useAssets injection with nonce), adapted to beta.15 where lazy() takes a required moduleUrl in SSR: - config/lazy.ts: inject vite-plugin-solid's __SOLID_LAZY_MODULE__ placeholder into user-land lazy() calls before rewriting the solid-js import, since the plugin only injects it for "solid-js" imports - server/handler.ts: resolve unknown moduleUrls in the dev manifest via a Proxy fallback so client hydration can preload lazy modules in dev - css fixture: replace removed createAsync with createMemo, pass an explicit moduleUrl for the import.meta.glob lazy, and fix onSettled returning a non-cleanup value Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The raw-HTML-string workaround existed for a babel-plugin-jsx-dom-expressions spread crash that's fixed in 0.50.0-next.14. The remaining blocker was beta.15's owner-based hydration keys: useAssets thunks run at shell-injection time with no owner, so ssrElement's getNextContextId call threw and killed the server process. Wrapping the asset JSX in <NoHydration> provides an owner with hydration-key generation disabled — correct for head tags, which never hydrate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Solid v2 renders the css already itself
Co-authored-by: Cursor <cursoragent@cursor.com>
The dom-expressions asset registry + vite-plugin-solid's virtual manifests now cover everything Start's custom plumbing did: - pass virtual:solid-manifest straight to renderToString/renderToStream (dev: async resolver collecting inline styles from the module graph; prod: the client build manifest), replacing getSsrManifest, collect-styles, and the per-request asset collection in createPageEvent - register entry-owned CSS at render start in dev (the resolver manifest can't be enumerated by the runtime) and inject vite-plugin-solid's devStylePatch for HMR adoption of streamed style tags - acquire/release route CSS on the client through virtual:solid-manifest/client + acquireAsset, keyed by route source, so navigations add stylesheets before paint and drop them on leave - use solid-js lazy directly; its moduleUrl transform, hydration-id keyed module map, and modulepreload registration replace Start's wrapper and the lazy() config transforms - delete the now-unused manifest/, assets/, collect-styles, shared/lazy modules and the capture-client-bundle plugin Co-authored-by: Cursor <cursoragent@cursor.com>
…ization protocol Deletes src/directives/* in favor of the serverFunctions() plugin hoisted into vite-plugin-solid (same compiler, plus root-relative function id hashing and a persisted client->SSR manifest for two-invocation builds). Ports fns/serialization.ts onto @solidjs/web/serialization: the default JSON codec now gets its plugin set, feature policy, and depth limit from the shared protocol layer, and the opt-in "js" (eval) mode shares the same plugin resolution. Files are annotated with a protocol/generic/ policy taxonomy to guide what hoists next. Co-authored-by: Cursor <cursoragent@cursor.com>
Start's fns layer is now configuration over the core runtime: the client re-exports the fetch transport (endpoint set from BASE_URL), the server configures event provisioning and endpoint over the core registry, and the HTTP handler is core handleServerFunctionRequest with Start's policies as hooks (single-flight collection, no-JS flash cookie). The bespoke registration/serialization/shared modules and the customBody shim are deleted — the router (0.17.0-next.5) consumes the core protocol directly. The eval-based SEROVAL_MODE option is dropped. Everything now resolves from the published stack: solid 2.0.0-beta.19, router 0.17.0-next.5, vite-plugin-solid 3.0.0-next.11 (local link overrides removed). Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
brenelz
commented
Jul 20, 2026
| esbuildOptions: { | ||
| plugins: [ | ||
| { | ||
| name: "solid-compat", |
Contributor
Author
There was a problem hiding this comment.
this can probably be removed
Single-flight collection and the no-JS flash-cookie convention move to
@solidjs/router (their vocabulary — query cache keys, submissions — is
the router's). handleSingleFlight's data-only app render, transformResult,
createSingleFlightHeaders, handleNoJS, and the flash-cookie SSR seeding
are deleted; the handler wires createFlightDataCollector({ routes, base })
(the router's pure preload runner over the file-system route tree) and
createNoJSHandler({ base }) from @solidjs/router/server into the core
handler hooks. TEMPORARY workspace overrides link the sibling
solid-router/solid checkouts until the releases carrying the flight
bridge ship.
Co-authored-by: Cursor <cursoragent@cursor.com>
Start's GET read the client proxy's .GET property, which the core extension surface removed (references now declare their method through GET(fn) over the metadata channel). The shim would silently return undefined; @solidjs/start now re-exports GET from @solidjs/web/server-functions so the import surface is unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
… 3.0.0-next.14 The published releases now carry the flight bridge and the router's server-function integration, so the TEMPORARY workspace links to the sibling solid/solid-router checkouts are removed in favor of pinned versions. Co-authored-by: Cursor <cursoragent@cursor.com>
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.
PR Checklist
Seeing what It take to update SolidStart to use Solid 2.0 beta. The examples work even with solid-router