Tsrs, Comprovado: migração do TypeScript 7 para Rust foi até 6,5x mais rápido que tsc (e você chega a 7.1)

tsrs é um port para Rust do compilador do TypeScript 7 que você já pode instalar pelo npm, e em nosso teste foi entre 2,9x e 6,5x mais rápido que tsc 7.0.2, com entre 2x e 4,2x menos memória. Cloudflare, VoidZero e Max Schwenk, da Owner.com, o anunciaram em 20 de outubro de 2026. O projeto se incuba dentro da toolchain Oxc e se desenvolve em colaboração com o time do TypeScript.

:white_check_mark: yoDEV Testado · 20 de outubro de 2026 Executamos tsrs 0.18.0 contra tsc 7.0.2, tsc-rs 0.7.0 e bun check 1.4.3 em zod, playwright e hono, em uma máquina Linux com 2 vCPU. Os resultados que reportamos como nossos saem desse teste.

O que é tsrs, o compilador do TypeScript em Rust?

tsrs é um substituto direto (drop-in replacement) do compilador do TypeScript 7 (tsc) e de seu servidor de linguagem, escrito em Rust. Lê seu tsconfig.json atual, emite JavaScript e declarações igual ao tsc, e aceita --watch, -b e um modo LSP para editores. Seu objetivo declarado é 100 por cento de conformidade com TypeScript, com menos memória e um type checking mais rápido.

Não é um fork. O anúncio da Cloudflare deixa claro: o time do TypeScript continua controlando o design da linguagem, e tsrs deve seguir as decisões de upstream, não tomar as suas. Hoje segue a branch principal do microsoft/TypeScript, e cada versão do pacote indica o commit que porta: 0.18.0-ts7.1.0-dev.20260929 é tsrs 0.18.0 seguindo TypeScript 7.1.0-dev.20260929.

Dois dados que convém saber desde o princípio:

  • Foi escrito por agentes de IA. Max Schwenk, Head of AI Developer Experience na Owner.com, começou no 30 de setembro se perguntando se Claude Opus 5.5 conseguia portar o compilador a partir do código em Go do TypeScript. Segundo seu próprio relato, não escreveu código ele mesmo: os agentes trabalharam com a suite de conformidade do TypeScript como especificação. No 19 de outubro o projeto passou para oxc-project/tsrs, sob Cloudflare e VoidZero.
  • Por que a Owner.com construiu. Seu código principal tem cerca de 37.000 arquivos TypeScript. Com TypeScript 7.0, um check com uma única thread levava 80 segundos e usava 19 GiB de memória. Com tsrs, Owner reporta cerca de 7 segundos em CI.

Licença: Apache-2.0, como derivado do TypeScript. O README esclarece que não é afiliado nem endossado pela Microsoft.

Como instalar tsrs?

Adicione como dependência de desenvolvimento e execute onde você executaria tsc:

pnpm add -D tsrs
pnpm exec tsrs --noEmit

Com npm, o anúncio da Cloudflare usa:

npm install tsrs
npx tsrs

Para testar sem adicionar ao projeto: pnpm dlx tsrs -p .

Comandos úteis da documentação de uso:

pnpm exec tsrs -p path/to/project           # compilar
pnpm exec tsrs -p path/to/project --noEmit  # apenas type check
pnpm exec tsrs -p . --extendedDiagnostics   # contadores e tempos
pnpm exec tsrs --version
tsrs --watch -p .                           # recompila ao salvar
tsrs --lsp -stdio                           # servidor de linguagem para o editor

O launcher do npm instala um binário nativo para sua plataforma como dependência opcional @tsrs/<os>-<arch>. Também há um playground no navegador (tsrs-playground.void.app) e um build em WebAssembly, @tsrs/wasm, para Node e navegadores.

O que ainda não faz: --init e --showConfig não são aceitos, então mantenha tsc à mão para gerar a configuração.

