wandres.dev
DE PAGES A WORKERS · la convergencia

Qué cambió: Workers absorbe las capacidades de Pages

En marzo de 2026 Workers alcanzó la paridad total con Pages y con ello dejó de existir la pregunta de en cuál de los dos empezar. Esta lección reconstruye por qué había dos productos, qué capacidad concreta migró de uno a otro, y cómo el resultado es un modelo único donde estáticos, renderizado en servidor y API viven en el mismo artefacto, con un solo `wrangler.jsonc`, un solo despliegue y un solo objeto `env`.

⏱ 17 min

Durante años la plataforma de Cloudflare tuvo una costura visible. A un lado, Pages: la forma cómoda de publicar un front-end, con integración con Git, despliegue en cada push y previsualizaciones por rama. Al otro, Workers: la plataforma de cómputo completa, con todos los bindings, cron, estado durable y comunicación entre servicios. Cada proyecto empezaba con una decisión que no debería haber existido nunca, porque los dos lados acababan necesitándose. En marzo de 2026 esa costura se cerró: Workers alcanzó la paridad total con Pages en assets estáticos, renderizado en servidor y dominios, y las peticiones de assets pasaron a ser gratis en ambos. Este nivel entero trata de esa convergencia; esta primera lección explica exactamente qué se movió y por qué el resultado no es un producto más grande, sino un modelo más simple.

🎯 Al terminar esta lección sabrás
  • Reconstruir por qué existían dos productos y qué brecha real cubría cada uno.
  • Identificar las capacidades concretas que Workers absorbió de Pages en 2026.
  • Entender el modelo único: estáticos, renderizado en servidor y API en un artefacto.
  • Situar Pages como plataforma en mantenimiento y saber qué implica para tus proyectos.

Por qué hubo dos productos

Antes de contar qué se movió, conviene entender por qué había algo que mover. Las convergencias de plataforma se leen mal cuando se cuentan como correcciones de un error pasado, y esta no lo fue.

La existencia de dos productos no fue un error de diseño: fue el resultado honesto de dos necesidades que, cuando aparecieron, no se sabían resolver con la misma herramienta. Workers nació como cómputo en el edge, y su unidad mental era la función que responde a una petición. Servir cuatro mil archivos de un build de front-end desde esa unidad era posible pero incómodo, y sobre todo caro conceptualmente: cada imagen, cada hoja de estilo, cada fragmento de JavaScript pasaba por la maquinaria pensada para ejecutar lógica.

Conviene recordar de dónde venía esa incomodidad, porque explica por qué la solución tardó. Un Worker se factura por invocación, y una página moderna dispara decenas de peticiones por visita entre estilos, fuentes, imágenes y fragmentos de código. Servir todo eso a través de la unidad de cómputo significaba pagar por entregar bytes que no requerían ningún cálculo, y ninguna cantidad de azúcar sintáctico podía arreglar ese desajuste de fondo: el problema no era la ergonomía, era el modelo de precios.

Pages nació para tapar exactamente ese hueco. Traía lo que un equipo de front-end espera: conectas un repositorio, cada push produce un despliegue, cada rama tiene su URL, y el hosting estático es gratuito e ilimitado. A cambio, su acceso a la plataforma era de segunda clase. Los bindings llegaron tarde y parciales, no había cron nativo, y el modelo de funciones basado en el directorio functions/ se sentía como una capa añadida sobre lo que en el fondo era un CDN con buena ergonomía de despliegue.

El problema no era que ninguno de los dos fuera bueno. Era que el proyecto medio necesitaba las dos mitades. Un sitio con un formulario que escribe en una base de datos, un blog con una ruta de búsqueda, una tienda con un webhook de pagos: en todos ellos el front-end vivía cómodo en Pages y la lógica quería vivir en Workers. La costura entre productos se convertía en una costura dentro de la arquitectura.

Y esa costura no era gratuita. Un equipo que elegía las dos mitades acababa manteniendo dos proyectos con dos configuraciones, dos historiales de despliegue que había que sincronizar a mano, y una llamada de red entre piezas que conceptualmente eran la misma aplicación. La alternativa, quedarse en un solo lado, significaba renunciar a algo: o a la comodidad del front-end, o al acceso completo a la plataforma. Ninguna de las dos renuncias tenía una justificación técnica; ambas eran el peaje de una frontera de producto.

flowchart TD
N[Un proyecto real full stack] --> D{Donde lo despliego}
D -->|Pages| P[Assets gratis y previews pero plataforma limitada]
D -->|Workers| W[Plataforma completa pero estaticos incomodos]
P --> C[Costura entre dos proyectos]
W --> C
C --> U[Convergencia de 2026 en un solo Worker]
style C fill:#f38ba8,color:#11111b
style U fill:#a6e3a1,color:#11111b

Qué se movió exactamente

La convergencia no fue una función suelta, sino el cierre deliberado de todas las razones por las que alguien seguía eligiendo Pages. Conviene enumerarlas, porque cada una era un motivo real y ninguna se resolvió con un rodeo. El criterio para considerar cerrada una razón no fue que existiera algún mecanismo equivalente, sino que ese mecanismo costase lo mismo y se comportase igual bajo carga real; sin ese listón, la lista habría estado completa años antes y nadie habría migrado nada.

