[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FG7ZR2ECEY89RA7N91X6DB":3,"skill-same:01M6FG7ZR2ECEY89RA7N91X6DB":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6FG7ZR2ECEY89RA7N91X6DB","bun-tanstack-start",null,"TanStack Start full-stack React framework with Bun runtime. Use for TanStack Router, server functions, vinxi, or encountering SSR, build, preset errors.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fbun-tanstack-start\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"bun","bun tanstack start","tanstack start","tanstack","start","server","stack","framework","use","router","react","functions","tanstack router","ssr","full","runtime","vinxi","with","errors","preset","2026-11-10 10:12:30",false,"---\nname: bun-tanstack-start\ndescription: TanStack Start full-stack React framework with Bun runtime. Use for TanStack Router, server functions, vinxi, or encountering SSR, build, preset errors.\nlicense: MIT\n---\n\n# Bun TanStack Start\n\nRun TanStack Start (full-stack React framework) with Bun.\n\n## Quick Start\n\n```bash\n# Create new TanStack Start project\nbunx create-tanstack-start@latest my-app\ncd my-app\n\n# Install dependencies\nbun install\n\n# Development\nbun run dev\n\n# Build\nbun run build\n\n# Preview\nbun run start\n```\n\n## Project Setup\n\n### package.json\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"vinxi dev\",\n    \"build\": \"vinxi build\",\n    \"start\": \"vinxi start\"\n  },\n  \"dependencies\": {\n    \"@tanstack\u002Freact-router\": \"^1.139.0\",\n    \"@tanstack\u002Fstart\": \"^1.120.0\",\n    \"react\": \"^19.2.0\",\n    \"react-dom\": \"^19.2.0\",\n    \"vinxi\": \"^0.5.10\"\n  }\n}\n```\n\n### app.config.ts\n\n```typescript\nimport { defineConfig } from \"@tanstack\u002Fstart\u002Fconfig\";\n\nexport default defineConfig({\n  server: {\n    preset: \"bun\",\n  },\n});\n```\n\n## File-Based Routing\n\n```\napp\u002F\n├── routes\u002F\n│   ├── __root.tsx       # Root layout\n│   ├── index.tsx        # \u002F\n│   ├── about.tsx        # \u002Fabout\n│   ├── users\u002F\n│   │   ├── index.tsx    # \u002Fusers\n│   │   └── $userId.tsx  # \u002Fusers\u002F:userId\n│   └── api\u002F\n│       └── users.ts     # \u002Fapi\u002Fusers\n└── client.tsx\n```\n\n## Route Components\n\n### Basic Route\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createFileRoute(\"\u002F\")({\n  component: Home,\n});\n\nfunction Home() {\n  return \u003Ch1>Welcome Home\u003C\u002Fh1>;\n}\n```\n\n### Route with Loader\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F\")({\n  loader: async () => {\n    const response = await fetch(\"\u002Fapi\u002Fusers\");\n    return response.json();\n  },\n  component: Users,\n});\n\nfunction Users() {\n  const users = Route.useLoaderData();\n\n  return (\n    \u003Cul>\n      {users.map((user) => (\n        \u003Cli key={user.id}>{user.name}\u003C\u002Fli>\n      ))}\n    \u003C\u002Ful>\n  );\n}\n```\n\n### Dynamic Routes\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002F$userId.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F$userId\")({\n  loader: async ({ params }) => {\n    const response = await fetch(`\u002Fapi\u002Fusers\u002F${params.userId}`);\n    return response.json();\n  },\n  component: UserDetail,\n});\n\nfunction UserDetail() {\n  const user = Route.useLoaderData();\n  const { userId } = Route.useParams();\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>{user.name}\u003C\u002Fh1>\n      \u003Cp>User ID: {userId}\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n## Server Functions\n\n### Define Server Function\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\nimport { createServerFn } from \"@tanstack\u002Fstart\";\nimport { Database } from \"bun:sqlite\";\n\nconst getUsers = createServerFn(\"GET\", async () => {\n  const db = new Database(\"data.sqlite\");\n  const users = db.query(\"SELECT * FROM users\").all();\n  db.close();\n  return users;\n});\n\nconst createUser = createServerFn(\"POST\", async (name: string) => {\n  const db = new Database(\"data.sqlite\");\n  db.run(\"INSERT INTO users (name) VALUES (?)\", [name]);\n  db.close();\n  return { success: true };\n});\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F\")({\n  loader: () => getUsers(),\n  component: Users,\n});\n\nfunction Users() {\n  const users = Route.useLoaderData();\n\n  const handleSubmit = async (e: React.FormEvent\u003CHTMLFormElement>) => {\n    e.preventDefault();\n    const formData = new FormData(e.currentTarget);\n    const name = formData.get(\"name\") as string;\n    await createUser(name);\n    \u002F\u002F Refetch or update state\n  };\n\n  return (\n    \u003Cdiv>\n      \u003Cform onSubmit={handleSubmit}>\n        \u003Cinput name=\"name\" placeholder=\"Name\" \u002F>\n        \u003Cbutton type=\"submit\">Add User\u003C\u002Fbutton>\n      \u003C\u002Fform>\n      \u003Cul>\n        {users.map((user) => (\n          \u003Cli key={user.id}>{user.name}\u003C\u002Fli>\n        ))}\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n### Server Function with Context\n\n```tsx\nimport { createServerFn } from \"@tanstack\u002Fstart\";\nimport { getWebRequest } from \"@tanstack\u002Fstart\u002Fserver\";\n\nconst getSession = createServerFn(\"GET\", async () => {\n  const request = getWebRequest();\n  const cookies = request.headers.get(\"Cookie\");\n  \u002F\u002F Parse and validate session\n  return { userId: \"123\", role: \"admin\" };\n});\n\nconst protectedAction = createServerFn(\"POST\", async (data: any) => {\n  const session = await getSession();\n\n  if (session.role !== \"admin\") {\n    throw new Error(\"Unauthorized\");\n  }\n\n  \u002F\u002F Perform action\n  return { success: true };\n});\n```\n\n## API Routes\n\n```typescript\n\u002F\u002F app\u002Froutes\u002Fapi\u002Fusers.ts\nimport { createAPIFileRoute } from \"@tanstack\u002Fstart\u002Fapi\";\nimport { Database } from \"bun:sqlite\";\n\nexport const Route = createAPIFileRoute(\"\u002Fapi\u002Fusers\")({\n  GET: async ({ request }) => {\n    const db = new Database(\"data.sqlite\");\n    const users = db.query(\"SELECT * FROM users\").all();\n    db.close();\n\n    return Response.json(users);\n  },\n\n  POST: async ({ request }) => {\n    const { name } = await request.json();\n\n    const db = new Database(\"data.sqlite\");\n    db.run(\"INSERT INTO users (name) VALUES (?)\", [name]);\n    db.close();\n\n    return Response.json({ success: true });\n  },\n});\n```\n\n## Root Layout\n\n```tsx\n\u002F\u002F app\u002Froutes\u002F__root.tsx\nimport { createRootRoute, Link, Outlet } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createRootRoute({\n  component: Root,\n});\n\nfunction Root() {\n  return (\n    \u003Chtml>\n      \u003Chead>\n        \u003Cmeta charSet=\"utf-8\" \u002F>\n        \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \u002F>\n        \u003Ctitle>My App\u003C\u002Ftitle>\n      \u003C\u002Fhead>\n      \u003Cbody>\n        \u003Cnav>\n          \u003CLink to=\"\u002F\">Home\u003C\u002FLink>\n          \u003CLink to=\"\u002Fusers\">Users\u003C\u002FLink>\n          \u003CLink to=\"\u002Fabout\">About\u003C\u002FLink>\n        \u003C\u002Fnav>\n        \u003Cmain>\n          \u003COutlet \u002F>\n        \u003C\u002Fmain>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  );\n}\n```\n\n## Error Handling\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002F$userId.tsx\nexport const Route = createFileRoute(\"\u002Fusers\u002F$userId\")({\n  loader: async ({ params }) => {\n    const response = await fetch(`\u002Fapi\u002Fusers\u002F${params.userId}`);\n    if (!response.ok) {\n      throw new Error(\"User not found\");\n    }\n    return response.json();\n  },\n  errorComponent: ({ error }) => (\n    \u003Cdiv>\n      \u003Ch1>Error\u003C\u002Fh1>\n      \u003Cp>{error.message}\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  ),\n  pendingComponent: () => \u003Cdiv>Loading...\u003C\u002Fdiv>,\n  component: UserDetail,\n});\n```\n\n## Search Params\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\nimport { z } from \"zod\";\n\nconst searchSchema = z.object({\n  page: z.number().default(1),\n  limit: z.number().default(10),\n  search: z.string().optional(),\n});\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F\")({\n  validateSearch: searchSchema,\n  loader: async ({ search }) => {\n    const { page, limit, search: query } = search;\n    \u002F\u002F Fetch with pagination\n    return fetchUsers({ page, limit, query });\n  },\n  component: Users,\n});\n```\n\n## Deployment\n\n### Build for Bun\n\n```bash\nNITRO_PRESET=bun bun run build\nbun .output\u002Fserver\u002Findex.mjs\n```\n\n### Docker\n\n```dockerfile\nFROM oven\u002Fbun:1 AS builder\n\nWORKDIR \u002Fapp\nCOPY package.json bun.lockb .\u002F\nRUN bun install --frozen-lockfile\n\nCOPY . .\nRUN bun run build\n\nFROM oven\u002Fbun:1\n\nWORKDIR \u002Fapp\nCOPY --from=builder \u002Fapp\u002F.output .\u002Foutput\n\nEXPOSE 3000\n\nCMD [\"bun\", \".output\u002Fserver\u002Findex.mjs\"]\n```\n\n## Common Errors\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `Cannot find bun:sqlite` | Wrong preset | Set `server.preset: \"bun\"` |\n| `Server function failed` | Network error | Check function definition |\n| `Route not found` | File naming | Check route file location |\n| `Hydration mismatch` | Server\u002Fclient diff | Check loader data |\n\n## When to Load References\n\nLoad `references\u002Frouter-api.md` when:\n- Advanced routing patterns\n- Route guards\n- Nested layouts\n\nLoad `references\u002Fforms.md` when:\n- Form handling\n- Mutations\n- Optimistic updates\n","# Bun TanStack Start\n\nRun TanStack Start (full-stack React framework) with Bun.\n\n## Quick Start\n\n```bash\n# Create new TanStack Start project\nbunx create-tanstack-start@latest my-app\ncd my-app\n\n# Install dependencies\nbun install\n\n# Development\nbun run dev\n\n# Build\nbun run build\n\n# Preview\nbun run start\n```\n\n## Project Setup\n\n### package.json\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"vinxi dev\",\n    \"build\": \"vinxi build\",\n    \"start\": \"vinxi start\"\n  },\n  \"dependencies\": {\n    \"@tanstack\u002Freact-router\": \"^1.139.0\",\n    \"@tanstack\u002Fstart\": \"^1.120.0\",\n    \"react\": \"^19.2.0\",\n    \"react-dom\": \"^19.2.0\",\n    \"vinxi\": \"^0.5.10\"\n  }\n}\n```\n\n### app.config.ts\n\n```typescript\nimport { defineConfig } from \"@tanstack\u002Fstart\u002Fconfig\";\n\nexport default defineConfig({\n  server: {\n    preset: \"bun\",\n  },\n});\n```\n\n## File-Based Routing\n\n```\napp\u002F\n├── routes\u002F\n│   ├── __root.tsx       # Root layout\n│   ├── index.tsx        # \u002F\n│   ├── about.tsx        # \u002Fabout\n│   ├── users\u002F\n│   │   ├── index.tsx    # \u002Fusers\n│   │   └── $userId.tsx  # \u002Fusers\u002F:userId\n│   └── api\u002F\n│       └── users.ts     # \u002Fapi\u002Fusers\n└── client.tsx\n```\n\n## Route Components\n\n### Basic Route\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createFileRoute(\"\u002F\")({\n  component: Home,\n});\n\nfunction Home() {\n  return \u003Ch1>Welcome Home\u003C\u002Fh1>;\n}\n```\n\n### Route with Loader\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F\")({\n  loader: async () => {\n    const response = await fetch(\"\u002Fapi\u002Fusers\");\n    return response.json();\n  },\n  component: Users,\n});\n\nfunction Users() {\n  const users = Route.useLoaderData();\n\n  return (\n    \u003Cul>\n      {users.map((user) => (\n        \u003Cli key={user.id}>{user.name}\u003C\u002Fli>\n      ))}\n    \u003C\u002Ful>\n  );\n}\n```\n\n### Dynamic Routes\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002F$userId.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F$userId\")({\n  loader: async ({ params }) => {\n    const response = await fetch(`\u002Fapi\u002Fusers\u002F${params.userId}`);\n    return response.json();\n  },\n  component: UserDetail,\n});\n\nfunction UserDetail() {\n  const user = Route.useLoaderData();\n  const { userId } = Route.useParams();\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>{user.name}\u003C\u002Fh1>\n      \u003Cp>User ID: {userId}\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n## Server Functions\n\n### Define Server Function\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\nimport { createServerFn } from \"@tanstack\u002Fstart\";\nimport { Database } from \"bun:sqlite\";\n\nconst getUsers = createServerFn(\"GET\", async () => {\n  const db = new Database(\"data.sqlite\");\n  const users = db.query(\"SELECT * FROM users\").all();\n  db.close();\n  return users;\n});\n\nconst createUser = createServerFn(\"POST\", async (name: string) => {\n  const db = new Database(\"data.sqlite\");\n  db.run(\"INSERT INTO users (name) VALUES (?)\", [name]);\n  db.close();\n  return { success: true };\n});\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F\")({\n  loader: () => getUsers(),\n  component: Users,\n});\n\nfunction Users() {\n  const users = Route.useLoaderData();\n\n  const handleSubmit = async (e: React.FormEvent\u003CHTMLFormElement>) => {\n    e.preventDefault();\n    const formData = new FormData(e.currentTarget);\n    const name = formData.get(\"name\") as string;\n    await createUser(name);\n    \u002F\u002F Refetch or update state\n  };\n\n  return (\n    \u003Cdiv>\n      \u003Cform onSubmit={handleSubmit}>\n        \u003Cinput name=\"name\" placeholder=\"Name\" \u002F>\n        \u003Cbutton type=\"submit\">Add User\u003C\u002Fbutton>\n      \u003C\u002Fform>\n      \u003Cul>\n        {users.map((user) => (\n          \u003Cli key={user.id}>{user.name}\u003C\u002Fli>\n        ))}\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  );\n}\n```\n\n### Server Function with Context\n\n```tsx\nimport { createServerFn } from \"@tanstack\u002Fstart\";\nimport { getWebRequest } from \"@tanstack\u002Fstart\u002Fserver\";\n\nconst getSession = createServerFn(\"GET\", async () => {\n  const request = getWebRequest();\n  const cookies = request.headers.get(\"Cookie\");\n  \u002F\u002F Parse and validate session\n  return { userId: \"123\", role: \"admin\" };\n});\n\nconst protectedAction = createServerFn(\"POST\", async (data: any) => {\n  const session = await getSession();\n\n  if (session.role !== \"admin\") {\n    throw new Error(\"Unauthorized\");\n  }\n\n  \u002F\u002F Perform action\n  return { success: true };\n});\n```\n\n## API Routes\n\n```typescript\n\u002F\u002F app\u002Froutes\u002Fapi\u002Fusers.ts\nimport { createAPIFileRoute } from \"@tanstack\u002Fstart\u002Fapi\";\nimport { Database } from \"bun:sqlite\";\n\nexport const Route = createAPIFileRoute(\"\u002Fapi\u002Fusers\")({\n  GET: async ({ request }) => {\n    const db = new Database(\"data.sqlite\");\n    const users = db.query(\"SELECT * FROM users\").all();\n    db.close();\n\n    return Response.json(users);\n  },\n\n  POST: async ({ request }) => {\n    const { name } = await request.json();\n\n    const db = new Database(\"data.sqlite\");\n    db.run(\"INSERT INTO users (name) VALUES (?)\", [name]);\n    db.close();\n\n    return Response.json({ success: true });\n  },\n});\n```\n\n## Root Layout\n\n```tsx\n\u002F\u002F app\u002Froutes\u002F__root.tsx\nimport { createRootRoute, Link, Outlet } from \"@tanstack\u002Freact-router\";\n\nexport const Route = createRootRoute({\n  component: Root,\n});\n\nfunction Root() {\n  return (\n    \u003Chtml>\n      \u003Chead>\n        \u003Cmeta charSet=\"utf-8\" \u002F>\n        \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \u002F>\n        \u003Ctitle>My App\u003C\u002Ftitle>\n      \u003C\u002Fhead>\n      \u003Cbody>\n        \u003Cnav>\n          \u003CLink to=\"\u002F\">Home\u003C\u002FLink>\n          \u003CLink to=\"\u002Fusers\">Users\u003C\u002FLink>\n          \u003CLink to=\"\u002Fabout\">About\u003C\u002FLink>\n        \u003C\u002Fnav>\n        \u003Cmain>\n          \u003COutlet \u002F>\n        \u003C\u002Fmain>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  );\n}\n```\n\n## Error Handling\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002F$userId.tsx\nexport const Route = createFileRoute(\"\u002Fusers\u002F$userId\")({\n  loader: async ({ params }) => {\n    const response = await fetch(`\u002Fapi\u002Fusers\u002F${params.userId}`);\n    if (!response.ok) {\n      throw new Error(\"User not found\");\n    }\n    return response.json();\n  },\n  errorComponent: ({ error }) => (\n    \u003Cdiv>\n      \u003Ch1>Error\u003C\u002Fh1>\n      \u003Cp>{error.message}\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  ),\n  pendingComponent: () => \u003Cdiv>Loading...\u003C\u002Fdiv>,\n  component: UserDetail,\n});\n```\n\n## Search Params\n\n```tsx\n\u002F\u002F app\u002Froutes\u002Fusers\u002Findex.tsx\nimport { createFileRoute } from \"@tanstack\u002Freact-router\";\nimport { z } from \"zod\";\n\nconst searchSchema = z.object({\n  page: z.number().default(1),\n  limit: z.number().default(10),\n  search: z.string().optional(),\n});\n\nexport const Route = createFileRoute(\"\u002Fusers\u002F\")({\n  validateSearch: searchSchema,\n  loader: async ({ search }) => {\n    const { page, limit, search: query } = search;\n    \u002F\u002F Fetch with pagination\n    return fetchUsers({ page, limit, query });\n  },\n  component: Users,\n});\n```\n\n## Deployment\n\n### Build for Bun\n\n```bash\nNITRO_PRESET=bun bun run build\nbun .output\u002Fserver\u002Findex.mjs\n```\n\n### Docker\n\n```dockerfile\nFROM oven\u002Fbun:1 AS builder\n\nWORKDIR \u002Fapp\nCOPY package.json bun.lockb .\u002F\nRUN bun install --frozen-lockfile\n\nCOPY . .\nRUN bun run build\n\nFROM oven\u002Fbun:1\n\nWORKDIR \u002Fapp\nCOPY --from=builder \u002Fapp\u002F.output .\u002Foutput\n\nEXPOSE 3000\n\nCMD [\"bun\", \".output\u002Fserver\u002Findex.mjs\"]\n```\n\n## Common Errors\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `Cannot find bun:sqlite` | Wrong preset | Set `server.preset: \"bun\"` |\n| `Server function failed` | Network error | Check function definition |\n| `Route not found` | File naming | Check route file location |\n| `Hydration mismatch` | Server\u002Fclient diff | Check loader data |\n\n## When to Load References\n\nLoad `references\u002Frouter-api.md` when:\n- Advanced routing patterns\n- Route guards\n- Nested layouts\n\nLoad `references\u002Fforms.md` when:\n- Form handling\n- Mutations\n- Optimistic updates\n",{"name":5,"license":15,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fsecondsky\u002Fclaude-skills\u002Fbun-tanstack-start",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill bun-tanstack-start",{"tool":64,"command":65},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill bun-tanstack-start",{"tool":67,"command":68},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill bun-tanstack-start","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Fbun-tanstack-start\u002FSKILL.md",true,[],[73,85,95,104,110,117],{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":81,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[82,83,84],"model","model hierarchy","model hierarchy skill",{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":91,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[90],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},[92,93,94],"MCP","zoom","zoom mcp",{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[101,102,103,93],"sdk","zoom apps sdk","apps",{"skillNo":105,"name":106,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[106],{"skillNo":111,"name":112,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":116,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[115],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},[112],{"skillNo":118,"name":119,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[119]]