tsrs é mais rápido que tsc? Nosso benchmark

Sim: em nosso teste foi entre 2,9x e 6,5x mais rápido que tsc 7.0.2 (o compilador em Go, também conhecido como tsgo). O número de até 8x mais rápido com cerca de 70 por cento menos memória é o benchmark próprio da Cloudflare: tsrs contra TypeScript 7.0 com o mesmo número de workers de check. O benchmark publicado pelo projeto usou 17 projetos em uma máquina de CI com 16 vCPU e 63 GB, e o código está no repo, em bench/.

Queríamos números em uma máquina menor, então repetimos a montagem de nosso teste de bun check: os mesmos três repos, 2 vCPU, 7 GB de RAM, uma execução de aquecimento mais cinco medidas (dez em hono), mediana do tempo total e pico de memória.

Projeto tsc 7.0.2 tsrs 0.18.0 tsc-rs 0.7.0 bun check 1.4.3
zod (593 erros) 5,82 s · 1.118 MB 0,90 s · 266 MB 1,46 s · 632 MB 1,42 s · 192 MB
playwright (5.664 erros) 3,12 s · 581 MB 0,73 s · 195 MB 1,19 s · 417 MB 1,05 s · 189 MB
hono, config de build (limpo, 364 arquivos) 0,32 s · 98 MB 0,11 s · 49 MB 0,10 s · 103 MB —

Frente a tsc 7.0.2, tsrs foi:

  • zod: 6,5x mais rápido, 4,2x menos memória
  • playwright: 4,3x mais rápido, 3,0x menos memória
  • hono: 2,9x mais rápido, 2,0x menos memória

Duas coisas chamaram nossa atenção. Primeiro, o ganho não é apenas paralelismo: com uma única thread de check em ambos (--checkers 1), tsrs continuou sendo 4,8x mais rápido em zod e 3,3x em playwright. Segundo, se sustenta em projetos pequenos. Em nosso teste anterior, bun check foi mais lento que tsc no build limpo de hono; tsrs foi quase três vezes mais rápido com a mesma configuração.

tsrs ou bun check?

tsrs foi mais rápido que bun check nos dois repos grandes. Em memória ficaram parejos em playwright, mas em zod tsrs usou mais (266 MB frente a 192 MB). Se a memória é mais importante que a velocidade para você, --checkers 1 baixou tsrs para 195 MB em zod e se manteve abaixo de 1,2 segundo.

Quais flags controlam a velocidade e a memória?

tsrs adiciona algumas opções de desempenho aos flags padrão do tsc:

  • --checkers N define quantas threads de check usar. Por padrão, uma por núcleo até 16.
  • --singleThreaded usa uma única thread, para o menor consumo de memória.
  • --maxMemory <size> (por exemplo 12G, apenas com --noEmit) mantém o processo perto desse limite, trocando CPU por memória.
  • --checkerCostCache <file> lembra quanto levou cada arquivo para distribuir melhor as threads na próxima execução.

tsrs dá os mesmos erros que tsc? A mudança para TypeScript 7.1

Sim, desde que você o compare com a versão do TypeScript que ele realmente porta, e aí está o detalhe: tsrs segue TypeScript 7.1-dev, não 7.0.

Em zod, tsrs e tsc 7.0.2 reportaram os mesmos 593 erros, linha por linha. Em playwright, ambos reportaram 5.664 erros, mas 20 apareceram em outra linha e coluna. Na configuração de build de hono, tsc 7.0.2 terminou limpo e tsrs reportou dois erros novos TS7031 (any implícito).

Depois executamos typescript@7.1.0-dev.20260930.4, o build do commit que tsrs porta. Sua saída coincidiu exatamente com tsrs em ambos os repos. As diferenças são comportamento do TypeScript 7.1, não bugs de tsrs.

