"TanStack web roadmap"

TanStack web roadmap

This document implements the execution narrative for ADR 010: TanStack web spine. Authoritative decisions remain in the ADR; this file tracks phases, dependencies, and open choices.

Phase ladder

PhaseGoalStatus
0SSOT + hygiene, vox-codegen-html retirementDone
1Minimal golden examples/ + parser parityDone
2TanStack Router in vox-codegen-ts + templatesDone
3pnpm workspace linking main Vite app + islands/Mostly done (see backlog)
4TanStack Start + full SSR default (Axum proxy topology)Done (scaffold + dev proxy)
5Route loaders + server fn fix — @query→GET, @mutation→POST, route loader bindingsIn progress
6v0.dev unified docs + lint parity (main + islands)Done (shared normalization)
7Virtual file routes__root.tsx + per-route files + app/routes.tsIn progress — see spec

SSR topology (summary)

Default (ADR 010): Axum reverse-proxies document requests to a Node TanStack Start / SSR dev server; Axum keeps API routes and can still rust_embed public/ for static chunks.

Development: two processes (vox run / compilerd for Rust + pnpm SSR dev) until a single orchestrator exists—see how-to: TanStack SSR with Axum.

vox-codegen-html reconciliation

The name appears in historical docs and Ludus quests; no crate ships under crates/vox-codegen-html in this repository. Canonical HTML-ish output:

  • vox-ssg — static shells under target/generated/public/ssg-shells/
  • React + Vite — primary UI surface per vox-web-stack.md

v0.dev (main + islands)

  • Same normalization: crates/vox-cli/src/v0_tsx_normalize.rs for named exports used by Router imports.
  • Islands: islands/src/<Name>/<Name>.component.tsx; main app: generated *.tsx next to App.tsx.
  • Env: V0_API_KEY unchanged.