TanStack Start: primeiros passos
O pessoal do TanStack lançou o TanStack Start, um framework full stack para React que é uma alternativa direta ao Next. Testei na prática e vou te mostrar como ele funciona.
O pessoal do TanStack lançou um framework novo chamado TanStack Start. É basicamente um concorrente direto do Next, um framework full stack pra React.
Vou comentar algumas coisas conforme a gente for testando, com o objetivo de te passar uma visão geral sobre ele.
O TanStack Start usa o TanStack Router por baixo dos panos. O time do TanStack tem várias bibliotecas diferentes (Router, Query e outras), o que também gera uma diversificação grande de ferramentas pra escolher.
Criando o projeto
Pra criar um projeto novo:
npm create tanstack@latestO assistente de criação vai perguntar várias coisas: nome do projeto, se você quer usar Tailwind, se quer algum linter (Biome ou ESLint), e se quer já integrar serviços prontos como Clerk (autenticação), Convex, Neon (banco de dados), Sentry (observabilidade), entre outros. Dá pra deixar tudo isso de lado no começo e ir adicionando depois.
Depois de criado, é só entrar na pasta e rodar:
npm run devO projeto sobe com Vite, na porta 3000, com uma tela padrão de boas-vindas.
Como funciona o roteamento
O roteamento do TanStack Start é baseado em arquivos, só que de um jeito um pouco diferente do Next. Aqui, dentro do próprio arquivo da rota, você configura o comportamento dela com uma função chamada createFileRoute.
export const Route = createFileRoute("/")({
component: Home,
});Existe também um arquivo de rota raiz, o __root, que funciona como uma configuração geral pra todas as páginas: meta tags, título, CSS global e o layout (HTML, head, header, etc). É meio parecido com o layout.tsx do Next, só que junto com a configuração do próprio router.
Client first, diferente do Next
Uma diferença importante de filosofia: o TanStack Start segue o comportamento padrão do React, que é client first. Ou seja, por padrão os componentes rodam no cliente, e você decide o que roda no servidor.
O Next é o oposto: os componentes são server component por padrão, e você usa "use client" quando quer rodar algo no navegador. Se você já tem experiência com Next, essa é a principal mudança de mentalidade ao migrar pra cá.
Server functions, não server components
O TanStack Start ainda não suporta server components. O que ele tem são server functions, o equivalente às server actions do React/Next: funções que você marca pra rodar no servidor.
export const getPosts = createServerFn({ method: "GET" }).handler(async () => {
return readPosts();
});Você cria a função com createServerFn, define o método (GET, POST, etc) e passa um handler, que é a função de verdade que vai executar.
Loader: carregando dados antes de renderizar
Um dos recursos mais interessantes é o loader. Ele é uma função que roda antes do componente da rota ser renderizado, buscando os dados necessários pra tela.
export const Route = createFileRoute("/blog")({
loader: () => getPosts(),
component: Blog,
});
function Blog() {
const posts = Route.useLoaderData();
return (
<ul>
{posts.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}Como o loader roda antes da página abrir, quando o componente é renderizado os dados já estão disponíveis. Não existe aquele momento de tela vazia com loading pra depois carregar o conteúdo, como acontece quando você busca dados só no cliente.
Organizando o código
Pra não deixar tudo espremido no mesmo arquivo de rota, dá pra separar em camadas: uma pasta functions com as server functions, uma pasta services com as funções puras que fazem a requisição de fato, e uma pasta types com os tipos. Assim a rota só chama a server function, a server function chama o service, e cada peça fica isolada.
Vale a pena testar?
O TanStack Start é um framework promissor, com bastante recurso interessante: server side rendering, streaming, DevTools próprio pra debugar as rotas. SEO também é tratado, não é motivo pra descartar o framework.
Se você já manja de Next, o principal ajuste de cabeça é lembrar que aqui o padrão é client first, e que server function não é a mesma coisa que server component.
Leia também
- RBAC: Níveis de Acesso no seu Projeto30 de julho de 2026 · 5 min
- Carregue variáveis de ambiente do jeito moderno no Node29 de julho de 2026 · 3 min
- Entenda Multi-Tenancy na prática (e na teoria)25 de julho de 2026 · 6 min
- Como fazer Deploy em Servidor do zero (Next.js + Github + PM2 + Nginx + SSL + DigitalOcean)14 de julho de 2026 · 9 min