Na prática: mudar tsc 7.0 por tsrs em seu CI significa passar seu type check para a semântica de 7.1-dev. Um repo que hoje está limpo pode começar a falhar. Teste primeiro em local e trate como uma atualização, não como uma mudança transparente.

Um detalhe a mais para CI: com erros, tsc 7.0.2 saiu com código 1 e tsrs com código 2. TypeScript 7.1-dev também devolve 2. Os dois são diferentes de zero, então o passo de CI falha igual, mas um script que compare exatamente com 1 não.

O próprio projeto diz que quer reduzir as diferenças que ficam, como a ordem em que os diagnósticos são impressos, antes de uma versão estável. Para a comparação mais próxima com o compilador em Go, o README sugere --checkerAssignment go --noLazyMembers.

tsrs vs tsc-rs: qual port do TypeScript para Rust usar?

São dois pacotes de npm distintos com nomes quase idênticos, e é fácil confundi-los.

tsrs tsc-rs
Pacote npm tsrs tsc-rs
Repo oxc-project/tsrs pingdotgg/ts-rust
Por trás Oxc, Cloudflare, VoidZero; nasceu na Owner.com pingdotgg (Theo Browne)
Licença Apache-2.0 MIT AND Apache-2.0 (npm)
Porta TypeScript 7.1-dev TypeScript 7.1-dev
Como foi escrito Agentes de IA (Claude Opus 5.5) Agentes de IA: primeiro modelos da OpenAI, depois Claude Opus 5.5

Os dois são ports escritos por LLM a partir do mesmo compilador em Go. O README de tsc-rs conta que a primeira tentativa com modelos da OpenAI custou mais de 400.000 dólares em tokens a preço de API e ficou presa perto de 84 por cento de compatibilidade, e que o reinício com Claude Opus 5.5 levou cerca de duas semanas e cerca de 24.000 dólares.

Em nosso teste, os dois deram diagnósticos idênticos nos três repos. tsrs foi cerca de 1,6x mais rápido nos repos grandes e usou cerca da metade de memória; em hono empataram em tempo e tsrs usou a metade de memória.

A escolha pode não durar. O anúncio da Cloudflare diz que estão trabalhando com Theo Browne para mesclar tsc-rs e tsrs em um único pacote. No 20 de outubro de 2026, essa mesclagem está anunciada mas não publicada, e o README de ts-rust ainda não a menciona.

tsrs está pronto para produção?

É uma versão experimental com um caminho claro para uma estável. Cloudflare a chama de experimental; o README, por sua vez, nomeia limitações concretas em vez de um aviso geral, e diz que em seus testes em projetos existentes não encontraram um bug de correção. O objetivo declarado é uma versão estável sobre TypeScript 7.1 com 100 por cento de conformidade.

Antes de adotar:

  • Issues abertos, PRs fechados. O tracker aceita relatos de bugs com uma reprodução mínima; os mantenedores dizem que não têm capacidade para revisar pull requests.
  • Fixe a versão. Cada versão do pacote indica o commit do TypeScript que segue, então atualizar pode mudar os diagnósticos.
  • Bom primeiro uso: um check local ou em pre-commit, ou um job de CI que corra junto a tsc até que você confie na saída.
  • Para onde vai: Cloudflare menciona regras de lint com informações de tipos em Oxlint, e a compilação de Rust para WebAssembly é uma das razões declaradas para escolher Rust em vez de Go: rodar uma toolchain completa do TypeScript no navegador ou em um Worker isolado.

E você? O que usa hoje para o type check em seu CI, e quanto tempo leva?

Qual type checker você usa hoje em seu CI?
  • tsc 7 (tsgo)
  • bun check
  • Vou testar tsrs
  • Prefiro outra opção (conte qual)
0 votantes

Comente abaixo ou, se este artigo chegou por email, responda diretamente ao email: sua resposta é publicada aqui.

Relacionado: bun check vs tsc: testamos o novo type checker do Bun em zod, playwright e hono