diff --git a/.changeset/warm-cats-juggle.md b/.changeset/warm-cats-juggle.md
new file mode 100644
index 000000000..25d5ec16f
--- /dev/null
+++ b/.changeset/warm-cats-juggle.md
@@ -0,0 +1,5 @@
+---
+"@solidjs/start": patch
+---
+
+Support JavaScript projects whose app and client/server entries use `.jsx`.
diff --git a/apps/fixtures/bare-js/package.json b/apps/fixtures/bare-js/package.json
new file mode 100644
index 000000000..9e159d849
--- /dev/null
+++ b/apps/fixtures/bare-js/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "fixture-bare-js",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite dev",
+ "build": "vite build"
+ },
+ "dependencies": {
+ "@solidjs/start": "workspace:*",
+ "nitro": "^3.0.260610-beta",
+ "solid-js": "^1.9.11",
+ "vite": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=24"
+ }
+}
diff --git a/apps/fixtures/bare-js/src/app.jsx b/apps/fixtures/bare-js/src/app.jsx
new file mode 100644
index 000000000..e389f8013
--- /dev/null
+++ b/apps/fixtures/bare-js/src/app.jsx
@@ -0,0 +1,14 @@
+import { createSignal } from "solid-js";
+
+export default function App() {
+ const [count, setCount] = createSignal(0);
+
+ return (
+
+ Hello world!
+
+
+ );
+}
diff --git a/apps/fixtures/bare-js/src/entry-client.jsx b/apps/fixtures/bare-js/src/entry-client.jsx
new file mode 100644
index 000000000..9c6948397
--- /dev/null
+++ b/apps/fixtures/bare-js/src/entry-client.jsx
@@ -0,0 +1,4 @@
+// @refresh reload
+import { mount, StartClient } from "@solidjs/start/client";
+
+mount(() => , document.getElementById("app"));
diff --git a/apps/fixtures/bare-js/src/entry-server.jsx b/apps/fixtures/bare-js/src/entry-server.jsx
new file mode 100644
index 000000000..f28c4d8f9
--- /dev/null
+++ b/apps/fixtures/bare-js/src/entry-server.jsx
@@ -0,0 +1,20 @@
+// @refresh reload
+import { createHandler, StartServer } from "@solidjs/start/server";
+
+export default createHandler(() => (
+ (
+
+
+
+
+ {assets}
+
+
+ {children}
+ {scripts}
+
+
+ )}
+ />
+));
diff --git a/apps/fixtures/bare-js/vite.config.js b/apps/fixtures/bare-js/vite.config.js
new file mode 100644
index 000000000..bd727617b
--- /dev/null
+++ b/apps/fixtures/bare-js/vite.config.js
@@ -0,0 +1,7 @@
+import { nitro } from "nitro/vite";
+import { defineConfig } from "vite";
+import { solidStart } from "../../../packages/start/src/config/index.ts";
+
+export default defineConfig({
+ plugins: [solidStart(), nitro()],
+});
diff --git a/packages/start/src/config/dev-server.ts b/packages/start/src/config/dev-server.ts
index e1d4aa188..3a5ac418a 100644
--- a/packages/start/src/config/dev-server.ts
+++ b/packages/start/src/config/dev-server.ts
@@ -10,7 +10,7 @@ import {
} from "vite";
import { VITE_ENVIRONMENTS } from "./constants.ts";
-export function devServer(): Array {
+export function devServer(serverEntryPath: string): Array {
return [
{
name: "solid-start-dev-server",
@@ -62,7 +62,7 @@ export function devServer(): Array {
try {
const serverEntry: {
default: { fetch: (req: Request) => Promise };
- } = await serverEnv.runner.import("./src/entry-server.tsx");
+ } = await serverEnv.runner.import(serverEntryPath);
const webRes = await serverEntry.default.fetch(webReq);
diff --git a/packages/start/src/config/index.ts b/packages/start/src/config/index.ts
index b40c21ddb..f8a574e9d 100644
--- a/packages/start/src/config/index.ts
+++ b/packages/start/src/config/index.ts
@@ -70,8 +70,8 @@ export function solidStart(options?: SolidStartOptions): Array {
serverFunctionsPlugin({
manifest: VIRTUAL_MODULES.serverFnManifest,
runtime: {
- server: '@solidjs/start/fns/server',
- client: '@solidjs/start/fns/client',
+ server: "@solidjs/start/fns/server",
+ client: "@solidjs/start/fns/client",
},
filter: options?.serverFunctions?.filter,
}),
@@ -136,7 +136,7 @@ export function solidStart(options?: SolidStartOptions): Array {
manifest: true,
copyPublicDir: false,
rollupOptions: {
- input: "~/entry-server.tsx",
+ input: handlers.server,
},
outDir: "dist/server",
commonjsOptions: {
@@ -236,7 +236,7 @@ export function solidStart(options?: SolidStartOptions): Array {
(globalThis as any).START_CLIENT_OUT_DIR = options.dir;
},
},
- devServer(),
+ devServer(handlers.server),
solid({
...start.solid,
ssr: true,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b5d401adf..b7201efa1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -42,6 +42,21 @@ importers:
specifier: ^8.0.0
version: 8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)
+ apps/fixtures/bare-js:
+ dependencies:
+ '@solidjs/start':
+ specifier: workspace:*
+ version: link:../../../packages/start
+ nitro:
+ specifier: ^3.0.260610-beta
+ version: 3.0.260610-beta(chokidar@5.0.0)(dotenv@17.3.1)(giget@2.0.0)(ioredis@5.10.0)(jiti@2.7.0)(lru-cache@11.2.7)(vite@8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0))
+ solid-js:
+ specifier: ^1.9.11
+ version: 1.9.11
+ vite:
+ specifier: ^8.0.0
+ version: 8.1.4(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.7.0)(terser@5.46.0)
+
apps/fixtures/basic:
dependencies:
'@solidjs/meta':