Introducción: El Problema del Ámbito Global
Si has estado escribiendo JavaScript por un tiempo, conoces el dolor de la contaminación del ámbito global. Cada framework, librería o polyfill que agregas a tu proyecto tiene el potencial de chocar con tu propio código. Este es un problema fundamental que ha perseguido al lenguaje desde sus inicios.
¿Pero qué tal si pudieras crear una "sala limpia" para tu código? ¿Un lugar donde puedas ejecutar JavaScript sin preocuparte por interferencias del mundo exterior? Eso es exactamente lo que la nueva propuesta ShadowRealm busca resolver.
En esta guía, vamos a sumergirnos en la API ShadowRealm, explorar sus casos de uso y entender cómo puede revolucionar la forma en que escribimos y probamos aplicaciones JavaScript.

¿Qué es un ShadowRealm?
Un ShadowRealm es un nuevo tipo de realm en JavaScript que proporciona un entorno aislado para ejecutar código. A diferencia de una pestaña del navegador o un Web Worker, un ShadowRealm no tiene su propio hilo. En cambio, se ejecuta en el mismo hilo que el código que lo creó, pero con un objeto global completamente separado.
Veamos un ejemplo simple:
// Crea un ShadowRealm
const shadow = new ShadowRealm();
// Define una función global en el realm externo
function funcionGlobal() {};
// Verifica si existe en el objeto global del realm externo
console.log(globalThis.funcionGlobal); // Resultado: function funcionGlobal()
// Verifica si existe en el objeto global del ShadowRealm
console.log(shadow.evaluate('globalThis.funcionGlobal')); // Resultado: undefined
Como puedes ver, la funcionGlobal definida en el realm externo no está disponible dentro del ShadowRealm. El objeto global del ShadowRealm permanece intacto, sin importar lo que pase afuera.

Consideraciones de Seguridad y Limitaciones
Aunque los ShadowRealms son increíblemente poderosos, no son un límite de seguridad. El código que se ejecuta dentro de un ShadowRealm aún puede hacer inferencias sobre el realm externo. Sin embargo, son un límite de integridad, lo que significa que el código dentro de un ShadowRealm no puede interferir directamente con el realm externo, a menos que se lo permitamos explícitamente.
Limitaciones Clave
- Sin aislamiento de seguridad real: El código malicioso podría acceder a datos sensibles si puede inferirlos.
- Sin hilo separado: El código se ejecuta en el mismo hilo, por lo que los cálculos pesados seguirán bloqueando el hilo principal.
- Restricciones de CSP: El método
evaluateestá sujeto a la reglaunsafe-evalde la Content Security Policy.
Casos de Uso Prácticos
- Pruebas: Ejecuta suites de pruebas en un entorno limpio para evitar interferencias del estado global.
- Sistemas de plugins: Ejecuta código de terceros en un entorno sandbox.
- Evaluación de código: Evalúa código generado por el usuario de forma segura, sin contaminar el ámbito global principal.

Conclusión: El Futuro del Aislamiento en JavaScript
La API ShadowRealm todavía está en fase de propuesta (Etapa 2.7), pero representa un paso significativo en la evolución de JavaScript. Al proporcionar una forma simple de ejecutar código de forma aislada, abre nuevas posibilidades para pruebas, sistemas de plugins y ejecución segura de código.
Como con cualquier API nueva, es esencial entender sus limitaciones. Los ShadowRealms no son una bala de plata para la seguridad, pero son una herramienta poderosa para mantener la integridad del código.
Próximos Pasos para Aprender
- Sigue la propuesta del TC39: Mantente al tanto de la propuesta ShadowRealm para actualizaciones.
- Experimenta con polyfills: Hay polyfills disponibles que puedes usar para probar la API hoy.
- Explora conceptos relacionados: Mira Web Workers y sandboxing de
iframepara entender diferentes estrategias de aislamiento.
Junto con tendencias relacionadas como pruebas just-in-time y la implementación de AV1 de Meta, ShadowRealm es parte de un movimiento más amplio hacia entornos JavaScript más robustos y aislados.