Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions docs/start/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,10 @@
{
"label": "Netlify Vite Plugin",
"to": "framework/solid/examples/start-basic-netlify"
},
{
"label": "Nitro Vite Plugin",
"to": "framework/solid/examples/start-basic-nitro"
}
]
}
Expand Down
3 changes: 1 addition & 2 deletions examples/solid/start-basic-netlify/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
"tailwindcss": "^3.4.17",
"typescript": "^5.7.2",
"vite": "^7.1.7",
"vite-tsconfig-paths": "^5.1.4",
"wrangler": "^4.40.2"
"vite-tsconfig-paths": "^5.1.4"
}
}
10 changes: 10 additions & 0 deletions examples/solid/start-basic-nitro/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
node_modules
.DS_Store
.cache
.env
dist
.wrangler

# Local Netlify folder
.netlify
.nitro
4 changes: 4 additions & 0 deletions examples/solid/start-basic-nitro/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
**/public
pnpm-lock.yaml
routeTree.gen.ts
worker-configuration.d.ts
11 changes: 11 additions & 0 deletions examples/solid/start-basic-nitro/.vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"files.watcherExclude": {
"**/routeTree.gen.ts": true
},
"search.exclude": {
"**/routeTree.gen.ts": true
},
"files.readonlyInclude": {
"**/routeTree.gen.ts": true
}
}
37 changes: 37 additions & 0 deletions examples/solid/start-basic-nitro/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Start Basic Netlify
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix title to match directory name.

The README title is "Start Basic Netlify" but the directory is named start-basic-nitro. This creates confusion about what the example demonstrates.

Apply this diff to align the title with the directory name:

-# Start Basic Netlify
+# Start Basic Nitro
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Start Basic Netlify
# Start Basic Nitro
🤖 Prompt for AI Agents
In examples/solid/start-basic-nitro/README.md around line 1, the heading "Start
Basic Netlify" doesn't match the directory name; change the top-level title to
"Start Basic Nitro" so the README matches the start-basic-nitro directory name
(replace the first line with "# Start Basic Nitro").


## Getting Started

### Install the dependencies

```bash
pnpm i
```

### Start the development server

```bash
pnpm dev
```

### Build for Production

```bash
pnpm build
```

### Deploy to Netlify

```sh
netlify deploy
```

## Accessing bindings

You can access Cloudflare bindings in server functions by using importable `env`:

```ts
import { env } from 'cloudflare:workers'
```

See `src/routes/index.tsx` for an example.
28 changes: 28 additions & 0 deletions examples/solid/start-basic-nitro/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"name": "tanstack-solid-start-example-basic-nitro",
"private": true,
"sideEffects": false,
"type": "module",
"scripts": {
"dev": "vite dev",
"build": "vite build && tsc --noEmit",
"preview": "vite preview"
},
"dependencies": {
"@tanstack/solid-router": "^1.133.20",
"@tanstack/solid-router-devtools": "^1.133.20",
"@tanstack/solid-start": "^1.133.20",
"solid-js": "^1.9.5"
},
Comment on lines +11 to +16
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion | 🟠 Major

Use workspace: for internal TanStack packages.*

Aligns with repo policy and prevents version skew during local development.

As per coding guidelines.

   "dependencies": {
-    "@tanstack/solid-router": "^1.133.20",
-    "@tanstack/solid-router-devtools": "^1.133.20",
-    "@tanstack/solid-start": "^1.133.20",
+    "@tanstack/solid-router": "workspace:*",
+    "@tanstack/solid-router-devtools": "workspace:*",
+    "@tanstack/solid-start": "workspace:*",
     "solid-js": "^1.9.5"
   },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"dependencies": {
"@tanstack/solid-router": "^1.133.20",
"@tanstack/solid-router-devtools": "^1.133.20",
"@tanstack/solid-start": "^1.133.20",
"solid-js": "^1.9.5"
},
"dependencies": {
"@tanstack/solid-router": "workspace:*",
"@tanstack/solid-router-devtools": "workspace:*",
"@tanstack/solid-start": "workspace:*",
"solid-js": "^1.9.5"
},
🤖 Prompt for AI Agents
In examples/solid/start-basic-nitro/package.json around lines 11 to 16, the
internal TanStack dependencies should use workspace:* instead of explicit
versions to follow repo policy and avoid version skew; update the three
@tanstack packages ("@tanstack/solid-router", "@tanstack/solid-router-devtools",
"@tanstack/solid-start") to use "workspace:*" while leaving external packages
like "solid-js" as-is, and save the modified package.json so installs resolve to
the workspace packages during local development.

