From 2bcac623202d71f23687c3fe5035b0ab8a1118bf Mon Sep 17 00:00:00 2001
From: chuckcchen Loading...Page not found
+ Something went wrong
+ {loaderData.post.title}
+ {post.title}
+{/await}
+```
+
+## 404 page
+
+`src/routes/+error.svelte` catches every unmatched route. A `+error.svelte` inside a
+route subtree scopes error handling to that subtree — `src/routes/dashboard/+error.svelte`
+handles everything under `/dashboard/*` that a deeper boundary did not catch.
+
+## Not supported yet
+
+- **Observability** — platform metrics and log analysis do not cover SvelteKit routes.
+
+## Feature support
+
+| Feature | Supported |
+|---------|-----------|
+| Server-side rendering | yes |
+| Static site generation | yes |
+| Prerender | yes |
+| Filesystem-based router | yes |
+| Streaming with promises | yes |
+| Form actions | yes |
+| Hooks | yes |
+| Observability | no |
diff --git a/skills/edgeone-makers-tools/references/makers-frameworks/references/tanstack-start.md b/skills/edgeone-makers-tools/references/makers-frameworks/references/tanstack-start.md
new file mode 100644
index 0000000..356c474
--- /dev/null
+++ b/skills/edgeone-makers-tools/references/makers-frameworks/references/tanstack-start.md
@@ -0,0 +1,146 @@
+# TanStack Start
+
+## Contents
+
+- [The adapter](#the-adapter)
+- [Scaffold](#scaffold)
+- [Preview asset prefix](#preview-asset-prefix)
+- [Build settings](#build-settings)
+- [Server functions](#server-functions)
+- [API routes](#api-routes)
+- [Streaming](#streaming)
+- [404 page](#404-page)
+- [Feature support](#feature-support)
+
+TanStack Start 1.132+ is supported. EdgeOne CLI must be 1.2.0 or newer.
+
+## The adapter
+
+**Always required.** TanStack Start needs a deployment target to emit a server bundle.
+
+```bash
+npm install @edgeone/tanstack-start
+```
+
+```typescript
+// vite.config.ts
+import { defineConfig } from "vite";
+import { tanstackStart } from "@tanstack/react-start/plugin/vite";
+import { edgeoneAdapter } from "@edgeone/tanstack-start";
+
+export default defineConfig({
+ plugins: [
+ tanstackStart(),
+ edgeoneAdapter(),
+ ],
+});
+```
+
+The adapter and a Nitro plugin cannot coexist — an official Nitro preset is not published,
+so remove `@tanstack/start-plugin-nitro` and any `nitroPlugin` / `nitroV2Plugin` call
+rather than trying to configure both.
+
+## Scaffold
+
+```bash
+npx create-tsrouter-app@latest . --template file-router --framework react --tailwind --no-git
+```
+
+## Preview asset prefix
+
+A Vite project, so `base`:
+
+```typescript
+export default defineConfig({
+ base: process.env.EDGEONE_PREVIEW_ASSET_PREFIX,
+ plugins: [tanstackStart(), edgeoneAdapter()],
+});
+```
+
+## Build settings
+
+- Build command: `npm run build`
+- Output directory: whatever the adapter writes; leave `outputDirectory` out of
+ `edgeone.json` for a TanStack Start project.
+
+## Server functions
+
+`createServerFn` is the framework's server boundary and it works here. Everything inside
+the handler runs on the server only, so secrets stay out of the client bundle:
+
+```typescript
+import { createServerFn } from "@tanstack/react-start";
+
+export const getPosts = createServerFn({ method: "GET" }).handler(async () => {
+ const res = await fetch("https://api.example.com/posts", {
+ headers: { Authorization: `Bearer ${process.env.API_TOKEN}` },
+ });
+ return res.json();
+});
+```
+
+Call it from a route loader:
+
+```typescript
+import { createFileRoute } from "@tanstack/react-router";
+
+export const Route = createFileRoute("/posts")({
+ loader: () => getPosts(),
+ component: Posts,
+});
+
+function Posts() {
+ const posts = Route.useLoaderData();
+ return {posts.map((p) =>
;
+}
+```
+
+## API routes
+
+Server routes live alongside page routes:
+
+```typescript
+// src/routes/api/hello.ts
+import { createServerFileRoute } from "@tanstack/react-start/server";
+
+export const ServerRoute = createServerFileRoute("/api/hello").methods({
+ GET: async () => Response.json({ message: "hello" }),
+});
+```
+
+## Streaming
+
+Return a promise from the loader and resolve it with `Await`:
+
+```typescript
+export const Route = createFileRoute("/dashboard")({
+ loader: () => ({ slow: getSlowData() }),
+ component: Dashboard,
+});
+
+function Dashboard() {
+ const { slow } = Route.useLoaderData();
+ return (
+