A busca por eliminar o overhead de máquinas virtuais na execução de TypeScript avançou para a camada de compilação AOT nativa. Criado pela Vercel Labs, o projeto experimental scriptc propõe uma abordagem arquitetural distinta dos empacotadores tradicionais: em vez de distribuir a máquina virtual V8 completa com o código-fonte empacotado, o compilador traduz construções estáticas de TypeScript diretamente para Representação Intermediária LLVM (LLVM IR) e módulos WASI Preview 1, utilizando um backend C/LLVM.12

O modelo de distribuição tradicional vs. Compilação AOT
No ecossistema JavaScript e TypeScript tradicional, a geração de binários executáveis sempre foi sinônimo de encapsulamento de runtime.5 Para que um arquivo .ts ou .js seja executado como um binário autocontido, ferramentas consolidadas agrupam o interpretador (V8 no Node.js e Deno ou JavaScriptCore no Bun), as bibliotecas base em C++ e um sistema de arquivos virtual (VFS) com o código serializado.734
Embora esse modelo garanta compatibilidade integral com a semântica dinâmica do ECMAScript, ele impõe restrições estruturais de engenharia:
- Inicialização da VM: Toda invocação exige o ciclo de bootstrap do motor JavaScript (como o V8), alocação inicial de heaps de isolamento e configuração do coletor de lixo (garbage collector).18
- Footprint do Runtime: A inclusão dos interpretadores e dos componentes de runtime eleva o consumo de memória base e o tamanho final do artefato distribuído.17
- Compilação JIT em Ambientes Efêmeros: Em ferramentas de linha de comando (CLIs) ou microsserviços de curta duração, o motor muitas vezes encerra a execução antes que as otimizações do compilador JIT (Just-In-Time) entrem em regime estável.8
O scriptc investiga a hipótese de que o subconjunto tipado e estático do TypeScript contém informação suficiente para permitir a compilação antecipada direta para linguagens intermediárias de baixo nível.16
Arquitetura do scriptc: do TypeScript ao LLVM IR
O projeto reutiliza a API oficial do compilador TypeScript para análise sintática e verificação de tipos, construindo sobre essa árvore sintática abstrata (AST) um gerador de código para a infraestrutura do LLVM:16
┌─────────────────────────┐
│ Código TypeScript (.ts) │
└────────────┬────────────┘
│ Parser & Type Checker Oficial
▼
┌─────────────────────────┐
│ AST Tipada e Estática │
└────────────┬────────────┘
│ scriptc (Emissão AOT)
▼
┌─────────────────────────┐
│ Código C / LLVM IR │
└────────────┬────────────┘
│ Clang / Zig CC
┌──────┴──────┐
▼ ▼
┌───────────┐ ┌───────────┐
│ Binário │ │ WASI │
│ Nativo │ │ Preview 1│
└───────────┘ └───────────┘
O pipeline de compilação opera através dos seguintes componentes documentados no repositório oficial:1
- Análise de Cobertura Estática (
scriptc coverage): O utilitário analisa o código-fonte e calcula a proporção de tipos e expressões que podem ser compiladas de forma puramente estática para LLVM, emitindo diagnósticos para construções dinâmicas que não possuem mapeamento AOT direto.1 - Geração de Código Intermediário: O compilador emite código C estruturado e representações intermediárias que interagem com um runtime C minimalista (
runtime.c), eliminando a infraestrutura de objetos dinâmicos pesados do V8.1 - Backend de Compilação Nativa: O código gerado é compilado para código de máquina nativo utilizando o
clanginstalado no sistema operacional para compilações locais, ou uma toolchain externa como ozig cc(configurado via variável de ambienteSCRIPTC_CC=zigcc) para cross-compilação entre arquiteturas e para o targetwasm32-wasi.1