📦

Assets estáticos y gratis

El bloque assets sirve un directorio de build desde el edge. Las peticiones que resuelve un asset no cuentan como invocación del Worker: son gratis, igual que en Pages, en cualquiera de los dos productos.

🧩

Renderizado en servidor

El mismo proyecto que sirve los estáticos ejecuta el renderizado en servidor y la lógica de API en el Worker, con acceso completo al objeto env y a todos los bindings de la plataforma.

🌐

Dominios y previsualizaciones

Dominios propios, rutas, y una URL de previsualización por versión desplegada, con integración con Git que dispara el build en cada cambio. La ergonomía de Pages, ahora dentro de Workers.

La pieza que hizo que la paridad fuera real y no meramente técnica es la económica. Nadie habría movido un sitio de tráfico alto a un modelo que cobrase por cada imagen servida, por muy elegante que fuera el manifiesto. Al no contar como invocación las peticiones que resuelve un asset, Workers iguala exactamente la economía de Pages para la parte estática y reserva el coste para el cómputo que de verdad aporta valor. Pages y Workers comparten además el mismo plan de pago, de modo que la migración tampoco cambia la factura base.

Hay un cuarto elemento que se anuncia menos y se nota mucho: el eje de las previsualizaciones cambia de sitio. En Pages, la URL de previsualización colgaba de la rama del repositorio, lo que ataba el ciclo de revisión a una convención de Git. En Workers cuelga de la versión desplegada, que es una unidad más precisa porque coincide exactamente con lo que se publica. La diferencia parece cosmética hasta que la usas: subir una versión y promoverla a producción pasan a ser dos actos separados, y eso convierte el despliegue en una decisión reversible en lugar de un salto.

Falta señalar la dirección de la absorción, que es lo que da nombre a este nivel. Workers no adoptó el modelo de Pages ni se convirtió en un producto de hosting con funciones añadidas. Ocurrió lo contrario: mantuvo su propio modelo mental —un punto de entrada, un objeto env, un manifiesto— y encajó dentro de él las capacidades que faltaban, hasta que servir archivos dejó de ser un producto separado para ser un bloque de configuración. Esa asimetría importa, porque significa que lo que aprendiste sobre Workers sigue siendo válido y solo se amplía, mientras que lo que sabías de Pages se traduce.

Un solo modelo

El efecto práctico se ve mejor en el manifiesto que en la documentación. Lo que antes exigía dos proyectos, dos configuraciones y pegamento entre ellos cabe ahora en un archivo que describe la aplicación entera:

{
  "name": "mi-app",
  "main": "src/index.ts",
  "compatibility_date": "2026-03-01",
  "assets": {
    "directory": "./dist",
    "binding": "ASSETS",
    "not_found_handling": "single-page-application"
  },
  "d1_databases": [
    { "binding": "DB", "database_name": "app", "database_id": "..." }
  ],
  "triggers": { "crons": ["0 3 * * *"] }
}

Ese archivo declara un front-end estático servido gratis, un punto de entrada de código que atiende la API y el renderizado en servidor, una base de datos accesible desde ese código, y una tarea programada que corre de madrugada. Es una sola unidad: se versiona junta, se despliega junta y comparte el mismo env. La aplicación full-stack deja de ser un ensamblaje de servicios con un contrato de red entre ellos para convertirse en un artefacto único.

El código que acompaña a ese manifiesto es igual de escueto, y muestra la propiedad más importante del modelo: el mismo handler que responde la API tiene delante los assets sirviéndose solos. Cuando llega una petición, el edge intenta primero encontrar un archivo que la resuelva; si lo encuentra, lo entrega y tu código ni se entera, lo que mantiene esa petición gratuita. Solo cuando no hay archivo cae en tu handler. Ese orden por defecto es el que permite que front-end y API convivan sin que tengas que enrutar los estáticos a mano.

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    if (url.pathname.startsWith("/api/")) {
      const { results } = await env.DB.prepare("SELECT * FROM notas").all();
      return Response.json(results);
    }
    return env.ASSETS.fetch(request);
  },
};

El comando también se unifica. Donde había dos verbos de despliegue distintos, ahora hay uno:

npm run build
npx wrangler deploy

Y con el mismo manifiesto puedes trabajar en local con los bindings simulados, algo que en el mundo de dos productos exigía arrancar dos procesos y hacer que se hablaran entre ellos:

npx wrangler dev

Qué implica para tus proyectos

La convergencia divide a los proyectos en tres grupos con urgencias muy distintas, y confundirlos es el error más común al leer un anuncio de este tipo. Una noticia de plataforma nunca significa lo mismo para quien empieza que para quien mantiene, y tratar ambos casos con la misma prisa produce migraciones innecesarias o retrasos caros, según hacia qué lado se equivoque uno.

