Por que o T3 Chat Migrou de Next.js para TanStack Start
Resumo
O T3 Chat deixou de usar Next.js. A migração foi feita por Julius (@jullerino) e Mark (@r_marked), resultando no maior app em TanStack Start já colocado em produção. O processo envolveu muitos problemas inesperados, principalmente relacionados a bundling, e exigiu uma semana inteira de ajustes e noites mal dormidas. O plano agora é garantir estabilidade e, depois disso, voltar a entregar novas funcionalidades.
Razões para a migração
1. Uso mínimo de Next.js
O projeto quase não usava Next. Por ser um app muito dinâmico, soluções improvisadas foram feitas para usar React Router dentro de Next. Isso gerou uma série de problemas e tornou o debugging difícil.
O motivo de ter usado Next no começo foi simples: era a forma mais fácil de fazer deploy de um frontend React complexo junto com um backend TypeScript. Essa avaliação continua válida.
2. A migração não reduziu dependência da Vercel
A aplicação continua sendo hospedada na Vercel. Migrar um app grande em TanStack Start foi difícil, mas a equipe conseguiu com ajuda de recursos como rollouts e do suporte de funcionários da Vercel, como Pooya (@pi0) e Tom (@tomlienard).
Para o projeto, a Vercel ainda é a melhor plataforma possível. O uso de Fluid Compute é considerado essencial.
3. A escolha por TanStack Start foi da equipe
O processo de avaliar alternativas começou meses antes. Foram feitos testes com:
- Vite+Hono (Cloudflare)
- Remix
- TanStack (inclusive com ajuda direta de Tanner [@tannerlinsley])
Na época, a conclusão foi que não valia migrar ainda.
Quando Julius entrou na equipe em tempo integral, ele decidiu que TanStack Start era a escolha mais alinhada com o longo prazo. Ele conduziu a migração praticamente sozinho.
Algumas decisões — sobretudo em SSR — não foram exatamente como Theo (@theo - criador do T3 Chat) faria, mas ele destaca que esse não é mais o papel dele: ele contratou uma equipe de alto nível e deve confiar nela.
4. O principal motivo: depuração quase impossível
- A combinação de hacks, camadas extras e um stack atípico dificultava identificar a origem dos erros
- A reescrita do backend em Effect reduziu a complexidade e melhorou muito a observabilidade, corrigindo cerca de 60% dos bugs
- Os 40% restantes estavam tão enraizados na arquitetura antiga que eram quase impossíveis de rastrear
- A porta para TanStack Start eliminou metade desses problemas e tornou o resto muito mais fácil de depurar e corrigir
A intenção ao compartilhar essas informações
Theo explica que não está divulgando tudo isso para que as pessoas imitem as decisões da equipe. A ideia é permitir que outros aprendam com o processo de escolhas técnicas. Ele afirma estar seguro do caminho tomado e confia plenamente no time.
Next.js ajudou o T3 Chat a chegar até aqui, mas a mudança era inevitável e estava sendo planejada desde abril. Agora que migrações fundamentais — banco de dados, autenticação e Effect — foram concluídas, a equipe pode focar novamente em recursos.
Sobre as reações externas
Theo considera estranha a quantidade de especulações sobre as escolhas do stack. Ele compartilha essas informações porque sente falta desse tipo de transparência quando precisa tomar decisões semelhantes.
Segundo ele, muitas equipes estão experimentando novas tecnologias, mas quase nenhuma relata publicamente seus processos.
Críticas como "Theo só quer usar a tecnologia da moda" mostram falta de experiência, e ele comenta que esse tipo de comentário é comum em comunidades como o Reddit. O ponto central, para ele, não é a escolha tecnológica, mas o nível de visibilidade e transparência.
Mesmo com a hostilidade recorrente, Theo continua compartilhando esses bastidores porque muitas pessoas dizem achar útil, e isso faz valer a pena continuar.
Referências
Esse artigo é um compilado dos tweets do próprio Theo. Você pode ler as threads: