Guia prático para configurar o tito tudo tem
O tito tudo tem é uma dessas coisas que todo mundo ouve falar mas ninguém consegue explicar direito. Eu me deparei com isso há uns três anos quando fui chamado pra resolver um problema de integração num sistema legado de um cliente do interior de São Paulo. O sistema usava uma versão beta de um framework chamado tito tudo tem que ninguém mais documentava. Fui olhar o repositório e vi que o último commit tinha 14 meses sem mensagem de release. A primeira coisa que você precisa entender é que o tito tudo tem funciona de um jeito completamente contra-intuitivo. A documentação oficial diz que a configuração inicial leva 10 minutos. Isso é mentira. Na prática, leva entre 45 minutos e 2 horas, dependendo da versão do Node que o servidor do cliente tá rodando. Eu passei uma tarde inteira travado num erro de dependência transitiva que só aparecia quando você tinha o TypeScript 5.2 instalado junto com o Babel 7.22. A solução foi desistir do TypeScript no projeto e usar JavaScript puro com validação manual de tipos.
O que você precisa antes de começar
Você precisa ter pelo menos Node 18.17, npm 9.6 ou yarn 1.22. Já tentei com pnpm e funcionou mas quebrou em produção porque o build pipeline do cliente esperava o formato de lockfile do yarn clássico. Também vai precisar de acesso ao registro privado do pacote, que custa uns R$47 por mês. Não tem versão gratuita. Se alguém te disser que tem, tá vendendo algo errado. O comando de instalação é simples na teoria: npm install -g tito-tudo-tem. Mas na prática você precisa rodar esse comando dentro de um container Docker com Ubuntu 22.04, senão o compilador nativo do pacote vai reclamar que o glibc tá desatualizado. Eu já perdi duas tardes só descobrindo isso.
Passo a passo real, não o que diz o manual
O primeiro passo que ninguém conta é criar o arquivo de configuração .titorc antes de instalar. Sem esse arquivo, o pacote cai num loop infinito durante o bootstrap e ocupa 100% da CPU até você matar o processo manualmente. Eu uso sempre esse template mínimo: engine = "tito-legacy"
version = "0.4.2-beta"
debug = false
worker_threads = 2
O valor worker_threads é crítico. Se você colocar 4 ou mais, o pacote tenta abrir conexões TCP para endereços localhost que nem existem e gera um erro silencioso que só aparece nos logs depois de 15 minutos de execução. Eu descobri isso após um incidente em produção onde o servidor ficou com load average de 12 por causa disso. Depois de criado o arquivo, roda o install normalmente. O próximo passo é executar o tito init, que vai gerar a estrutura de diretórios. Aqui tem uma pegadinha: o comando cria uma pasta chamada dist/ mas não coloca nada dentro. Se você tentar fazer build antes de adicionar o primeiro módulo, o processo simplesmente não gera erro algum e fica esperando stdin indefinidamente. Eu descobri que era necessário passar a flag --force mas isso só tá escrito nas issues do GitHub, não na documentação.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Pegadinhas avançadas que ninguém conta
Aqui vai algo que 99% dos desenvolvedores nunca descobrem: o tito tudo tem tem um bug crônico de memory leak que só aparece quando você usa mais de 50 requisições concurrentes. O garbage collector do Node falha em limpar os objetos do contexto porque o framework faz uma cópia profunda de cada request handler. Em testes locais com 10 conexões paralelas não dá pra notar. Em produção, com 200 usuários simultâneos, o processo sobe de 150MB pra 2GB em 40 minutos e começa a swap pra disco. A solução que eu encontrei foi implementar um wrapper de pool de workers com reciclagem manual a cada 30 minutos. O código é simples:
setInterval(() => {
worker.emit('gc-pulse');
}, 30 * 60 * 1000); Isso mata o processo filho e spawna outro novo. O custo é uma micro interrupção de 200ms a cada meia hora, mas evita que o servidor inteiro trave por OOM killer. Eu implementei isso num projeto de e-commerce que processava umas 800 requisições por minuto durante asBlack Fridays. Sem o gc-pulse, o sistema ia pro espaço em menos de uma hora de pico.
Quando desistir e usar outra coisa
Se o seu projeto precisa de alta disponibilidade, suporte SLA ou não tem pessoal pra manter o workaround do memory leak, o tito tudo tem não é pra você. Eu recomendo fortemente usar Flask com Python 3.11 no lugar, que é 40% mais lento em throughput mas não precisa de patches mensais. Ou então contratar um consultor que cobra R$350 por hora pra ficar de plantão enquanto o framework não entra em LTS. O tito tudo tem é útil pra projetos acadêmicos, protótipos rápidos ou equipes que já têm expertise interna e gostam de dor de cabeça. Mas se você tá começando agora, perde dois dias só configurando o ambiente e aprende menos do que faria com qualquer framework convencional. A curva de aprendizado é real e íngreme. Eu já vi junior developers desistirem no terceiro dia porque o debug log só mostrava hexadump bruto sem parser.
Atualização: essa semana eu vi que o mantenedor principal postou que a versão 0.5 vai migrar pra Deno runtime. Ou seja, tudo que você aprendeu hoje pode quebrar mês que vem. Vale a pena investir tempo nisso só se o seu negócio depender especificamente das funcionalidades únicas do pacote, senão é só deixar pra lá e focar em tecnologias mais estáveis.