Skip to content
Closed
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
05bf908
Initial upgrade to solid v2
brenelz Mar 4, 2026
a26c9b4
Fix hydration mismatch
brenelz Mar 4, 2026
984a368
fixes
brenelz Mar 5, 2026
1c0efad
dedupe solid and solid-router
brenelz Mar 5, 2026
de8272b
fixture tweaks
brenelz Mar 5, 2026
ad6c458
more hackernews tweaks
brenelz Mar 5, 2026
6d3a870
fixes
brenelz Mar 6, 2026
cc134c5
upgrade to newest solid beta
brenelz Mar 6, 2026
57c529f
Reset landing page to v1 because of kobalte
brenelz Mar 7, 2026
656cda1
lockfile changes
brenelz Mar 7, 2026
91a89a8
use solidjs next version
brenelz Mar 10, 2026
3dc43fc
ugprade to beta.2
brenelz Mar 11, 2026
39e4a8f
fix lockfile
brenelz Mar 11, 2026
a7cf407
Upgrade to solid v2 beta.3
brenelz Mar 17, 2026
91720b4
Update to latest solid meta
brenelz Mar 18, 2026
b7a253d
Update router deps
brenelz Mar 19, 2026
4c7cfc9
Merge branch 'main' into upgrade-to-solid-2-beta
brenelz Mar 19, 2026
b6c3480
Fix tests
brenelz Mar 19, 2026
a4e888d
feat(2.0): terracotta@next (#2118)
lxsmnsyc Mar 21, 2026
0083bba
Merge branch 'main' into upgrade-to-solid-2-beta
brenelz Mar 21, 2026
d2867e7
upgrade to beta.4
brenelz Mar 21, 2026
480f830
Update to solid 2.0.0-beta.6
brenelz Apr 10, 2026
1da1504
chore: upgrade to solidjs beta 7
brenelz Apr 18, 2026
6a5107a
update to solidjs beta.15
brenelz Jul 3, 2026
d44294b
fix remaining beta.15 breakages: raw-value callbacks, terracotta patch
brenelz Jul 7, 2026
8c8371d
Merge remote-tracking branch 'origin/main' into upgrade-to-solid-2-beta
brenelz Jul 7, 2026
6f7587d
fix beta.15 runtime breakages surfaced after the merge
brenelz Jul 7, 2026
0208243
fix server-function-query-toplevel test route for beta.15 SSR semantics
brenelz Jul 7, 2026
ada98e1
upgrade terracotta to 2.0.0-next.6, drop the createDynamic patch
brenelz Jul 7, 2026
d53dbba
restore lazy component asset injection from main for beta.15
brenelz Jul 8, 2026
be0c681
restore JSX renderAsset, fix beta.15 crash with NoHydration wrapper
brenelz Jul 8, 2026
c597710
update to solidjs beta.16
brenelz Jul 8, 2026
6ed7d80
chore: bring back missing data deferStream in css fixture
katywings Jul 11, 2026
78557ff
fix: disable all css handling
katywings Jul 11, 2026
90cb9cd
update to solidjs beta.17
katywings Jul 11, 2026
5395db4
update to solidjs beta.18 and vite-plugin-solid 3.0.0-next.9
ryansolid Jul 15, 2026
0c61e39
adopt the runtime asset system, drop Start's own CSS/manifest machinery
ryansolid Jul 15, 2026
16a2426
adopt vite-plugin-solid's server functions compiler, share the serial…
ryansolid Jul 15, 2026
f3eb49e
adopt the @solidjs/web server-functions runtime
ryansolid Jul 16, 2026
75a3203
update to solidjs beta.20 and vite-plugin-solid 3.0.0-next.13
ryansolid Jul 18, 2026
3622d02
Merge branch 'main' into upgrade-to-solid-2-beta
brenelz Jul 20, 2026
8bdca50
test: skip unsupported Solid 2 server function cases
brenelz Jul 20, 2026
e905d97
adopt the router's server-function integration
ryansolid Jul 20, 2026
3af1d34
retire the legacy GET shim in favor of the core export
ryansolid Jul 20, 2026
712731b
update to solidjs beta.21, router 0.17.0-next.6 and vite-plugin-solid…
ryansolid Jul 20, 2026
3d5a56e
update to solid 2.0.0-beta.22 and unskip non-latin1 server function e…
ryansolid Jul 22, 2026
51b7526
update to @solidjs/router 1.0.0-next.7 and adopt the createRouter fac…
ryansolid Jul 22, 2026
696db23
chore(deps): bump @solidjs/router to 1.0.0-next.8
ryansolid Jul 22, 2026
b1342c9
chore(deps): bump vite-plugin-solid to 3.0.0-next.15
ryansolid Jul 22, 2026
ab9a641
mark Vite experimental bundledDev as unsupported until vitejs/vite#22991
ryansolid Jul 22, 2026
2e71e3f
chore(deps): bump solid to 2.0.0-beta.25
ryansolid Jul 23, 2026
eca45be
chore(deps): bump vite-plugin-solid to 3.0.0-next.16
ryansolid Jul 23, 2026
1d5b70d
chore(deps): bump solid to 2.0.0-beta.26
ryansolid Jul 27, 2026
1d8ee74
refactor: rebase file-system routing onto filesystem-routing (#2227)
brenelz Jul 27, 2026
9ace2f5
log dev-manifest misses instead of silently returning null
ryansolid Jul 28, 2026
e3de655
chore(deps): bump solid to 2.0.0-beta.28 and router to 2.0.0-next.12
ryansolid Jul 29, 2026
9e4d5fe
chore(deps): bump vite-plugin-solid to 3.0.0-next.18
ryansolid Jul 29, 2026
7e85af7
Merge branch 'main' into upgrade-to-solid-2-beta
brenelz Jul 29, 2026
93c48bc
wire the dev toolbar's server-function inspector into the new transport
brenelz Jul 29, 2026
682b7f7
capture router-initiated server-function calls in the dev toolbar
brenelz Jul 29, 2026
1683d09
encode non-JSON-safe server function arguments
brenelz Jul 29, 2026
dc76738
Merge remote-tracking branch 'origin/upgrade-to-solid-2-beta'
brenelz Jul 29, 2026
95cd6a6
fix CI: v2 router API migration, formatting, and onError seam
brenelz Jul 29, 2026
f1be731
chore: remove dead code and unused dependencies from packages/start
ryansolid Jul 29, 2026
064b0d6
refactor: drop the dev-manifest bridge and boundary modules, now owne…
ryansolid Jul 29, 2026
34dc658
chore(deps): bump vite-plugin-solid to 3.0.0-next.19
ryansolid Jul 29, 2026
6839776
fix: keep client assets in .output/public when composed with nitro
ryansolid Jul 29, 2026
a0ebc40
chore(deps): bump vite-plugin-solid to 3.0.0-next.20
ryansolid Jul 29, 2026
7b85848
revert: drop the client-build-first hook filter, fixed upstream in vi…
ryansolid Jul 29, 2026
d0a63e4
chore(deps): update to solid 2.0.0-beta.29 and vite-plugin-solid 3.0.…
ryansolid Jul 31, 2026
0a106b9
refactor: adopt the web APIs hoisted into solid 2.0.0-beta.29
ryansolid Jul 31, 2026
8f9ac94
chore(deps): bump @solidjs/router to 2.0.0-next.13
ryansolid Jul 31, 2026
9d897f9
chore(deps): bump solid to 2.0.0-beta.30 and dom-expressions to 0.50.…
ryansolid Aug 3, 2026
2a600d6
chore(deps): bump solid to 2.0.0-beta.31, router to 2.0.0-next.14, me…
ryansolid Aug 5, 2026
61d597c
refactor: drop the response-stub cast now that @solidjs/router 2.0.0-…
ryansolid Aug 5, 2026
1791dd7
refactor: drop MetaProvider for the provider-less @solidjs/meta 1.0 line
ryansolid Aug 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions apps/fixtures/bare/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
},
"dependencies": {
"@solidjs/start": "workspace:*",
"solid-js": "^1.9.9",
"@solidjs/web": "2.0.0-beta.1",
"solid-js": "2.0.0-beta.1",
"vite": "7.1.10"
},
"engines": {
"node": ">=22"
}
}
}
5 changes: 3 additions & 2 deletions apps/fixtures/basic/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
"build": "vite build"
},
"dependencies": {
"@solidjs/meta": "^0.29.4",
"@solidjs/meta": "link:../../../../solid-meta",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "workspace:*",
"solid-js": "^1.9.9",
"@solidjs/web": "2.0.0-beta.1",
"solid-js": "2.0.0-beta.1",
"vite": "7.1.10"
},
"engines": {
Expand Down
6 changes: 3 additions & 3 deletions apps/fixtures/basic/src/app.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { MetaProvider, Title } from "@solidjs/meta";
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
import { Loading } from "solid-js";
import "./app.css";

export default function App() {
return (
<Router
root={props => (
root={(props) => (
<MetaProvider>
<Title>SolidStart - Basic</Title>
<a href="/">Index</a>
<a href="/about">About</a>
<Suspense>{props.children}</Suspense>
<Loading>{props.children}</Loading>
</MetaProvider>
)}
>
Expand Down
2 changes: 0 additions & 2 deletions apps/fixtures/basic/src/routes/[...404].tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { Title } from "@solidjs/meta";
import { HttpStatusCode } from "@solidjs/start";

export default function NotFound() {
return (
<main>
<Title>Not Found</Title>
<HttpStatusCode code={404} />
<h1>Page Not Found</h1>
<p>
Expand Down
3 changes: 3 additions & 0 deletions apps/fixtures/basic/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ import { nitroV2Plugin } from "../../../packages/start-nitro-v2-vite-plugin/src"

export default defineConfig({
plugins: [solidStart(), nitroV2Plugin()],
resolve: {
dedupe: ["solid-js", "@solidjs/web", "@solidjs/router"],
}
});
3 changes: 2 additions & 1 deletion apps/fixtures/css/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "workspace:*",
"solid-js": "^1.9.9",
"@solidjs/web": "2.0.0-beta.1",
"solid-js": "2.0.0-beta.1",
"vite": "7.1.10"
},
"engines": {
Expand Down
4 changes: 2 additions & 2 deletions apps/fixtures/css/src/app.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { MetaProvider, Title } from "@solidjs/meta";
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
import { Loading } from "solid-js";
import "./app.css";

export default function App() {
Expand All @@ -17,7 +17,7 @@ export default function App() {
<a href="/unstyled">Unstyled</a>
</header>

<Suspense>{props.children}</Suspense>
<Loading>{props.children}</Loading>
</div>
</MetaProvider>
)}
Expand Down
6 changes: 3 additions & 3 deletions apps/fixtures/css/src/components/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { createSignal, FlowProps, onMount } from "solid-js";
import { getRequestEvent } from "solid-js/web";
import { createSignal, FlowProps, onSettled } from "solid-js";
import { getRequestEvent } from "@solidjs/web";

const Badge = (props: FlowProps) => (
<div class="text-base text-white bg-gray-700 rounded-lg px-2 font-medium">{props.children}</div>
);

const Layout = (props: FlowProps<{ title: string }>) => {
const [mounted, setMounted] = createSignal(false);
onMount(() => setMounted(true));
onSettled(() => setMounted(true));

return (
<div class="flex gap-2 flex-col">
Expand Down
3 changes: 2 additions & 1 deletion apps/fixtures/experiments/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "workspace:*",
"solid-js": "^1.9.9",
"@solidjs/web": "2.0.0-beta.1",
"solid-js": "2.0.0-beta.1",
"vite": "7.1.10"
},
"engines": {
Expand Down
4 changes: 2 additions & 2 deletions apps/fixtures/experiments/src/app.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { MetaProvider, Title } from "@solidjs/meta";
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
import { Loading } from "solid-js";
import "./app.css";
import Provider from "./components/Provider";

Expand All @@ -14,7 +14,7 @@ export default function App() {
<Title>SolidStart - Bare</Title>
<a href="/">Index</a>
<a href="/about">About</a>
<Suspense>{props.children}</Suspense>
<Loading>{props.children}</Loading>
</Provider>
</MetaProvider>
)}
Expand Down
4 changes: 2 additions & 2 deletions apps/fixtures/experiments/src/components/Provider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import counterContext from "./counterContext";

export default function Provider(props) {
return (
<counterContext.Provider value={createSignal(props.initialCount)}>
<counterContext value={createSignal(props.initialCount)}>
{props.children}
</counterContext.Provider>
</counterContext>
);
}
2 changes: 1 addition & 1 deletion apps/fixtures/experiments/src/routes/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Title } from "@solidjs/meta";
import { json } from "@solidjs/router";
import { clientOnly, GET } from "@solidjs/start";
import { getServerFunctionMeta } from "@solidjs/start/server";
import { getRequestEvent, isServer } from "solid-js/web";
import { getRequestEvent, isServer } from "@solidjs/web";
import Counter from "~/components/Counter";
const BreaksOnServer = clientOnly(() => import("~/components/BreaksOnServer"));

Expand Down
5 changes: 3 additions & 2 deletions apps/fixtures/hackernews/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@
"dependencies": {
"@solidjs/router": "^0.15.0",
"@solidjs/start": "workspace:*",
"solid-js": "^1.9.9",
"vite": "7.1.10"
"solid-js": "2.0.0-beta.1",
"vite": "7.1.10",
"@solidjs/web": "2.0.0-beta.1"
},
"engines": {
"node": ">=22"
Expand Down
6 changes: 3 additions & 3 deletions apps/fixtures/hackernews/src/app.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
import { Loading } from "solid-js";
import "./app.css";
import Nav from "./components/nav";

Expand All @@ -10,9 +10,9 @@ export default function App() {
root={props => (
<>
<Nav />
<Suspense fallback={<div class="news-list-nav">Loading...</div>}>
<Loading fallback={<div class="news-list-nav">Loading...</div>}>
{props.children}
</Suspense>
</Loading>
</>
)}
>
Expand Down
2 changes: 1 addition & 1 deletion apps/fixtures/hackernews/src/components/comment.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const Comment: Component<{ comment: CommentDefinition }> = props => {
<div class="text" innerHTML={props.comment.content} />
<Show when={props.comment.comments.length}>
<Toggle>
<For each={props.comment.comments}>{comment => <Comment comment={comment} />}</For>
<For each={props.comment.comments}>{comment => <Comment comment={comment()} />}</For>
</Toggle>
</Show>
</li>
Expand Down
2 changes: 1 addition & 1 deletion apps/fixtures/hackernews/src/components/story.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const Story: Component<{ story: StoryDefinition }> = props => {
<span class="title">
<Show
when={props.story.url}
fallback={<A href={`/item/${props.story.id}`}>{props.story.title}</A>}
fallback={<A href={`/stories/${props.story.id}`}>{props.story.title}</A>}
>
<a href={props.story.url} target="_blank" rel="noreferrer">
{props.story.title}
Expand Down
2 changes: 1 addition & 1 deletion apps/fixtures/hackernews/src/components/toggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ export default function Toggle(props: { children: any }) {

return (
<>
<div class="toggle" classList={{ open: open() }}>
<div class={["toggle", { open: open() }]}>
<a onClick={() => setOpen(o => !o)}>{open() ? "[-]" : "[+] comments collapsed"}</a>
</div>
<ul class="comment-children" style={{ display: open() ? "block" : "none" }}>
Expand Down
4 changes: 4 additions & 0 deletions apps/fixtures/hackernews/src/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ const mapStories = {
export const getStories = query(
async (type: StoryTypes, page: number): Promise<StoryDefinition[]> => {
"use server";
const storyType = mapStories[type];
if (!storyType) {
return [];
}
return fetchAPI(`${mapStories[type]}?page=${page}`);
},
"stories",
Expand Down
20 changes: 8 additions & 12 deletions apps/fixtures/hackernews/src/routes/[...stories].tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { createAsync, type RouteDefinition, type RouteSectionProps } from "@solidjs/router";
import { For, Show } from "solid-js";
import { A, type RouteDefinition, type RouteSectionProps } from "@solidjs/router";
import { For, Show, createMemo } from "solid-js";
import Story from "~/components/story";
import { getStories } from "~/lib/api";
import { StoryTypes } from "~/types";
Expand All @@ -13,7 +13,7 @@ export const route = {
export default function Stories(props: RouteSectionProps) {
const page = () => +props.location.query.page || 1;
const type = () => (props.params.stories || "top") as StoryTypes;
const stories = createAsync(() => getStories(type(), page()));
const stories = createMemo(() => getStories(type(), page()));

return (
<div class="news-view">
Expand All @@ -26,9 +26,9 @@ export default function Stories(props: RouteSectionProps) {
</span>
}
>
<a class="page-link" href={`/${type()}?page=${page() - 1}`} aria-label="Previous Page">
<A class="page-link" href={`/${type()}?page=${page() - 1}`} aria-label="Previous Page">
{"<"} prev
</a>
</A>
</Show>
<span>page {page()}</span>
<Show
Expand All @@ -39,17 +39,13 @@ export default function Stories(props: RouteSectionProps) {
</span>
}
>
<a class="page-link" href={`/${type()}?page=${page() + 1}`} aria-label="Next Page">
<A class="page-link" href={`/${type()}?page=${page() + 1}`} aria-label="Next Page">
more {">"}
</a>
</A>
</Show>
</div>
<main class="news-list">
<Show when={stories()}>
<ul>
<For each={stories()}>{story => <Story story={story} />}</For>
</ul>
</Show>
<For each={stories()}>{story => <Story story={story()} />}</For>
</main>
</div>
);
Expand Down
50 changes: 24 additions & 26 deletions apps/fixtures/hackernews/src/routes/stories/[id].tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { createAsync, type RouteDefinition, type RouteSectionProps } from "@solidjs/router";
import { For, Show } from "solid-js";
import { A, type RouteDefinition, type RouteSectionProps } from "@solidjs/router";
import { For, Show, createMemo } from "solid-js";
import Comment from "~/components/comment";
import { getStory } from "~/lib/api";

Expand All @@ -10,31 +10,29 @@ export const route = {
} satisfies RouteDefinition;

export default function Story(props: RouteSectionProps) {
const story = createAsync(() => getStory(props.params.id));
const story = createMemo(() => getStory(props.params.id));
return (
<Show when={story()}>
<div class="item-view">
<div class="item-view-header">
<a href={story()!.url} target="_blank">
<h1>{story()!.title}</h1>
</a>
<Show when={story()!.domain}>
<span class="host">({story()!.domain})</span>
</Show>
<p class="meta">
{story()!.points} points | by <a href={`/users/${story()!.user}`}>{story()!.user}</a>{" "}
{story()!.time_ago} ago
</p>
</div>
<div class="item-view-comments">
<p class="item-view-comments-header">
{story()!.comments_count ? story()!.comments_count + " comments" : "No comments yet."}
</p>
<ul class="comment-children">
<For each={story()!.comments}>{comment => <Comment comment={comment} />}</For>
</ul>
</div>
<div class="item-view">
<div class="item-view-header">
<a href={story().url} target="_blank">
<h1>{story().title}</h1>
</a>
<Show when={story().domain}>
<span class="host">({story().domain})</span>
</Show>
<p class="meta">
{story().points} points | by <A href={`/users/${story().user}`}>{story().user}</A>{" "}
{story().time_ago} ago
</p>
</div>
</Show>
<div class="item-view-comments">
<p class="item-view-comments-header">
{story().comments_count ? story().comments_count + " comments" : "No comments yet."}
</p>
<ul class="comment-children">
<For each={story().comments}>{comment => <Comment comment={comment()} />}</For>
</ul>
</div>
</div>
);
}
Loading
Loading