⚡ Tecnología
Vercel acaba de enterrar a Node.js — Scriptc compila TypeScript a código nativo sin runtime
Imagina escribir TypeScript normal, sin anotaciones raras, sin dialectos nuevos. El mismo código que correrías con Node.js. Y al ejecutarlo, en lugar de esperar 100ms a que arranque el runtime, el binario se lanza en 2 milisegundos. No hay Node. No hay V8. No hay JavaScript engine. Es un ejecutable nativo de 178KB.
Así funciona Scriptc, el nuevo proyecto de Vercel Labs que acaba de explotar en Hacker News con 235 puntos y 130 comentarios. Y sí, suena a ciencia ficción — pero es real y ya puedes usarlo.
¿Qué demonios es Scriptc?
Scriptc es un compilador de TypeScript a código nativo. Toma tu código TypeScript normal — completamente estándar, tipado por el compilador oficial de TypeScript — y lo convierte en un binario autónomo que se ejecuta sin necesidad de Node.js, Deno, Bun ni ningún otro runtime.
El proyecto es de código abierto (vercel-labs/scriptc en GitHub) y su claim es tan ambicioso como directo: "Zero-runtime TypeScript".
Y lo más loco: compila el 99% del código de forma estática. Sí, leíste bien. El equipo de Vercel analizó aplicaciones reales y descubrió que la inmensa mayoría del TypeScript que escribimos es mucho más estático de lo que imaginamos.
¿Qué tan rápido es?
Los números hablan solos:
- Startup: ~2ms — contra ~100ms de Node.js. Eso es 50x más rápido.
- Binario: ~178KB para un programa pequeño (fibonacci). Nada que ver con los 40MB+ de una imagen de Node.
- Sin dependencias en runtime: el binario no necesita node_modules, no necesita npm install, no necesita nada.
Para aplicaciones serverless, CLIs, tools de build, y microservicios, esto cambia las reglas del juego por completo.
¿Qué se puede compilar?
La lista es impresionante. Scriptc compila a código nativo:
- Lenguaje completo: clases, closures, genéricos (monomorfizados), async/await sobre fibras nativas, excepciones, destructuring, spread, iteradores.
- Standard library: strings UTF-16, arrays/Maps/Sets con semántica exacta de JS, JSON, Math, typed arrays, Buffer.
- API de Node: fs (sync y promises), path, process, child_process, os, crypto, url, zlib, timers — y lo mejor: net, http, https, tls. Sí, puedes compilar un proxy server a binario nativo.
- fetch: con streams, redirects, gzip, AbortSignal. Sin libcurl, sin dependencias del sistema.
- npm dependencies: con el flag
--dynamic, se embeven en el binario en tiempo de compilación. El binario nunca lee node_modules en runtime.
Lo que no se puede compilar estáticamente (cosas con Promise.reject, funciones con parámetros opcionales como valores) se ejecuta con un engine JavaScript embebido (quickjs-ng, ~620KB) que solo se linkea cuando hace falta.
¿Por qué esto es importante?
El ecosistema JavaScript/TypeScript lleva años intentando resolver el problema del runtime. Bun lo intenta con un nuevo runtime. Deno lo intentó con otro. Scriptc va por un camino completamente diferente: elimina el runtime por completo.
Esto tiene implicaciones enormes:
- CLIs que arrancan al instante: olvídate del lag de "Starting..." de herramientas escritas en Node.
- Serverless que enfría en cero: cold starts de 2ms vs 100ms+.
- Distribución de un solo binario: "curl -O && chmod +x && ./app" — sin npm, sin node, sin drama.
- Seguridad: menor superficie de ataque al no tener un runtime completo.
¿Y las limitaciones?
No todo es perfecto. Por ahora, macOS arm64 es la plataforma principal. Linux y Windows se compilan por cross-compilation y cada uno tiene su propio lane de tests diferenciales. Además, necesitas clang instalado (viene con Xcode Command Line Tools en Mac, en Windows/Linux toca instalar).
Y ojo: esto no va a reemplazar a Node.js para todo. Las aplicaciones que dependen heavy de eval(), de patrones extremadamente dinámicos, o de ciertos paquetes npm con mucho JS shipped, van a caer en modo dinámico o ser rechazadas con un código de error específico.
Pero el 99% de tu código TypeScript — ese que escribís todos los días — compila a nativo. Y eso es un avance enorme.
El veredicto
Vercel acaba de plantar una bandera en territorio que nadie había tocado. Mientras todos corren a construir runtimes más rápidos (Bun, Deno), ellos se preguntaron: "¿y si mejor no necesitamos runtime?".
Scriptc no es un producto terminado. Es un experimento de Vercel Labs. Pero es el tipo de experimento que cambia la dirección de una industria. TypeScript nativo, sin runtime, con cold starts de 2ms y binarios de 178KB. El futuro de la programación serverless se ve muy diferente después de esto.
Comparte esto con ese amigo que todavía cree que JavaScript necesita un runtime pesado para correr en producción.