"devDependencies": {
"nitro": "^3.0.1-alpha.0",
"@types/node": "^22.5.4",
Comment on lines +17 to +19
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Sanity-check nitro version.

Alpha versions can churn. Confirm 3.0.1-alpha.0 is intended for the example; otherwise prefer a stable 3.x.


🏁 Script executed:

#!/bin/bash
# Compare nitro versions used across examples and check for non-alpha usage.
rg -n --glob 'examples/**/package.json' '"nitro":\s*".*"' -N -C1

Length of output: 221


I'll search for information about the current stable nitro version to help assess whether using the alpha version here is appropriate.

Let me check if there's broader context about whether this project is intentionally using Nitro v3 alpha:

Update the example to use Nitro v2 (stable) instead of v3 alpha.

The current stable release is Nitro v2, while Nitro v3 is still under active development and features/APIs can change before final release. Version 3.0.1-alpha.0 was published 11 days ago, confirming active churn. For a foundational example like "start-basic-nitro," using an alpha version introduces unnecessary instability and breaking-change risk for developers learning the framework. Switch to Nitro v2 (the current stable release).

🤖 Prompt for AI Agents
In examples/solid/start-basic-nitro/package.json around lines 17-19, the
devDependency pins "nitro" to an alpha release ("^3.0.1-alpha.0"); replace that
with the stable Nitro v2 range to avoid introducing an unstable alpha into the
example (e.g., change the version string to a v2 stable range like "^2.x" or the
current v2 exact release), update lockfile if present, and run npm/yarn install
to verify no dependency conflicts.

"vite-plugin-solid": "^2.11.10",
"autoprefixer": "^10.4.20",
"postcss": "^8.5.1",
"tailwindcss": "^3.4.17",
"typescript": "^5.7.2",
"vite": "^7.1.7",
"vite-tsconfig-paths": "^5.1.4"
}
}
6 changes: 6 additions & 0 deletions examples/solid/start-basic-nitro/postcss.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions examples/solid/start-basic-nitro/public/site.webmanifest
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "",
"short_name": "",
"icons": [
{
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import {
ErrorComponent,
Link,
rootRouteId,
useMatch,
useRouter,
} from '@tanstack/solid-router'
import type { ErrorComponentProps } from '@tanstack/solid-router'

export function DefaultCatchBoundary({ error }: ErrorComponentProps) {
const router = useRouter()
const isRoot = useMatch({
strict: false,
select: (state) => state.id === rootRouteId,
})

console.error('DefaultCatchBoundary Error:', error)

return (
<div class="min-w-0 flex-1 p-4 flex flex-col items-center justify-center gap-6">
<ErrorComponent error={error} />
<div class="flex gap-2 items-center flex-wrap">
<button
onClick={() => {
router.invalidate()
}}
class={`px-2 py-1 bg-gray-600 dark:bg-gray-700 rounded text-white uppercase font-extrabold`}
>
Try Again
</button>
{isRoot() ? (
<Link
to="/"
class={`px-2 py-1 bg-gray-600 dark:bg-gray-700 rounded text-white uppercase font-extrabold`}
>
Home
</Link>
) : (
<Link
to="/"
class={`px-2 py-1 bg-gray-600 dark:bg-gray-700 rounded text-white uppercase font-extrabold`}
onClick={(e) => {
e.preventDefault()
window.history.back()
}}
>
Go Back
</Link>
)}
</div>
</div>
)
}
25 changes: 25 additions & 0 deletions examples/solid/start-basic-nitro/src/components/NotFound.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { Link } from '@tanstack/solid-router'

export function NotFound({ children }: { children?: any }) {
return (
<div class="space-y-2 p-2">
<div class="text-gray-600 dark:text-gray-400">
{children || <p>The page you are looking for does not exist.</p>}
</div>
<p class="flex items-center gap-2 flex-wrap">
<button
onClick={() => window.history.back()}
class="bg-emerald-500 text-white px-2 py-1 rounded uppercase font-black text-sm"
>
Go back
</button>
<Link
to="/"
class="bg-cyan-600 text-white px-2 py-1 rounded uppercase font-black text-sm"
>
Start Over
</Link>
</p>
</div>
)
}
6 changes: 6 additions & 0 deletions examples/solid/start-basic-nitro/src/components/PostError.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ErrorComponent } from '@tanstack/solid-router'
import type { ErrorComponentProps } from '@tanstack/solid-router'

export function PostErrorComponent({ error }: ErrorComponentProps) {
return <ErrorComponent error={error} />
}
6 changes: 6 additions & 0 deletions examples/solid/start-basic-nitro/src/components/UserError.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ErrorComponent } from '@tanstack/solid-router'
import type { ErrorComponentProps } from '@tanstack/solid-router'

export function UserErrorComponent({ error }: ErrorComponentProps) {
return <ErrorComponent error={error} />
}
Loading
Loading