Vercel Labs ha publicado scriptc, un compilador de TypeScript a nativo con licencia Apache-2.0 alojado en GitHub. Compila TypeScript sin modificar — verificado por el compilador TypeScript real — en ejecutables nativos autocontenidos, sin Node, sin V8 y sin motor JavaScript en el binario por defecto. Un programa compilado ocupa unos 170-200 KB con un arranque de aproximadamente 2,4 ms, frente a ~47 ms de Node; el consumo típico de memoria (RSS) es de 1-4 MB frente a 67-116 MB de Node.

El compilador clasifica cada construcción en tres niveles explícitos: compilado estáticamente (el modo por defecto), ejecutado dinámicamente mediante un motor quickjs-ng incrustado (~620 KB, activable con --dynamic) para el JS distribuido por dependencias npm o código tipado con any, y rechazado con un código de error específico, un marco de código y normalmente una sugerencia de reescritura. El comando `scriptc coverage` informa qué sentencias compilan estáticamente y qué bloqueos quedan. Los valores que cruzan de dinámico a estático se validan en tiempo de ejecución: un tipo mentiroso lanza un TypeError capturable en lugar de corromper memoria.

La superficie estática cubre clases con herencia simple y dispatch dinámico, closures, genéricos monomorfizados, uniones discriminadas, async/await sobre fibras stackful, excepciones, desestructuración, iteradores, template literals y expresiones regulares exactas según ECMAScript. La biblioteca estándar incluye cadenas UTF-16 exactas, arrays/Maps/Sets fieles a JS, JSON con casts validados en tiempo de ejecución, Math, typed arrays, Buffer y jerarquías de Error tipadas. Gran parte de la API de Node está soportada — fs, path, process, child_process, os, crypto, url, zlib, timers — además de la pila de servidor (net, http, https, tls con mbedTLS incluido, dgram, dns, fs.watch, readline) y fetch con el subconjunto web WHATWG sobre la pila net/TLS nativa. Con --dynamic, los paquetes npm se resuelven con el algoritmo de Node y se incrustan en la compilación; los binarios nunca leen node_modules en tiempo de ejecución.

La corrección se garantiza de dos maneras: un corpus de pruebas diferenciales de más de 800 programas se ejecuta tanto en Node como en binario nativo con coincidencia byte a byte de stdout, stderr y códigos de salida; y todo el corpus se reejecuta bajo AddressSanitizer con auditoría de recuento de referencias, donde fugas y use-after-free son fallos de build. Las divergencias deliberadas respecto a Node (unas decenas, sobre todo en internas de temporización y propiedades de objetos de error) están documentadas y numeradas; nada diverge en silencio. El formato de números es shortest-roundtrip, verificado por fuzzing contra Node con un millón de doubles.

Las válvulas de escape incluyen comptime(() => ...) para evaluación en tiempo de compilación, un FFI nativo (--ffi) que vincula declaraciones TypeScript de solo firma a llamadas C ABI, y casts verificados donde JSON.parse(...) as Config inserta una validación en tiempo de ejecución que nombra la ruta conflictiva. Arquitectónicamente, tsc analiza y verifica tipos hacia un IR tipado, desde el cual un backend LLVM (por defecto) o un backend C de referencia legible genera código compilado con clang. La instalación se hace con `npm install -g scriptc`; se requiere clang, macOS arm64 es la plataforma principal, y los binarios de Linux y Windows se generan por compilación cruzada con sus propias lanes de pruebas diferenciales. El proyecto es joven pero ya ha atraído atención, con 750 estrellas en GitHub.