Início tecnologia

O pnpm 12 troca o motor para Rust e acelera em 90%

O pnpm 12 chegou à versão estável com o motor reescrito em Rust e a promessa de instalar pacotes até 90% mais rápido. Segundo o mantenedor Zoltan Kochan, a atualização não deve exigir uma adaptação significativa: comandos, opções, configurações e o formato do lockfile do pnpm 11 continuam iguais, e a documentação cobre as duas versões. O lançamento acompanha a adoção de linguagens nativas em ferramentas de desenvolvimento, movimento que também trouxe novidades como a Cline CLI com integração nativa ao Ollama.

pnpm 12 com motor em Rust
Imagem gerada usando o Magnific

Nos testes internos do projeto, a instalação de um pacote sem cache levou 5,19 segundos com o pnpm 12, contra 8,22 segundos no pnpm 11 e 47,7 segundos no npm. O resultado representa uma redução de 36,8% em relação à versão anterior e de 89,1% em comparação com o gerenciador padrão do Node.js. Com o pnpr, servidor de registro também escrito em Rust, o mesmo teste terminou em 3,37 segundos.

A reescrita remove o launcher Node.js e transforma o pnpm em um binário nativo, vinculado estaticamente. Com isso, o programa deixa de depender das bibliotecas libatomic1 e libstdc++6, exigidas pelo executável do pnpm 11 em imagens Linux mínimas. Quem já usa a ferramenta pode atualizar com o comando pnpm self-update next-12, pois a versão 12 ainda está no canal de distribuição next-12.

Para equipes brasileiras, a diferença aparece principalmente onde o tempo de build pesa: monorepos, pipelines de CI/CD e instalações repetidas podem economizar minutos a cada execução. Isso reduz o tempo de feedback e o gasto com infraestrutura. A comunidade NodeBR, com mais de 4 mil membros no Meetup, é o principal ponto de discussão dessas mudanças no país. A adoção também chega pelas imagens de contêiner.

Versões do pnpm 11 e pnpm 12: qual usar?

Para quem segue o fluxo padrão, a troca deve ser simples. O projeto foi desenhado para que o pnpm 12 mantenha o mesmo lockfile, as mesmas configurações e os mesmos comandos. Em testes da Socket com um workspace de 21 projetos e 1.670 pacotes do Turborepo da Vercel, as reduções medianas ficaram entre 64,4% e 90,5% em relação à linha anterior.

Compatibilidade não significa que tudo permaneça idêntico. A instalação com pnpm install –resolution-only foi removida e substituída por pnpm peers check. O pnpm-workspace.yaml agora valida chaves desconhecidas, e dependências Git privadas em servidores SSH precisam ser reescritas para a URL canônica HTTPS. Lockfiles antigos continuam funcionando, exceto em projetos com ciclos de dependências. Nesses casos, a próxima resolução faz uma alteração única.

Rust na cadeia do JavaScript

O pnpm faz parte de uma mudança mais ampla nas ferramentas do ecossistema. Escrito em Go, o esbuild reduziu o tempo de build de 41,21 segundos no cenário oficial do Webpack para 0,39 segundo. O Biome reúne formatter e linter em um executável independente. O Rolldown promete desempenho de 10 a 30 vezes superior ao do Rollup nos casos comparados pela documentação. Já o Oxc anuncia um linter 50 a 100 vezes mais rápido que o ESLint, segundo números próprios.

No caso do pnpm, a reescrita em Rust atinge o núcleo de instalação, resolução e materialização de dependências. O JavaScript continua no centro do projeto. A comparação com Bun e Yarn foi retirada dos benchmarks públicos por problemas no método de teste. Por isso, a promessa de 90% é a referência apresentada no anúncio, não uma medição universal. Os resultados variam conforme o sistema operacional, o sistema de arquivos e a forma de linkagem dos pacotes.

Como o binário nativo dispensa até o Node.js para funcionar, o pnpm 12 muda o motor sem alterar o fluxo de trabalho. Para quem já usa a ferramenta, essa é a parte mais simples da atualização.

Fonte: pnpm | The Register | InfoQ