Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
976fca4
chore(solid2): pin Solid 2 prerelease dependency set
devagrawal09 Oct 3, 2026
d28e850
feat(solid2): port src/ to Solid 2 (tsc clean)
devagrawal09 Oct 3, 2026
ee5514f
test(solid2): port test harness to Solid 2 (128/128)
devagrawal09 Oct 3, 2026
559fe47
feat(solid2): dev/ and docs/ boot under @solidjs/vite-plugin start mode
devagrawal09 Oct 3, 2026
f0fe7fb
feat(solid2): static site generation + generated assets without Nitro…
devagrawal09 Oct 3, 2026
ed404c2
fix(solid2): run the prerender in a child process so vite build exits
devagrawal09 Oct 3, 2026
422f501
fix(solid2): ship prerender-worker.mjs in dist
devagrawal09 Oct 4, 2026
2389fa5
fix(solid2): prerender honors Vite base; export solidBaseToRoute
devagrawal09 Oct 4, 2026
f978aa3
fix(solid2): setLocale is a Solid action; <html lang> is set via onSe…
devagrawal09 Oct 4, 2026
d0e3190
fix(solid2): prerender honors Vite base for real; 404 for unmatched r…
devagrawal09 Oct 4, 2026
e3ae444
fix(solid2): restore deferStream on page data so 404 pages set their …
devagrawal09 Oct 4, 2026
cfae258
fix(solid2): prerender crawler resolves links against the page and tr…
devagrawal09 Oct 4, 2026
cff3c8d
Update Solid runtime and address migration review
devagrawal09 Oct 8, 2026
fee6165
Document Solid 2 migration and history investigation handoff
devagrawal09 Oct 9, 2026
b5e90a6
fix(solid2): page data no longer stalls Back/Forward to the hydrated …
devagrawal09 Oct 9, 2026
55acbf0
Record the Back/Forward root cause and fix in the Solid 2 handoff
devagrawal09 Oct 9, 2026
bcff012
fix(solid2): harden page-data hydration fix after review
devagrawal09 Oct 9, 2026
7aee00e
fix(solid2): docs prerender links resolve; page data without a module…
devagrawal09 Oct 9, 2026
88cc5a2
Remove the Solid 2 migration handoff note
devagrawal09 Oct 9, 2026
9cb9cf2
Add a concise Solid 2 handoff for the next agent
devagrawal09 Oct 13, 2026
ea78dce
fix(solid2): stabilize tab hydration and configured prerender routes
devagrawal09 Oct 13, 2026
184f4a0
fix(solid2): create tab-group BroadcastChannel on the client only
devagrawal09 Oct 13, 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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ gt pul

<div align="center">

