scriptc es un compilador experimental, desarrollado por vercel-labs, que traduce código TypeScript ordinario a ejecutables nativos pequeños y rápidos, sin necesidad de Node ni de un motor de JavaScript incluido en el binario. La promesa central es que el mismo TypeScript que se ejecuta sobre Node —tipado por el propio compilador de Microsoft— se compila a código nativo con un comportamiento byte a byte idéntico al del intérprete de Node.
La herramienta se instala con npm install -g scriptc y requiere clang (incluido en las Xcode Command Line Tools). Su plataforma principal es macOS arm64; los binarios para Linux y Windows se generan por compilación cruzada, cada uno verificado con su propio banco de pruebas diferenciales. Internamente, scriptc aplica un análisis estático constructo a constructo para decidir qué puede compilarse a nativo y qué no: scriptc coverage app.ts indica el porcentaje compilable y lista los bloqueos con códigos de error específicos (por ejemplo, SC1090 o SC2020).
El proyecto define tres modos siempre explícitos: compilación estática (la opción por defecto), ejecución dinámica mediante --dynamic, que incrusta el motor quickjs-ng para dependencias npm y código any, y rechazo con diagnóstico preciso cuando algo no puede bajar a nativo. Abarca gran parte del lenguaje (clases con herencia y despacho dinámico, closures, genéricos monomorfizados, uniones discriminadas, async/await sobre fibras con planificación fiel a JavaScript, excepciones con finally, destructuring, template literals, expresiones regulares) y de la biblioteca estándar (cadenas con semántica UTF-16 exacta, arrays, Maps, Sets, JSON, Math, typed arrays, Buffer, jerarquía de errores). También reimplementa superficies de Node (fs, path, process, child_process, os, crypto, url, zlib, temporizadores) y la pila de servidores (net, http, https, tls con mbedTLS, dgram, dns, fs.watch, readline), además de fetch y un subconjunto WHATWG sobre la misma pila nativa de red y TLS.
Las dependencias npm, bajo --dynamic, se resuelven con el algoritmo de Node, se tipan con sus .d.ts y se embeben en el binario, que nunca lee node_modules en ejecución. Cada cambio se valida con pruebas diferenciales (más de 800 casos, con stdout, stderr y exit codes idénticos) y con una pasada bajo AddressSanitizer y auditoría de conteo de referencias. Entre las funciones adicionales figuran comptime(() => …) para ejecutar TypeScript en tiempo de compilación y un FFI nativo (--ffi) que enlaza declaraciones TypeScript con llamadas C mediante ABI directa.
En mediciones con Apple Silicon, scriptc ofrece arranque de unos 2,4 ms frente a ~47 ms de Node, binarios de 170–200 KB en modo estático (~3 MB con --dynamic), consumo típico de 1–4 MB de RSS y semántica f64 fiel a JavaScript, con el compilado LLVM como backend por defecto y un backend en C como referencia verificable.
