workers.dev: el subdominio de pruebas
El subdominio gratuito que Cloudflare regala a cada cuenta para exponer un Worker en segundos, las preview URLs por versión y por qué no conviene como hogar de producción seria.
Cuando despliegas tu primer Worker, Cloudflare te entrega una dirección pública sin que toques un solo registro de DNS ni gestiones un certificado: algo como mi-api.mi-cuenta.workers.dev. Es la vía más corta entre wrangler deploy y una URL que puedes abrir en el navegador o mandarle a un compañero. Esa comodidad, sin embargo, esconde decisiones de arquitectura —tenencia compartida, cookies, marca, control de la zona— que explican por qué workers.dev es inmejorable para probar y frágil como hogar definitivo de un producto.
- Entender qué es
workers.devy cómo se forma la URL de tu Worker. - Separar el subdominio estable de las preview URLs por versión.
- Razonar, más allá del eslogan, por qué no conviene para producción seria.
- Saber cuándo sí es la herramienta correcta y cómo desactivarlo sin sorpresas.
Anatomía de una URL gratis
Cada cuenta de Cloudflare elige, una sola vez, un subdominio propio bajo workers.dev, del tipo mi-cuenta.workers.dev. A partir de ahí, cada Worker que despliegas con esta ruta activa cuelga de él como un tercer nivel: <worker>.<mi-cuenta>.workers.dev.
No hay DNS que configurar porque el subdominio ya vive dentro de la infraestructura de Cloudflare; el despliegue registra el nombre y lo propaga a toda la red global en segundos.
flowchart LR A[wrangler deploy] --> B[Worker en el edge global] B --> C[Subdominio de la cuenta en workers.dev] C --> D[URL publica lista para abrir]
Ese árbol de tres niveles no es casual: refleja la jerarquía del DNS. workers.dev es el dominio, tu cuenta es el subdominio, y cada Worker una etiqueta más a la izquierda. El nombre del Worker, por tanto, hereda las reglas de una etiqueta de DNS: hasta 63 caracteres, solo alfanuméricos y guiones, sin empezar ni terminar en guion.
La parte del medio, mi-cuenta, es única por cuenta y la comparten todos tus Workers: se elige una vez y no cambia. El único grado de libertad de la URL es, por tanto, el nombre del Worker; elígelo pensando que será visible.
Al desplegar, Wrangler te devuelve la dirección final junto con el identificador de versión:
wrangler deploy
# Total Upload: 1.02 KiB / gzip: 0.54 KiB
# Uploaded mi-api (2.1 sec)
# Published mi-api (3.4 sec)
# https://mi-api.mi-cuenta.workers.dev
# Current Version ID: 0e2c9b...
Esa dirección responde mientras el Worker exista y workers.dev siga activo; en cuanto lo apagas, deja de contestar sin redirección ni rastro. No cuelgues de ella nada que deba perdurar.
Preview URLs: una dirección por versión
workers.dev publica la versión activa de tu Worker. Aparte de esa dirección estable, Cloudflare puede generar preview URLs: una dirección por cada versión desplegada, con la forma <prefijo-version>-<worker>.<mi-cuenta>.workers.dev. Sirven para revisar un cambio antes de promoverlo, sin pisar la versión que ya está en producción.
Hay dos sabores: la preview versionada, atada a un identificador concreto y por tanto inmutable, y la con alias, un nombre estable que apuntas a la versión que quieras probar. La primera es ideal para revisar un commit exacto; la segunda, para un entorno de staging con URL fija.
Desde 2025 las preview URLs son opt-in y su valor por defecto sigue al de workers.dev: si el subdominio está activo, las previews también; si lo desactivas, se apagan con él. Esta simetría evita el error clásico de creer que apagaste tu Worker cuando en realidad seguía expuesto por una preview olvidada.
Puedes fijar el comportamiento de forma explícita con preview_urls, con independencia de workers_dev. Es útil en CI: mantener previews para revisar cada rama sin exponer una dirección de producción estable.
{
// Previews activas aunque workers.dev este apagado
"workers_dev": false,
"preview_urls": true
}
Tanto el subdominio como las preview URLs son públicos por defecto. Si expones material sensible, activa Cloudflare Access con un clic desde los ajustes del Worker y limita el acceso a usuarios o grupos concretos, sin tocar una línea de código.
Por qué no para producción seria
workers.dev funciona, pero arrastra propiedades que chocan con un producto serio:
Cookies y aislamiento
workers.dev está en la Public Suffix List: el navegador trata cada subdominio como un sitio distinto. No puedes compartir una cookie entre dos Workers ni fijarla en el dominio padre.
No es tu marca
La URL no es tuya: no aporta confianza, no ayuda al SEO y no puedes moverla si un día dejas la plataforma. El dominio es el activo; aquí eres inquilino.
Bloqueos de red
Algunas redes corporativas y filtros bloquean *.workers.dev en bloque, porque es un dominio compartido por millones de proyectos, buenos y malos.
Menos control de zona
Las reglas finas de caché, WAF y redirecciones viven en tu zona. Sobre workers.dev no tienes esa palanca: dependes de los ajustes de la plataforma.
Ninguna de estas pegas es un fallo de la plataforma: son la consecuencia lógica de vivir en un dominio prestado y compartido. Aparecen justo cuando dejas de prototipar y empiezas a necesitar identidad, reputación y control propios.
Dicho de otro modo, workers.dev optimiza el arranque, no la operación. El día que te importe quién puede leer una cookie o qué aparece en la barra del navegador, ya habrás salido de su terreno.
El motivo profundo por el que workers.dev no sirve para producción no es estético, es estructural: una URL define una frontera de identidad y confianza, y workers.dev es un espacio de nombres de tenencia compartida. Al estar en la Public Suffix List, el navegador impide deliberadamente que un subdominio lea o escriba cookies de otro o del dominio padre; es la misma barrera que evita que banco.example.com toque las cookies de tienda.example.com. Esa protección, que en tu propio dominio controlas tú, aquí te la imponen: no puedes montar autenticación por cookies compartidas entre subdominios, ni un dominio de sesión común. A eso se suma que la reputación del dominio es colectiva —un abuso de otro inquilino puede acarrear bloqueos que te salpican— y que la dirección no es un activo transferible. Cuando conectas tu propio dominio, la siguiente lección, recuperas las tres cosas que workers.dev te niega: control de la frontera de cookies, reputación aislada y propiedad del nombre. Por eso el patrón sano es claro: workers.dev para iterar y demostrar; tu dominio para vivir.
Cuándo sí, y cómo apagarlo
workers.dev brilla exactamente donde producción no llega. Estos son sus terrenos naturales:
Prototipo
Una idea que quieres enseñar hoy, con una URL viva en segundos y sin comprar ni conectar un dominio.
Servicio interno
Un endpoint que solo consume tu equipo o tu CI, donde marca y SEO son irrelevantes.
Demo para cliente
Un enlace efímero para enseñar un avance, que caduca en tu cabeza en cuanto termina la reunión.
Preview de rama
Un entorno por pull request, generado y destruido de forma automática en cada cambio.
El hilo común de los cuatro casos es que la URL es desechable: nadie la va a memorizar, indexar ni confiar en ella a largo plazo. Mientras esa premisa se cumpla, workers.dev es la opción más rápida y sensata.
Cuando el proyecto madura y conectas un dominio, conviene cerrar la puerta trasera. Basta con desactivar la ruta en la configuración:
{
"name": "mi-api",
"main": "src/index.ts",
"compatibility_date": "2026-07-03",
// Apaga la URL publica en workers.dev y, por defecto, sus previews
"workers_dev": false
}
De hecho, si añades un bloque routes a tu configuración y no dices nada, Wrangler infiere workers_dev como false en el siguiente despliegue: la plataforma asume que ya tienes tu propia puerta de entrada.
Si desactivas workers.dev desde el panel pero no reflejas workers_dev: false en tu configuración de Wrangler, el siguiente wrangler deploy volverá a activar la ruta. La configuración manda: haz el cambio en el fichero, no solo en la interfaz.
- Despliega un Worker mínimo y anota la URL exacta que te devuelve
wrangler deploy; identifica las tres partes del nombre. - Abre la preview URL de una versión y compárala con la dirección estable: observa el prefijo de versión.
- Razona por qué no podrías compartir una cookie de sesión entre dos Workers distintos en
workers.dev. - Añade
workers_dev: false, redepliega y confirma que la dirección pública deja de responder.