Compilação para WebAssembly e o Modelo WASI
Além da geração de binários nativos para o sistema operacional hospedeiro, o scriptc suporta como target formal a especificação WASI Preview 1 (WebAssembly System Interface).12
WASI define uma interface de sistema operacional padronizada e baseada em capacidades (capability-based security) para módulos WebAssembly, permitindo que o binário compile para uma arquitetura independente de plataforma com restrições explícitas de acesso a arquivos, rede e variáveis de ambiente.2
Para compilar para WASI, o procedimento oficial documentado pelo projeto requer a definição explícita do compilador C externo e do target de compilação via variáveis de ambiente:1
# Compilação de TypeScript para módulo WebAssembly WASI via Zig CC
SCRIPTC_CC=zigcc SCRIPTC_TARGET=wasm32-wasi scriptc build src/agent-tool.ts --no-keep-c -o dist/agent-tool.wasm
# Execução isolada em host WASI compatível (exemplo: Wasmtime)
wasmtime run dist/agent-tool.wasm
Diferente do WebAssembly puramente web — que interage com APIs do navegador através do DOM e de bindings JavaScript —, módulos WASI operam sobre uma interface de sistema operacional padronizada e dependem de um host runtime compatível (como Wasmtime ou Wasmer) para fornecer as chamadas de sistema e capacidades autorizadas.2
O modo híbrido: Fallback dinâmico com QuickJS-ng
Uma das barreiras clássicas na compilação AOT de código JavaScript e TypeScript reside no uso de recursos dinâmicos da linguagem, como manipulação em tempo de execução de protótipos, eval, reflexão arbitrária e dependências externas do ecossistema npm que dependem de comportamentos não estáticos.
Para viabilizar a execução de projetos heterogêneos sem limitar o desenvolvedor exclusivamente a um subconjunto restrito, o scriptc implementa a flag experimental --dynamic:1
- Ramo Estático AOT: Blocos tipados e funções puramente estáticas continuam sendo compilados diretamente para LLVM IR e otimizados pelo compilador de backend.1
- Avaliação Dinâmica com QuickJS-ng: Trechos de código dinâmicos ou dependências que exigem interpretação flexível são delegados ao motor QuickJS-ng, um interpretador JavaScript ANSI C compacto embutido no binário final.19
Esse modelo em dois níveis assegura que trechos estáticos obtenham os benefícios de compilação nativa sem que construções dinâmicas impeçam a geração do binário.

