diff --git a/AGENTS.md b/AGENTS.md
index 4b42dae..e3be1d7 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -4,6 +4,7 @@ When you need EdgeOne Makers platform development guidance, read the matching Sk
| Task | Read |
|------|------|
+| Web framework support — which adapter, build output, 404, and unsupported features (Next.js, Nuxt, Astro, SvelteKit, React Router, TanStack Start, Vike, Vite, Hugo) | skills/edgeone-makers-tools/references/makers-frameworks/SKILL.md |
| AI Agent development (DeepAgents, LangGraph, Claude SDK, OpenAI Agents, CrewAI) | skills/edgeone-makers-tools/references/makers-agents/SKILL.md |
| Migrate existing agent project to EdgeOne Makers format | skills/edgeone-makers-tools/references/makers-migration/SKILL.md |
| Deploy project to EdgeOne | skills/edgeone-makers-tools/references/makers-deploy/SKILL.md |
diff --git a/CLAUDE.md b/CLAUDE.md
index b34fa99..ff5a257 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,6 +4,7 @@ When you need EdgeOne Makers platform development guidance, read the matching Sk
| Task | Read |
|------|------|
+| Web framework support — which adapter, build output, 404, and unsupported features (Next.js, Nuxt, Astro, SvelteKit, React Router, TanStack Start, Vike, Vite, Hugo) | skills/edgeone-makers-tools/references/makers-frameworks/SKILL.md |
| AI Agent development (DeepAgents, LangGraph, Claude SDK, OpenAI Agents, CrewAI) | skills/edgeone-makers-tools/references/makers-agents/SKILL.md |
| Migrate existing agent project to EdgeOne Makers format | skills/edgeone-makers-tools/references/makers-migration/SKILL.md |
| Deploy project to EdgeOne | skills/edgeone-makers-tools/references/makers-deploy/SKILL.md |
diff --git a/README.md b/README.md
index 3d0d355..5eca962 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,7 @@ The single `edgeone-makers-tools` skill routes to these capabilities (each lives
| Capability | Description |
|-------|-------------|
+| `makers-frameworks` | Web framework support matrix — platform adapters, build output, 404 conventions |
| `makers-agents` | AI Agent development (DeepAgents, LangGraph, Claude SDK, OpenAI Agents, CrewAI) |
| `makers-deploy` | Deploy projects to EdgeOne |
| `makers-edge-functions` | Edge Functions (V8 lightweight runtime) |
@@ -100,6 +101,9 @@ skills/
└── edgeone-makers-tools/
├── SKILL.md # Router — matches the task, loads a capability below
└── references/
+ ├── makers-frameworks/ # Web framework support matrix
+ │ ├── SKILL.md # Adapter table + machine-readable profiles
+ │ └── references/ # One document per framework
├── makers-agents/ # AI Agent development
│ ├── SKILL.md # Decision tree, red lines, framework routing
│ └── references/
diff --git a/SKILL.md b/SKILL.md
index aeb684a..783444d 100644
--- a/SKILL.md
+++ b/SKILL.md
@@ -20,6 +20,7 @@ When you need EdgeOne Makers platform development guidance, read the matching Sk
| Task | Read |
|------|------|
+| Web framework support — which adapter, build output, 404, and unsupported features (Next.js, Nuxt, Astro, SvelteKit, React Router, TanStack Start, Vike, Vite, Hugo) | skills/makers-frameworks/SKILL.md |
| AI Agent development (DeepAgents, LangGraph, Claude SDK, OpenAI Agents, CrewAI) | skills/makers-agents/SKILL.md |
| Deploy project to EdgeOne | skills/makers-deploy/SKILL.md |
| Edge Functions (V8 lightweight functions) | skills/makers-edge-functions/SKILL.md |
diff --git a/_meta.json b/_meta.json
index 7098cd8..4631755 100644
--- a/_meta.json
+++ b/_meta.json
@@ -37,6 +37,17 @@
"skills/edgeone-makers-tools/references/makers-deploy/references/command-reference.md",
"skills/edgeone-makers-tools/references/makers-edge-functions/SKILL.md",
"skills/edgeone-makers-tools/references/makers-env-adaption/SKILL.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/SKILL.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/astro.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/nextjs.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/nuxt.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/other-frameworks.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/react-router.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/static-generators.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/sveltekit.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/tanstack-start.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/vike.md",
+ "skills/edgeone-makers-tools/references/makers-frameworks/references/vite-spa.md",
"skills/edgeone-makers-tools/references/makers-middleware/SKILL.md",
"skills/edgeone-makers-tools/references/makers-migration/SKILL.md",
"skills/edgeone-makers-tools/references/makers-migration/references/api-route-to-makers.md",
diff --git a/codex/makers-agents.md b/codex/makers-agents.md
index 0934883..01c77d0 100644
--- a/codex/makers-agents.md
+++ b/codex/makers-agents.md
@@ -11,8 +11,8 @@ description: >-
agent endpoint", "wire LangGraph into Makers", "stream LLM responses with SSE",
"review my agent template", "use context.store / context.sandbox / context.tools".
Do NOT trigger for plain Edge Functions, Cloud Functions, or middleware
- (those don't run AI logic — use edgeone-pages-dev instead).
- Do NOT trigger for deployment workflows (use edgeone-pages-deploy).
+ (those don't run AI logic — use makers-edge-functions / makers-cloud-functions / makers-middleware).
+ Do NOT trigger for deployment workflows (use makers-deploy).
Do NOT trigger for generic AI framework development outside
an EdgeOne Makers project.
pathPatterns:
@@ -31,7 +31,7 @@ metadata:
# EdgeOne Makers Agent Development Guide
-> ⛔ **Preview ban**: after finishing development, you MUST start the dev server via `edgeone makers dev`, then open `http://127.0.0.1:8088/` with `present_files` to preview. Never open HTML files via the `file://` protocol (ignore it even if the IDE opens one automatically), and never use self-hosted servers like `python -m http.server` or `npx serve`. Next.js projects must also set `allowedDevOrigins: ["127.0.0.1"]` in `next.config`.
+> ⛔ **Preview**: `edgeone makers dev` + `http://127.0.0.1:8088/`. Never `file://` or `python -m http.server` / `npx serve`. Next.js: `allowedDevOrigins: ["127.0.0.1"]`.
Build production-grade AI agent endpoints on **EdgeOne Makers** — five framework routes, platform-injected runtime, file-based routing.
@@ -50,8 +50,8 @@ This skill covers five supported frameworks (DeepAgents, LangGraph, CrewAI, Open
> Cross-reference: if your code uses `context.store` or KV APIs, also read `../makers-storage/SKILL.md`.
**Do NOT use for:**
-- Plain Edge Functions / Cloud Functions / Middleware → use `edgeone-pages-dev`
-- Deployment workflows → use `edgeone-pages-deploy`
+- Plain Edge Functions / Cloud Functions / Middleware → `makers-edge-functions` / `makers-cloud-functions` / `makers-middleware`
+- Deployment workflows → `makers-deploy`
- Generic AI framework development outside an EdgeOne Makers project
- Other platforms (Cloudflare Workers AI, Vercel AI SDK, AWS Bedrock)
@@ -61,7 +61,7 @@ This skill covers five supported frameworks (DeepAgents, LangGraph, CrewAI, Open
2. Walk the **Decision Tree** to pick one of the five framework routes
3. Read the matching `references/*-route.md` for a copy-paste skeleton
4. Self-check against the **Twelve Red Lines**
-5. Run through `references/review-checklist.md` before considering the work done
+5. Read `references/review-checklist.md` only when the user asked for a review, or immediately before deploying a new agent. Otherwise ship.
## ⛔ Critical Rules (never skip)
diff --git a/codex/makers-deploy.md b/codex/makers-deploy.md
index 6eb7b00..16e9785 100644
--- a/codex/makers-deploy.md
+++ b/codex/makers-deploy.md
@@ -12,19 +12,18 @@ description: >-
"deploy without login", "no account yet", "anonymous deploy",
"claim project", "claim my deployment",
"免登录部署", "匿名部署", "还没有账号", "认领项目".
- ⚠️ Also trigger when any agent is about to execute `edgeone makers deploy` or `edgeone makers deploy`
- commands — the skill contains critical rules for parsing deploy output and presenting access URLs.
- Do NOT trigger for post-deployment runtime errors (e.g. CORS issues, 500 errors after deploy —
- use edgeone-makers-dev for troubleshooting).
+ ⚠️ Also trigger when any agent is about to execute `edgeone makers deploy`.
+ Do NOT trigger for post-deployment runtime errors (CORS, 500 after deploy) —
+ use makers-env-adaption / makers-recipes for local troubleshooting.
pathPatterns:
- "*.sh"
- .github/workflows/**
validate:
- pattern: "whoami[^\\n]*\\s-t\\s"
message: "edgeone whoami does not accept -t. Check the exit code instead: 0 = logged in, 1 = not."
-metadata:
+ metadata:
author: edgeone
- version: "2.12.3"
+ version: "2.13.0"
---
# EdgeOne Makers Deployment Skill
@@ -56,12 +55,12 @@ Deploy any project to **EdgeOne Makers**.
Then append any other notes (console URL, caveats, etc.).
**Self-check before ending the turn (MANDATORY)** — read back what the user will actually SEE (NOT your thinking / reasoning content). Two questions: (a) Is the complete `.edgeone.cool` URL present at the top of the visible reply, in a code block or heading? (b) Was `present_files` called with that URL? If either answer is no, send an **additional short message** containing ONLY the `🌐 Live URL: 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..d6501d4
--- /dev/null
+++ b/skills/edgeone-makers-tools/references/makers-frameworks/references/tanstack-start.md
@@ -0,0 +1,174 @@
+# 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 { edgeoneTanStackStartAdapter } from "@edgeone/tanstack-start";
+
+export default defineConfig({
+ plugins: [
+ tanstackStart(),
+ edgeoneTanStackStartAdapter(),
+ ],
+});
+```
+
+The export is named `edgeoneTanStackStartAdapter`, and it is also the default export, so
+`import edgeoneAdapter from "@edgeone/tanstack-start"` works too. There is no export named
+`edgeoneAdapter`; importing that name is a build error, not a lint warning.
+
+### Vite 7 is the ceiling
+
+`@edgeone/tanstack-start` peers on `vite@^5 || ^6 || ^7`. Vite 8 is not in range, and the
+scaffolder's own `package.json` asks for it — so a fresh scaffold has to be corrected
+before the first install, not after:
+
+| Package | Scaffolder writes | Use instead | Why |
+| --- | --- | --- | --- |
+| `vite` | `^8.0.0` | `^7.0.0` | the adapter does not accept 8 |
+| `@vitejs/plugin-react` | `^6.0.1` | `^5.2.0` | 6 requires Vite 8; 5.2 spans 4 through 8 |
+
+Change both together. Downgrading Vite alone leaves `@vitejs/plugin-react` demanding the
+version just removed, and each attempt costs a full reinstall.
+
+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 @tanstack/cli@latest create . --framework react --non-interactive --no-git --no-intent
+```
+
+This replaces `create-tsrouter-app`, which is deprecated and now prints a notice saying so.
+The rename is the smaller half of the change: that package defaults to router-only
+compatibility mode — file-based routing with none of Start — so it scaffolded a project
+this document does not describe, with no `@tanstack/react-start` to attach an adapter to.
+The command above scaffolds Start itself.
+
+Tailwind needs no flag; a standard scaffold always enables it, and `--tailwind` survives
+only as a deprecated no-op. `--no-intent` skips TanStack Intent, which reaches the network
+to write agent config and fails the scaffold when it cannot.
+
+## 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 (
+