From cb0f429a80067e8ff2a95cdee8a78fed9b52366d Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 20:53:35 +0100 Subject: [PATCH 01/11] add vite-ecosystem-ci scripts --- apps/tests/playwright.config.ts | 6 +++--- package.json | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/tests/playwright.config.ts b/apps/tests/playwright.config.ts index 8db7460dc..2625f3613 100644 --- a/apps/tests/playwright.config.ts +++ b/apps/tests/playwright.config.ts @@ -5,15 +5,15 @@ export default defineConfig({ testMatch: "**/*.test.ts", webServer: { - command: "pnpm run dev", - url: "http://localhost:3000", + command: "pnpm run dev --host 127.0.0.1 --port 3000 --strictPort", + url: "http://127.0.0.1:3000", reuseExistingServer: true, stdout: "pipe", stderr: "pipe", }, use: { - baseURL: "http://localhost:3000", + baseURL: "http://127.0.0.1:3000", trace: "on-first-retry", }, diff --git a/package.json b/package.json index 15552f655..5963d0133 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,10 @@ "clean:test": "pnpx rimraf .tmp", "release": "pnpm build && changeset publish", "format": "pnpm oxfmt", - "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = .publishConfig.exports') > package.json\"" + "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = .publishConfig.exports') > package.json\"", + "vite-ecosystem-ci:build": "pnpm run build:all", + "vite-ecosystem-ci:before-test": "pnpm --filter tests exec playwright install chromium", + "vite-ecosystem-ci:test": "pnpm --filter tests run test:all" }, "devDependencies": { "@changesets/cli": "^2.29.8", From cb5b48e05847b2c243d154c913042aa9a004332d Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 21:08:19 +0100 Subject: [PATCH 02/11] vite 8 compat manifest plugin --- packages/start/src/config/manifest.ts | 45 +++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/packages/start/src/config/manifest.ts b/packages/start/src/config/manifest.ts index 093cc7209..58a88b9e8 100644 --- a/packages/start/src/config/manifest.ts +++ b/packages/start/src/config/manifest.ts @@ -40,9 +40,48 @@ export function manifest(start: SolidStartOptions): PluginOption { v => "isEntry" in v && v.isEntry, ); if (!entry) throw new Error("No client entry found"); - clientViteManifest = JSON.parse( - (globalThis.START_CLIENT_BUNDLE[".vite/manifest.json"] as any).source, - ); + let viteStrVersion = (devServer?.config?.logger as any)?.config?.version; + if (!viteStrVersion) { + try { + viteStrVersion = await import("vite").then(m => m.version); + } catch (e) { + // ignore + } + } + + let rawManifest: string | undefined; + + const viteMajor = parseInt(viteStrVersion!.split('.')[0], 10); + + const manifestKey = Object.keys(globalThis.START_CLIENT_BUNDLE).find(k => k.endsWith("manifest.json")); + if (manifestKey && viteMajor < 8) { + const manifestAsset = globalThis.START_CLIENT_BUNDLE[manifestKey] as any; + if (manifestAsset.type === "asset") { + rawManifest = manifestAsset.source as string; + } else if (manifestAsset.type === "chunk") { + rawManifest = manifestAsset.code as string; + } else if (typeof manifestAsset === "string") { + rawManifest = manifestAsset; + } else { + rawManifest = manifestAsset.source || manifestAsset.code || JSON.stringify(manifestAsset); + } + } else { + const fs = await import("node:fs"); + const path = await import("node:path"); + try { + const appRoot = (start as any).appRoot || "./src"; + const manifestPath = path.resolve(appRoot, "..", ".solid-start/client/.vite/manifest.json"); + rawManifest = fs.readFileSync(manifestPath, "utf-8"); + } catch (e) { + throw new Error(`Manifest asset not found in bundle and could not be read from disk. Keys: ${Object.keys(globalThis.START_CLIENT_BUNDLE).join(", ")}. Error: ${e}`); + } + } + + if (!rawManifest) { + throw new Error("Failed to extract or read raw manifest."); + } + + clientViteManifest = JSON.parse(rawManifest); } return `export const clientViteManifest = ${JSON.stringify(clientViteManifest)};`; } else if (id === `\0${VIRTUAL_MODULES.middleware}`) return "export default {};"; From bef551345ee98a9d23c814562aab3b52380d92a8 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 21:23:02 +0100 Subject: [PATCH 03/11] changeset --- .changeset/vite-ecosystem-ci-bump.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/vite-ecosystem-ci-bump.md diff --git a/.changeset/vite-ecosystem-ci-bump.md b/.changeset/vite-ecosystem-ci-bump.md new file mode 100644 index 000000000..0e02ea71c --- /dev/null +++ b/.changeset/vite-ecosystem-ci-bump.md @@ -0,0 +1,5 @@ +--- +"@solidjs/start": patch +--- + +Add vite-ecosystem-ci scripts and support Vite 8 asset manifest loading From 9d53972c0a7035fea63706b04fc8cbec38e9721a Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 21:37:51 +0100 Subject: [PATCH 04/11] check fixture-nitro-3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5963d0133..37c783179 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "release": "pnpm build && changeset publish", "format": "pnpm oxfmt", "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = .publishConfig.exports') > package.json\"", - "vite-ecosystem-ci:build": "pnpm run build:all", + "vite-ecosystem-ci:build": "pnpm run build:all && pnpm --filter fixture-nitro-3 build", "vite-ecosystem-ci:before-test": "pnpm --filter tests exec playwright install chromium", "vite-ecosystem-ci:test": "pnpm --filter tests run test:all" }, From 9af04de896ce2aac14c80c930d84f97bff612558 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 21:59:31 +0100 Subject: [PATCH 05/11] only check source for vite 7 manifest --- packages/start/src/config/manifest.ts | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/start/src/config/manifest.ts b/packages/start/src/config/manifest.ts index 58a88b9e8..209c91dbd 100644 --- a/packages/start/src/config/manifest.ts +++ b/packages/start/src/config/manifest.ts @@ -56,15 +56,7 @@ export function manifest(start: SolidStartOptions): PluginOption { const manifestKey = Object.keys(globalThis.START_CLIENT_BUNDLE).find(k => k.endsWith("manifest.json")); if (manifestKey && viteMajor < 8) { const manifestAsset = globalThis.START_CLIENT_BUNDLE[manifestKey] as any; - if (manifestAsset.type === "asset") { - rawManifest = manifestAsset.source as string; - } else if (manifestAsset.type === "chunk") { - rawManifest = manifestAsset.code as string; - } else if (typeof manifestAsset === "string") { - rawManifest = manifestAsset; - } else { - rawManifest = manifestAsset.source || manifestAsset.code || JSON.stringify(manifestAsset); - } + rawManifest = manifestAsset.source as string; } else { const fs = await import("node:fs"); const path = await import("node:path"); From d73cd970875e4cda9c7b68c3939147707b6f8481 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 23:23:53 +0100 Subject: [PATCH 06/11] vite 8 compat --- .changeset/vite-ecosystem-ci-bump.md | 4 ++-- package.json | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.changeset/vite-ecosystem-ci-bump.md b/.changeset/vite-ecosystem-ci-bump.md index 0e02ea71c..743534212 100644 --- a/.changeset/vite-ecosystem-ci-bump.md +++ b/.changeset/vite-ecosystem-ci-bump.md @@ -1,5 +1,5 @@ --- -"@solidjs/start": patch +"@solidjs/start": minor --- -Add vite-ecosystem-ci scripts and support Vite 8 asset manifest loading +Add support for Vite 8 asset manifest loading diff --git a/package.json b/package.json index 37c783179..15552f655 100644 --- a/package.json +++ b/package.json @@ -26,10 +26,7 @@ "clean:test": "pnpx rimraf .tmp", "release": "pnpm build && changeset publish", "format": "pnpm oxfmt", - "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = .publishConfig.exports') > package.json\"", - "vite-ecosystem-ci:build": "pnpm run build:all && pnpm --filter fixture-nitro-3 build", - "vite-ecosystem-ci:before-test": "pnpm --filter tests exec playwright install chromium", - "vite-ecosystem-ci:test": "pnpm --filter tests run test:all" + "rewrite-exports": "pnpm --filter='./packages/*' -c exec \"echo \\$(cat package.json | jq '.exports = .publishConfig.exports') > package.json\"" }, "devDependencies": { "@changesets/cli": "^2.29.8", From 91dff4956b04ee8fd8aac5dc79be1a691d7bc277 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 23:29:46 +0100 Subject: [PATCH 07/11] don't incl playwright --- apps/tests/playwright.config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/tests/playwright.config.ts b/apps/tests/playwright.config.ts index 2625f3613..8db7460dc 100644 --- a/apps/tests/playwright.config.ts +++ b/apps/tests/playwright.config.ts @@ -5,15 +5,15 @@ export default defineConfig({ testMatch: "**/*.test.ts", webServer: { - command: "pnpm run dev --host 127.0.0.1 --port 3000 --strictPort", - url: "http://127.0.0.1:3000", + command: "pnpm run dev", + url: "http://localhost:3000", reuseExistingServer: true, stdout: "pipe", stderr: "pipe", }, use: { - baseURL: "http://127.0.0.1:3000", + baseURL: "http://localhost:3000", trace: "on-first-retry", }, From 27a39b4346522f3c04868e1007e3568b9f618efc Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Sun, 22 Feb 2026 23:38:30 +0100 Subject: [PATCH 08/11] changset --- .changeset/vite-ecosystem-ci-bump.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/vite-ecosystem-ci-bump.md b/.changeset/vite-ecosystem-ci-bump.md index 743534212..c5136010f 100644 --- a/.changeset/vite-ecosystem-ci-bump.md +++ b/.changeset/vite-ecosystem-ci-bump.md @@ -1,5 +1,5 @@ --- -"@solidjs/start": minor +"@solidjs/start": patch --- Add support for Vite 8 asset manifest loading From 707a01092cae27c697b302a0f4daf193bc81559c Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Mon, 23 Feb 2026 00:06:59 +0100 Subject: [PATCH 09/11] fix jsx build error --- packages/start/src/config/index.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/start/src/config/index.ts b/packages/start/src/config/index.ts index 4b1c82179..9cd6c5682 100644 --- a/packages/start/src/config/index.ts +++ b/packages/start/src/config/index.ts @@ -80,6 +80,16 @@ export function solidStart(options?: SolidStartOptions): Array { return { appType: "custom", build: { assetsDir: "_build/assets" }, + optimizeDeps: { + // Suppress TS errors from Vite 7 types when configuring Vite 8's Rolldown + ...({ + rolldownOptions: { + transform: { + jsx: "react", + }, + }, + } as any), + }, environments: { [VITE_ENVIRONMENTS.client]: { consumer: "client", From 742c9541ebc7180edd45020d621b961dce430280 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Mon, 23 Feb 2026 00:08:28 +0100 Subject: [PATCH 10/11] dynamic manifest path --- packages/start/src/config/index.ts | 3 ++- packages/start/src/config/manifest.ts | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/start/src/config/index.ts b/packages/start/src/config/index.ts index 9cd6c5682..aa693613c 100644 --- a/packages/start/src/config/index.ts +++ b/packages/start/src/config/index.ts @@ -231,8 +231,9 @@ export function solidStart(options?: SolidStartOptions): Array { { name: "solid-start:capture-client-bundle", enforce: "post", - generateBundle(_options, bundle) { + generateBundle(options, bundle) { globalThis.START_CLIENT_BUNDLE = bundle; + (globalThis as any).START_CLIENT_OUT_DIR = options.dir; }, }, devServer(), diff --git a/packages/start/src/config/manifest.ts b/packages/start/src/config/manifest.ts index 209c91dbd..b2997a805 100644 --- a/packages/start/src/config/manifest.ts +++ b/packages/start/src/config/manifest.ts @@ -62,7 +62,15 @@ export function manifest(start: SolidStartOptions): PluginOption { const path = await import("node:path"); try { const appRoot = (start as any).appRoot || "./src"; - const manifestPath = path.resolve(appRoot, "..", ".solid-start/client/.vite/manifest.json"); + let outDir = ".solid-start/client"; + if (devServer?.environments?.client?.config?.build?.outDir) { + outDir = devServer.environments.client.config.build.outDir; + } else if (this.environment?.config?.build?.outDir && this.environment?.config?.consumer === "client") { + outDir = this.environment.config.build.outDir; + } else if ((globalThis as any).START_CLIENT_OUT_DIR) { + outDir = (globalThis as any).START_CLIENT_OUT_DIR; + } + const manifestPath = path.resolve(appRoot, "..", outDir, ".vite/manifest.json"); rawManifest = fs.readFileSync(manifestPath, "utf-8"); } catch (e) { throw new Error(`Manifest asset not found in bundle and could not be read from disk. Keys: ${Object.keys(globalThis.START_CLIENT_BUNDLE).join(", ")}. Error: ${e}`); From 8b035d27c7a69f854b813dba2e764e14c870d980 Mon Sep 17 00:00:00 2001 From: Birk Skyum Date: Mon, 23 Feb 2026 00:50:23 +0100 Subject: [PATCH 11/11] fix nitro preview --- packages/start/src/config/fs-routes/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/start/src/config/fs-routes/index.ts b/packages/start/src/config/fs-routes/index.ts index 272f7abaa..80f9ecb1a 100644 --- a/packages/start/src/config/fs-routes/index.ts +++ b/packages/start/src/config/fs-routes/index.ts @@ -55,8 +55,8 @@ export function fsRoutes({ routers }: FsRoutesArgs): Array { const buildId = `${v.src}?${v.pick.map((p: any) => `pick=${p}`).join("&")}`; return { src: relative(root, buildId), - build: isBuild ? `_$() => import(/* @vite-ignore */ '${buildId}')$_` : undefined, - import: `_$() => import(/* @vite-ignore */ '${buildId}')$_`, + build: isBuild ? `_$() => import('${buildId}')$_` : undefined, + import: `_$() => import('${buildId}')$_`, }; } return v;