Laravel News informó sobre Inertia.js 3.9.0 el 13 de octubre de 2026. La versión añade la opción background a usePoll() y router.poll(). Puede recibir throttle, pause o continue. throttle conserva el comportamiento anterior y ejecuta el polling una vez cada diez intervalos en una pestaña oculta. pause lo detiene hasta que la pestaña vuelve a estar visible. continue mantiene el intervalo completo.

polling.js
import { usePoll } from '@inertiajs/vue3'

usePoll(5000, {}, { background: 'pause' })

Con pause, una petición que debía ejecutarse durante la ocultación se envía cuando la pestaña recupera la visibilidad. Si todavía queda tiempo del intervalo actual, Inertia espera ese tiempo. Así, cambiar rápidamente entre pestañas no genera una petición en cada cambio. keepAlive sigue funcionando, pero queda obsoleto en favor de background: 'continue'. El polling que empieza con la pestaña ya oculta también aplica ahora la configuración elegida.

El detalle del evento navigate incluye ahora la propiedad type. Su valor es initial durante la primera carga, incluido un reload. En una visita normal de Inertia es visit. Cuando el navegador restaura una página mediante los botones atrás o adelante, es history. Una restauración completa desde el historial también informa history si la página anterior no pertenecía a Inertia. La aplicación puede usar ese valor para recargar props concretas, como messages, porque las props restauradas pueden estar desactualizadas.

router.clearHistory() e Inertia::clearHistory() eliminan ahora la caché de precarga junto con las entradas cifradas del historial. Antes, después de cerrar sesión, el botón atrás podía mostrar una página protegida desde esa caché hasta que caducara. Una petición que siga en curso durante el vaciado tampoco se guarda cuando termina. router.flushAll() aplica la misma regla.

Las restauraciones del historial cancelan ahora las actualizaciones de página que todavía se están resolviendo. Una respuesta de una prop diferida, un polling o una recarga parcial ya no puede sustituir la página restaurada después de pulsar atrás. Mohammed Sohail corrigió este caso tras el arreglo de v3.8 para la navegación atrás y adelante durante un despliegue. Gianpiero Puleo también corrigió useRemember. Un valor de la primera entrada de historial descifrada podía reaparecer en una visita nueva, por ejemplo una selección de pestaña que el usuario había borrado.

InfiniteScroll cancela ahora su petición activa cuando el componente se desmonta. También ignora los callbacks de respuestas recibidas durante la transición. Esto evita errores en la página nueva. Una respuesta antigua tampoco se mezcla ya con la lista cuando la navegación usa la misma URL con otra cadena de consulta, por ejemplo tras cambiar el orden o aplicar un filtro.

Las notas completas de v3.9.0 incluyen el cambio #3276 de Gianpiero Puleo para procesar tareas añadidas mientras la cola termina de estabilizarse. Mohammed Sohail, con el identificador @thecrazybob, aportó la corrección de restauración del historial en #3274. Pascal Baljet añadió el tipo de navigate en #3291, vació la caché de precarga en #3307, trató las peticiones de InfiniteScroll en #3308, corrigió un error de Svelte <Form> cuando se desmonta un campo enfocado en #3309 y actualizó dependencias en #3310. La opción para el polling en segundo plano corresponde a #3292.

Otros cambios gestionan QuotaExceededError en history.replaceState mediante #3280 de @danielperez9430. El cambio #3257 de @fouteox conserva los sourcemaps en las transformaciones de entradas de Vite. Gianpiero Puleo corrigió la regresión de useRemember en #3302. Pascal Baljet arregló además en #3312 un error de InfiniteScroll tras desmontar inmediatamente el componente después de cambiar sus elementos.