
Lovable troca Vite por servidor Rust e reduz preview de 17 para 8 segundos
{ "resumo": "## O problema: Vite em escala de sandboxes\n\nA Lovable anunciou o OJ (internamente apelidado de Orange Juice), um servidor de desenvolvimento escrito em Rust que substitui o Vite como motor dos previews da plataforma. A empresa explica que um preview da Lovable não é uma página estática: é um servidor de desenvolvimento real executando o aplicativo do usuário, com hot reloading, e o Vite era o motor por trás disso.\n\nA justificativa da troca não é uma falha do Vite, segundo a Lovable. O Vite foi projetado para um desenvolvedor em um laptop, enquanto a Lovable opera cerca de um milhão de sandboxes por dia, um preview cada, criados e destruídos constantemente. Nessa escala, os recursos que cada instância consome se tornam críticos: cada instância do Vite traz um runtime JavaScript, instala um toolchain no projeto e ocupa muita memória, o que resulta em cold starts mais lentos e um peso maior por sandbox.\n\n## O que é o OJ\n\nO OJ é um único binário Rust que executa o aplicativo da mesma forma que o Vite. Ele lê o vite.config.ts existente (ou um oj.config.ts), roda plugins reais do Vite por meio de uma ponte de compatibilidade e reimplementa componentes como React Fast Refresh e TanStack Start nativamente em Rust. O projeto se baseia em Rolldown e Oxc, as mesmas fundações Rust que o próprio Vite vem adotando. A diferença, segundo a empresa, é o grau: o Vite é uma aplicação Node.js que controla um bundler Rust, enquanto o OJ é Rust de ponta a ponta, do file watcher ao websocket, acionando um pequeno sidecar Node apenas quando os plugins ou o código de servidor do aplicativo realmente precisam de JavaScript.\n\nAs escolhas de design são motivadas pelo caso de uso de preview: compatibilidade primeiro, sem instalar toolchain no projeto e sem runtime JavaScript para controlá-lo. Além disso, o OJ foi pensado para edição por agentes, não apenas humana: como um agente escreve dez arquivos de uma vez, o file watcher, o grafo de módulos, o compilador e as hot updates formam um pipeline único e sincronizado, de modo que uma rajada de edições é consolidada em uma única atualização consistente, em vez de uma série de estados parciais.\n\n## Os números e suas ressalvas\n\nEm benchmarks, o OJ mostra cold start de 1,2s contra 4,9s do Vite em um app sintético com 10.000 componentes, com cerca de 115MB de memória contra mais de 1,5GB. No Excalidraw, os tempos foram de cerca de 0,8s contra 2,3s, com 288MB contra 2,4GB. No Twenty, um CRM com cerca de 15.000 módulos, cerca de 10,2s contra 11,3s, com 1,5GB contra 4,9GB. Os testes usaram aplicativos reais de código aberto executados sem alteração de configuração.\n\nA Lovable mantém uma ressalva: os números de velocidade não são totalmente comparáveis, porque os cold starts do Vite incluem o vite-plugin-checker, que roda o tsc em segundo plano para sobrepor erros de tipo no navegador - plugin que o OJ ainda não hospeda. Por isso, a empresa diz que o número que mais importa é a memória: o OJ serve esses apps com um terço a um oitavo da memória do Vite, o que determina quantos previews podem rodar simultaneamente.\n\n## Resultados em produção\n\nEm um experimento controlado nos previews da Lovable, o tempo total de carregamento caiu de 17,4s para 8,0s na mediana; a aquisição de sandbox caiu de 14,5s para 3,0s na mediana, quase 5x mais rápido; a porção do dev server no percentil 90 melhorou de 15,8s para 9,6s; e o processo do dev server roda com cerca de 6,5x menos memória que node/Vite antes mesmo de o app carregar. Os maiores ganhos estão exatamente em subir o sandbox e exibir o app na tela.\n\n## Rollout gradual e código aberto\n\nOs usuários não precisam fazer nada: a promessa de compatibilidade é que o app roda inalterado, e qualquer comportamento diferente deve ser reportado como bug. O OJ está sendo lançado gradualmente, em uma pequena porcentagem de previews por vez, ampliada conforme a empresa confirma que os apps continuam funcionando.\n\nO projeto nasceu como um experimento pessoal de Raphael Amorim, engenheiro da Lovable e criador do OJ, e agora foi movido para a organização da Lovable no GitHub, em github.com/lovablelabs/oj, aberto para leitura, execução e contribuição. A empresa adianta que há recursos experimentais em desenvolvimento para acelerar ainda mais os previews, sem detalhar o que virá.", "hook": "A Lovable substituiu o Vite por um servidor de desenvolvimento único escrito em Rust, chamado OJ, e o tempo de carregamento dos previews caiu de 17,4s para 8,0s na mediana. A motivação não é uma falha do Vite, mas a escala: cerca de um milhão de sandboxes por dia. O projeto foi aberto no GitHub da empresa.", "entities": ["Lovable", "OJ", "Vite"], "themes": ["engenharia-de-software", "engenharia-com-ia"], "story_key": "lovable-oj-rust-preview", "reasoning": { "story_key": "Fato canônico: Lovable troca Vite pelo servidor Rust OJ e reduz preview de 17,4s para 8,0s.", "themes": { "engenharia-de-software": "Assunto central é o motor de dev server (bundler, file watcher, hot reload, memória), craft clássico de build tooling.", "engenharia-com-ia": "O OJ é explicitamente projetado para edição por agentes com consolidação de rajadas de edições; IA é parte do caso de uso do fluxo." }, "entities": { "Lovable": "Empresa que criou e lança o OJ em seus previews.", "OJ": "O servidor Rust anunciado, protagonista do fato.", "Vite": "Ferramenta substituída, referência central dos benchmarks e da comparação." }, "excluded": { "Raphael Amorim": "Autor do artigo, excluído por regra.", "Rolldown/Oxc/Excalidraw/Twenty": "Dependências e apps de exemplo, menções secundárias." } } }