Para lo que empieza hoy, la decisión desaparece: no queda ningún argumento a favor de arrancar en Pages, porque no hay ahorro, no hay comodidad exclusiva y sí hay un techo garantizado el día que necesites algo que solo existe en Workers. La lección de cierre de este nivel desarrolla el patrón concreto con el que conviene nacer.

Para lo que ya existe, la urgencia es baja y la dirección es clara. Nada se rompe, no hay apagado inminente y tu sitio seguirá sirviéndose igual mañana. Lo que sí ocurre es que cada mes que pasa aumenta la distancia entre lo que tu proyecto puede hacer y lo que la plataforma ofrece, y esa distancia se paga entera el día que la necesites con prisa. Por eso conviene tratar la migración como mantenimiento planificado y no como una emergencia futura: se hace en un momento tranquilo, con las dos superficies vivas, y se revierte con un cambio de DNS si algo no cuadra.

Conviene además ordenar los proyectos existentes por dificultad real, porque la intuición engaña. Un sitio puramente estático se migra en minutos: se declara el bloque assets, se despliega y se mueve el dominio. Un sitio con archivos _headers y _redirects añade un rato de traducción, pero sigue siendo trabajo de configuración. La dificultad aparece solo cuando hay un directorio functions/ con lógica propia, porque ahí hay que reescribir el enrutado, y crece con el número de rutas, no con el tamaño del sitio. Medir esa cifra antes de planificar convierte una estimación vaga en una razonable.

Hay además un tercer grupo que se olvida: los proyectos que hoy están partidos en un Pages más un Worker conectados por una llamada de red. Son los que más ganan y los que menos trabajo tienen, porque la migración consiste sobre todo en fusionar dos manifiestos en uno y borrar el pegamento que los unía.

⚠️
Pages sigue vivo, pero deja de crecer

La convergencia no rompe nada. Los proyectos que hoy viven en Pages siguen funcionando y con soporte, y no hay una fecha de apagado que te obligue a correr. Lo que cambia es la dirección de la inversión: Pages recibe correcciones, no capacidades nuevas, mientras que todo lo que la plataforma añada a partir de ahora aterriza en Workers. La consecuencia práctica es asimétrica. Para un proyecto nuevo ya no existe ningún argumento a favor de empezar en Pages. Para uno existente, la migración no es urgente, pero sí es la única forma de volver a estar en la superficie que sigue ganando funciones.

Las plataformas maduran disolviendo sus propias fronteras

Que dos productos de un mismo proveedor converjan en uno no es un accidente de hoja de ruta ni una rectificación vergonzante: es el patrón con el que maduran las plataformas de cómputo, y saber leerlo vale más que memorizar la tabla de equivalencias. El ciclo se repite con una regularidad casi mecánica. Aparece una necesidad nueva, tan distinta de lo existente que resolverla dentro del producto general lo deformaría; entonces se crea un producto aparte, con su modelo mental propio, su configuración propia y su facturación propia. Pages fue exactamente eso, y fue la respuesta correcta a una necesidad que Workers todavía no sabía cubrir con elegancia. Pero un producto separado es también una frontera, y toda frontera cobra un peaje: obliga a elegir de qué lado vives antes de saber qué vas a necesitar, duplica conceptos que quieren ser el mismo, y crea ese momento incómodo en que tu sitio estático necesita justo la pieza de cómputo que quedó al otro lado del muro. Con el tiempo, el producto general aprende a hacer con elegancia lo que motivó la escisión, y entonces la frontera pasa de ser un servicio a ser un impuesto. La madurez de una plataforma se mide precisamente por su disposición a disolver esas fronteras internas sin perder las capacidades que las justificaron, aunque eso signifique retirar un producto en el que mucha gente confió. Lo verdaderamente instructivo es la dirección de la absorción: gana siempre el modelo más general, nunca el más especializado. Workers no derrotó a Pages en una guerra de funciones; absorbió su razón de ser hasta que el muro entre servir y computar dejó de significar algo. Para el ingeniero, la lección operativa es que estas convergencias se ven venir con años de antelación. Cuando dos productos de un mismo proveedor empiezan a solaparse y a necesitarse mutuamente, apostar por el que tiene el modelo más general no es seguir una moda: es reconocer hacia dónde apunta la gravedad de la plataforma antes de que te arrastre.

⚔️ Reconstruye la convergencia desde tu propio proyecto
  1. Toma un proyecto tuyo, real o imaginado, y escribe qué parte querría vivir en Pages y qué parte en Workers; nombra la costura exacta que aparece entre ambas.
  2. Enumera las tres capacidades que retenían a la gente en Pages y localiza dónde vive hoy cada una dentro de un wrangler.jsonc.
  3. Escribe un manifiesto único que sirva un front-end estático, exponga una API bajo la ruta de API y declare una tarea programada; señala qué línea cubre qué capacidad.
  4. Argumenta por qué que los assets sean gratis era condición necesaria para que la paridad fuera real, y no solo un detalle de precio.
  5. Decide, con criterio y no por inercia, si tu proyecto debería migrar ya o puede esperar; escribe el motivo en una frase que puedas defender ante tu equipo.