Skip to content
Development
Skill

/solid-tanstack-start

Use when organizing TanStack Start code, splitting oversized routes/server functions, or reviewing architecture. Do NOT use for setup or plain React SPA.

From plugin
fusengine-claude-plugins
34200 skills40 agents34 commands

Claude Code

$ npx -y skills add fusengine/claude-plugins --skill solid-tanstack-start --agent claude-code

SKILL.md

solid-tanstack-start.SKILL.md
name: solid-tanstack-start
version: 1.0.0
description: Use when organizing TanStack Start code, splitting oversized routes/server functions, or reviewing architecture. Do NOT use for setup or plain React SPA.
user-invocable: true
references: references/solid-principles.md, references/single-responsibility.md, references/architecture-patterns.md, references/interface-segregation.md, references/dependency-inversion.md, references/templates/route.md, references/templates/server-fn.md, references/templates/interface.md, references/templates/hook.md

<objective> Applies SOLID principles and clean architecture to TanStack Start v1.169.5 projects: source files within `FUSE_SOLID_MAX_LINES` and split by responsibility when cohesion drops, types declared only in src/interfaces/ (never inline in a route or component file), JSDoc on every export, and a modular directory structure built around the Start route tree.

Establishes the isomorphic/server-only boundary as an architectural concern: DB access, secrets, and filesystem work must sit behind createServerFn or createServerOnlyFn, never inside a bare loader.

Absolute rules include never hand-editing the generated src/routeTree.gen.ts, no module importing another feature module except cores/, no barrel exports, and no `any` types. Includes code templates for routes, server functions, interfaces, and hooks, and DRY guidance to grep for existing logic in src/modules/cores/ or src/lib/ before writing new code.

Do NOT use this skill for initial framework setup (use start-core), for the server/client execution-boundary deep dive itself (use start-execution-model), or for a generic React SPA that has no Start route tree (use solid-react). </objective>

SOLID TanStack Start

SOLID and clean architecture for **TanStack Start v1.169.5** projects (Vite plugin `tanstackStart()`, file-based routes in `src/routes/`, server functions via `createServerFn`). Start code is isomorphic by default — architecture must make the server/client boundary explicit.

Codebase Analysis (MANDATORY)

**Before ANY implementation:** 1. Explore the `src/routes/` tree and existing `modules/` to learn conventions. 2. Read related route files and their `createServerFn` wrappers. 3. Identify naming, path aliases (`~/`, `@/`), and data-flow patterns.

DRY - Reuse or Create Shared (MANDATORY)

**Before writing ANY new code:** 1. **Grep** for similar function names, loaders, or server functions. 2. Check shared locations: `src/modules/cores/`, `src/lib/`. 3. If similar code exists → extend/reuse instead of duplicating. 4. Logic used by 2+ features → put it in `src/modules/cores/` directly. 5. Run `npx jscpd ./src --threshold 3` after creating new files.

---

Absolute Rules (MANDATORY)

1. Source-file size ceiling

Source files must not exceed `FUSE_SOLID_MAX_LINES` - the hook's ceiling is the only authority. Split by responsibility when cohesion drops; see `references/single-responsibility.md`.

2. NEVER edit `src/routeTree.gen.ts`

It is generated by the `tanstackStart()` plugin on every dev/build run. Editing it by hand is always wrong — the change is overwritten and route types break. Add/rename files in `src/routes/` instead and let the plugin regenerate it.

3. Interfaces Separated

src/modules/[feature]/src/interfaces/
├── user.interface.ts
└── api.interface.ts

**NEVER declare types inside a route or component file.** See `references/interface-segregation.md`.

4. JSDoc Mandatory on every export

/**
 * Fetch a user by ID (server-only).
 *
 * @param data - Lookup payload with the user id
 * @returns The user row, or throws notFound()
 */
export const getUser = createServerFn({ method: 'GET' })
  .validator((data: { id: string }) => data)
  .handler(async ({ data }) => findUserById(data.id))

5. Server-only logic lives behind `createServerFn`

Loaders are isomorphic. DB access, secrets, and filesystem MUST sit inside a `createServerFn().handler()` (or a `createServerOnlyFn`), never a bare loader. See `start-execution-model` for the full boundary model.

---

SOLID Principles (Detailed Guides)

1. **`references/single-responsibility.md`** — Load when a route/server function grows past its limit; line budgets + split strategy for Start files. 2. **`references/interface-segregation.md`** — Load when designing route loader data, server-function payloads, or router context; keep them focused. 3. **`references/dependency-inversion.md`** — Load when a server function calls a service; depend on abstractions in `interfaces/`, inject implementations.

See `references/solid-principles.md` for the overview and `references/architecture-patterns.md` for the full directory layout.

---

Code Templates

Ready-to-copy code in `references/templates/`:

| Template | Usage | |----------|-------| | `route.md` | `createFileRoute` component + loader | | `server-fn.md` | `createServerFn` with Zod validator | | `interface.md` | TypeScript interfaces in `src/interfaces/` | | `hook.md` | Client hook wrapping a server function |

---

Forbidden

  • Editing `src/routeTree.gen.ts` (generated).
  • Types declared inside route/component files.
  • DB / secrets / filesystem in a bare loader (→ `createServerFn`).
  • Module importing another feature module (except `cores/`).
  • Source files exceeding `FUSE_SOLID_MAX_LINES`, missing JSDoc on exports, `any` type.
  • Barrel exports (`index.ts` re-exports).
  • Coding without checking current docs (Context7 + Exa) first.
Read more
@fusengine
Ships withfusengine-claude-plugins

A plugin ecosystem that turns Claude Code into a supervised, multi-agent development environment.

34200 skills40 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
34
Star history of fusengine/agents on GitHub, a chart by star-history.com

Other skills on fusengine-claude-plugins.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about solid-tanstack-start.

Which coding agents can use solid-tanstack-start?
solid-tanstack-start installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.