Comparativo Estrutural de Execução no Ecossistema TypeScript
A comparação técnica entre as abordagens consolidadas reflete trade-offs entre portabilidade dinâmica e compilação antecipada:
| Abordagem | Mecanismo de Execução | Componente de Runtime Embutido | Target de Saída | Modelo de Sandbox |
|---|---|---|---|---|
Node.js (node) | Interpretador / JIT (V8) | V8 VM completa com libuv | Execução de fonte no runtime (sem compilação AOT) | Processo de SO (acesso irrestrito ao host) 78 |
Deno (deno compile) | V8 em bundle autocontido | V8 VM + Deno runtime + VFS | Binário executável autocontido | Sandbox granular baseado em flags (--allow-net, etc.) 3 |
Bun (bun build --compile) | JavaScriptCore em bundle | JavaScriptCore + Bun runtime | Binário executável autocontido | Processo de SO 4 |
| pkg (Vercel) | Node.js em bundle VFS | Node.js runtime completo | Binário executável autocontido | Processo de SO 5 |
TypeScript nativo (scriptc) | Compilação AOT direta | Runtime C enxuto (runtime.c) | Executável nativo (Mach-O, ELF, PE) | Processo de SO 1 |
TypeScript WASI (scriptc) | Compilação AOT WebAssembly | Runtime C + WASI Preview 1 bindings | Módulo .wasm (WASI) | Capability-based (definido pelo host WASI) 12 |
Implicações Arquiteturais para Ferramentas de Agentes no MaxVision Code
Na engenharia de sistemas autônomos e ferramentas operadas por agentes (como os MCPs e utilitários auxiliares do MaxVision Code), o isolamento de código gerado e o tempo de bootstrap de processos efêmeros constituem áreas ativas de exploração arquitetural.
Hipótese de Sandbox Capability-Based para Agentes
Na visão de arquitetura do MaxVision Code, a compilação de ferramentas utilitárias para o target wasm32-wasi representa uma hipótese promissora para execução segura de rotinas automatizadas:
- Restrição Estrita de Capacidades: Em vez de conceder acesso total ao sistema de arquivos do hospedeiro, o host de execução (como o Wasmtime) concede permissões explícitas apenas aos diretórios necessários para a tarefa do agente.2
- Eliminação do Aquecimento de VM: Tarefas efêmeras de verificação sintática ou formatação compiladas como binários AOT não necessitam inicializar a máquina virtual completa do Node.js a cada execução.
# Experimento de execução com sandbox capability-based restrito
# 1. Compilação do script de validação para WASI Preview 1
SCRIPTC_CC=zigcc SCRIPTC_TARGET=wasm32-wasi scriptc build src/agent-tool.ts --no-keep-c -o dist/agent-tool.wasm
# 2. Invocação no host Wasmtime com mapeamento restrito de diretório isolado
wasmtime run --dir=/tmp/agent-scratch::/workspace dist/agent-tool.wasm
Limitações Técnicas e Requisitos de Ambiente
O scriptc encontra-se em estágio experimental pela Vercel Labs e possui requisitos e fronteiras técnicas bem delimitados:1
- Pré-requisitos de Toolchain: Exige Node.js 24 ou superior no ambiente de compilação para execução do CLI,
clangpara compilações locais do host ezig ccpara compilação cruzada ou emissão de artefatos WASI.1 - Fronteiras de Compatibilidade e Targets: O modo
--dynamicembute o interpretador QuickJS-ng para empacotar pacotes npm e trechos dinâmicos comany, sem suporte a leitura denode_modulesem tempo de execução.19 Já no target WebAssembly (wasm32-wasi), chamadas de rede/fetch, processos-filhos, captura de sinais e monitoramento de sistema de arquivos falham antes da linkedição devido às fronteiras do modelo WASI Preview 1.12
À medida que projetos de compilação AOT como o scriptc e iniciativas do ecossistema TypeScript evoluem, o desenvolvimento em TypeScript expande seu alcance de runtimes de interpretação dinâmica para a geração de código nativo e WebAssembly de alta densidade.
Fontes primárias e referências técnicas
Footnotes
-
Vercel Labs — Repositório oficial do
scriptc(TypeScript to Native/WASI Compiler). github.com/vercel-labs/scriptc. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13 ↩14 ↩15 ↩16 ↩17 ↩18 ↩19 ↩20 ↩21 -
WebAssembly System Interface (WASI) — Especificação técnica oficial da arquitetura WASI Preview 1 e modelo de segurança capability-based. wasi.dev. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Deno Manual — Documentação do comando
deno compilee modelo de permissões e sandbox. docs.deno.com/runtime/manual/tools/compiler/. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3 -
Bun Documentation — Documentação oficial do utilitário
bun build --compilepara binários autocontidos. bun.sh/docs/bundler/executables. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3 -
Vercel pkg — Repositório e documentação do utilitário de empacotamento de runtime Node.js
pkg. github.com/vercel/pkg. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3 -
The LLVM Project — Documentação da infraestrutura de compilação LLVM IR e backend Clang. llvm.org. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3
-
Node.js Foundation — Documentação de arquitetura e APIs do runtime Node.js. nodejs.org/docs/latest/api/. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3
-
V8 JavaScript Engine — Documentação de arquitetura de compilação JIT, interpretador Ignition e compilador Turbofan. v8.dev. Consultado em 15 de agosto de 2026. ↩ ↩2 ↩3
-
QuickJS-ng Project — Implementação e documentação do interpretador JavaScript leve em ANSI C para embutimento. github.com/quickjs-ng/quickjs. Consultado em 15 de agosto de 2026. ↩ ↩2