Fully featured, fully customisable static site generation for [SolidStart](https://start.solidjs.com)
Fully featured, fully customisable static site generation for [Solid](https://www.solidjs.com)

[![license](https://img.shields.io/badge/license-MIT-1890ff.svg)](https://github.com/kobaltedev/solidbase/blob/main/LICENSE)
[![checks](https://img.shields.io/github/checks-status/kobaltedev/solidbase/main)](https://github.com/kobaltedev/solidbase/actions)
Expand Down
43 changes: 43 additions & 0 deletions SOLID2-HANDOFF.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Solid 2 Migration Handoff

Updated 2026-10-13. Remove before #174 leaves draft.

## State

- Branch: solid2 on devagrawal09/solidbase. PR #174 remains draft; maintainers decide merge timing, versioning, dist-tags and dependency policy.
- Runtime pins unchanged: solid-js/@solidjs/web rc.14, router next.37, Vite plugin next.47, meta next.2, Kobalte alpha.2. Primitives fixes remain unreleased as of today's npm check.
- No vendored runtime patches or new test files. #173 REPL work remains separate.
- Never merge, publish or post outside devagrawal09/solidbase. Commit as Dev Agrawal <devagrawal09@gmail.com>.

## Completed

- Existing Back/Forward fix preserved: register page data using Vite-root-relative module paths and await undefined before lazy preload. Promise.resolve still hits the hydration Promise stub. Missing page modules return undefined.
- Native tabs replace Kobalte tabs, avoiding unreleased event-listener/resize-observer owner-count bugs. Preserve selected-tab styling, linked ARIA IDs, roving focus, Home/End, wrapping arrows (including RTL), force-mounted panels and persisted named groups.
- Persist named selection in the effect's apply phase after the signal commits, deferring initial writes so hydration does not overwrite a saved cookie. BroadcastChannel synchronization and reload persistence verified.
- The tab-group BroadcastChannel is created only on the client and closed on cleanup (SSR previously leaked one per named group).
- Native details/summary replaces the dev-only Kobalte accordion preview, with matching displayed snippet. Kobalte's demo used the same server/client ownership mismatch; this does not claim to fix arbitrary consumer Kobalte widgets.
- Prerender, sitemap and llms respect fileRoutes.dir. Missing directories yield no markdown seeds; other errors propagate. fileRoutes:false does not index default markdown files.
- Prerender worker exits only after stdout is flushed; child-process isolation retained.
- Missing-provider diagnostics restored using optional provider helpers/default context values.
- Docs font preloads restored; obsolete Nitro deployment instructions and config references updated.
- Dev/docs typechecks exclude generated output and include ambient declarations. DocSearch callable export normalized for differing TypeScript resolution modes.
- Preferred-language initial effect deferred so a saved JS cookie is not overwritten before onSettled reads it.

## Verification

- 138 tests pass across the existing 29 test files.
- Library build/typecheck and dev/docs standalone typechecks pass.
- Production dev: 15 pages plus 404.html. Production docs: 41 pages plus 404.html.
- Browser direct-load matrix: docs quickstart, add-to-existing, markdown, extending-themes; dev pm, ec, ec-file, preview; both home pages. No hydration/page/console errors in the matrix.
- Tab clicks, keyboard wrap/Home/End, unique IDs, visible selected panels, cookie reload, cross-tab BroadcastChannel synchronization, RTL keyboard behavior pass.
- History restores path/content/title/lang on Back/Forward. Locale selection, copy-page enabled state, theme-cookie reload and mobile navigation pass.
- JS preference cookie restores JS tab labels on reload. TS/JS toggle UI is disabled in current app configurations, so its click path was not verified.
- Independent read-only review found no verified actionable issues; browser checks cover hydration ownership.

## Remaining

- #174 stays draft until maintainer review and release/dependency decisions. Remove this note before leaving draft.
- Docs OG generation stays disabled pending Solid 2 support in its dependency.
- Vite native-config-loader warnings and prerender discovery headers with literal commas remain known limitations.
- Custom startConfig extensions require leading dots; dotted final URL segments are excluded from link discovery (explicit markdown seeds are still emitted).
- Existing raw Promise/lazy hydration upstream report remains the user's responsibility; previous detailed handoff is in branch history.
111 changes: 0 additions & 111 deletions dev/app.config.ts

This file was deleted.

10 changes: 5 additions & 5 deletions dev/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
"preview": "vite preview"
},
"dependencies": {
"@kobalte/core": "2.0.0-alpha.2",
"@kobalte/solidbase": "workspace:*",
"@kobalte/core": "0.13.11",
"@solidjs/router": "^0.15.3",
"@solidjs/start": "https://pkg.pr.new/solidjs/solid-start/@solidjs/start@2080",
"nitro": "3.0.260311-beta",
"solid-js": "^1.9.9"
"@solidjs/router": "2.0.0-next.37",
"@solidjs/web": "2.0.0-rc.14",
"solid-js": "2.0.0-rc.14"
},
"engines": {
"node": ">=22.12"
},
"devDependencies": {
"@iconify-json/ri": "^1.2.5",
"@solidjs/vite-plugin": "3.0.0-next.47",
"cross-env": "^7.0.3",
"vite": "^8.0.0"
}
Expand Down
21 changes: 21 additions & 0 deletions dev/src/Document.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { getHtmlProps } from "@kobalte/solidbase/server";
import { HydrationScript } from "@solidjs/web";
import type { ParentProps } from "solid-js";

// Document shell for @solidjs/vite-plugin start mode: the app arrives as children and the
// client entry script is injected into <head> automatically.
export default function Document(props: ParentProps) {
return (
<html {...getHtmlProps()}>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
<HydrationScript />
</head>
<body>
<div id="app">{props.children}</div>
</body>
</html>
);
}
14 changes: 10 additions & 4 deletions dev/src/app.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
import { pageRoutes } from "virtual:file-routes";
import { SolidBaseRoot } from "@kobalte/solidbase/client";
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { createRouter } from "@solidjs/router";
import { fileRoutes } from "@solidjs/router/fs";

import "./app.css";

const Router = createRouter({
routes: fileRoutes(pageRoutes),
base: import.meta.env.BASE_URL,
});

export default function App() {
return (
<Router root={SolidBaseRoot}>
<FileRoutes />
<Router>
{(props) => <SolidBaseRoot>{props.children}</SolidBaseRoot>}
</Router>
);
}
4 changes: 0 additions & 4 deletions dev/src/entry-client.tsx

This file was deleted.

22 changes: 0 additions & 22 deletions dev/src/entry-server.tsx

This file was deleted.

3 changes: 2 additions & 1 deletion dev/src/global.d.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/// <reference types="@solidjs/start/env" />
/// <reference types="vite/client" />
/// <reference types="filesystem-routing/types" />
37 changes: 20 additions & 17 deletions dev/src/preview-demo.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Accordion } from "@kobalte/core/accordion";
import { For } from "solid-js";
import { createUniqueId, For } from "solid-js";

function ChevronDownIcon(props: { class?: string }) {
return (
Expand All @@ -23,7 +22,7 @@ const accordionItems = [
{
value: "item-1",
title: "Is it accessible?",
body: "Yes. It follows the WAI-ARIA accordion pattern and supports keyboard navigation.",
body: "Yes. Native disclosure elements support keyboard and screen reader navigation.",
},
{
value: "item-2",
Expand All @@ -38,29 +37,33 @@ const accordionItems = [
];

export function PreviewAccordionExample() {
const name = createUniqueId();
return (
<div class="sb-preview-demo-accordion-wrap">
<Accordion
class="sb-preview-demo-accordion"
defaultValue={["item-1"]}
collapsible
>
<style>{`.sb-preview-demo-trigger::-webkit-details-marker { display: none; }
.sb-preview-demo-trigger .sb-preview-demo-header { display: flex; align-items: center; justify-content: space-between; width: 100%; gap: 1rem; margin: 0; font: inherit; }
.sb-preview-demo-item[open] > .sb-preview-demo-trigger .chevron-icon { transform: rotate(180deg); }`}</style>
<div class="sb-preview-demo-accordion">
<For each={accordionItems}>
{(item) => (
<Accordion.Item class="sb-preview-demo-item" value={item.value}>
<Accordion.Header class="sb-preview-demo-header">
<Accordion.Trigger class="sb-preview-demo-trigger">
<details
class="sb-preview-demo-item"
name={name}
open={item.value === "item-1"}
>
<summary class="sb-preview-demo-trigger">
<h3 class="sb-preview-demo-header">
<span>{item.title}</span>
<ChevronDownIcon class="chevron-icon" />
</Accordion.Trigger>
</Accordion.Header>
<Accordion.Content class="sb-preview-demo-content">
</h3>
</summary>
<div class="sb-preview-demo-content">
<p>{item.body}</p>
</Accordion.Content>
</Accordion.Item>
</div>
</details>
)}
</For>
</Accordion>
</div>
</div>
);
}
Expand Down
6 changes: 3 additions & 3 deletions dev/src/routes/ec-file.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
```file=../app.css tab
```

``` file=../entry-client.tsx tab
``` file=../Document.tsx tab
```

```file=../entry-server.tsx tab
```file=../app.tsx tab
```

```file=~/entry-server.tsx title="aliased import"
```file=@dev/Document.tsx title="aliased import"
```

```file=./to-transform.tsx title=false
Expand Down
Loading
Loading