File-based routing: route tree is generated from the folder/file structure under src/routes/, compiled into routeTree.gen.ts by the Vite plugin. (Ch 1, 3, 5, 6, 7, 8, 10, 12, 16, 17, 19, 21, 22, 23, 24)
Code-based routing: routes are constructed manually in code with createRoute / createRootRoute and assembled into a tree passed to createRouter, no code generation. (Ch 2, 4, 9, 11, 13, 14, 15, 18, 20)
routeTree.gen.ts: auto-generated file produced by the router Vite/Rspack plugin from file-based routes; imported once in the app entry and never hand-edited.
Pathless layout route: a route segment prefixed with _ (e.g. _pathlessLayout.tsx, _auth.tsx) that wraps child routes in a shared layout/guard without adding a URL segment. (Ch 3, 5, 6, 17)
Route group: a folder wrapped in parentheses (e.g. (this-folder-is-not-in-the-url)) used to organize files without affecting the URL path. (Ch 5)
.lazy.tsx file: a code-split companion file to a route definition; the router loads the route's code-side config eagerly and the component lazily via this file. (Ch 4, 18)
beforeLoad: a route lifecycle hook that runs before loader, commonly used for auth guards and injecting context; can throw a redirect() to bail out of navigation. (Ch 17)
loader: a route lifecycle hook that fetches data before (or during) a route's render, with results available via Route.useLoaderData().
Deferred promise / defer(): wraps a slow promise returned from a loader so the route renders immediately and the slow value resolves later, read with <Await> or useAwaited. (Ch 9, 8)
SSR streaming: server-side rendering that flushes HTML to the client incrementally as deferred data resolves, instead of waiting for the whole page. (Ch 8)
Search validator adapter: a wrapper that lets a schema library other than the router's native validator function (Zod, Valibot, ArkType) validate and type a route's search params identically. (Ch 12)
Default search params: filling in a fallback value for a missing or invalid search param, typically .catch(defaultValue) inside validateSearch, so the loader/component never sees undefined. (Ch 11)
Route mask (createRouteMask) / location masking: mapping an internally matched route (e.g. a modal nested under a list) to a different "from -> to" URL shown in the address bar, registered globally via createRouter({ routeMasks: [...] }). (Ch 13)
Navigation blocking / useBlocker: a hook that intercepts an in-app or browser navigation attempt (e.g. unsaved form) and lets the app confirm or cancel it. (Ch 14)
Scroll restoration: automatic save/restore of scroll position per route entry across navigations, enabled via scrollRestoration: true on the router. (Ch 15)
View Transitions API integration: opting a navigation into the browser's native View Transitions API via the router's viewTransition flag (per Link/navigate) or defaultViewTransition (router-wide), so the browser animates the DOM diff between pages. (Ch 16)
Monorepo lazy loading: in a router split across pnpm workspace packages, deferring a route's component import so the app package doesn't eagerly bundle every feature package. (Ch 23)
Workspace package split: separating the router/route tree, feature UI, and data-fetching logic into independent packages (router, post-feature/post-query, app) consumed via workspace:*. (Ch 22, 23, 24)
queryOptions: a TanStack Query helper that bundles a query key + query function into a reusable object, passed to queryClient.ensureQueryData inside a router loader and to useSuspenseQuery in the component. (Ch 6, 18, 24)