¿Qué es Inertia.js?
Quieres construir el frontend con React o Vue, pero deseas evitar diseñar, implementar y mantener una API por separado; el que resuelve este dilema es Inertia.js. Inertia es un “pegamento” que te permite escribir solo el frontend con React, Vue o Svelte, manteniendo tal cual el enrutamiento y los controladores del lado servidor. No es un framework, sino una capa adaptadora que conecta Laravel existente con los frameworks JavaScript.La versión más reciente actualmente es Inertia v3 (lanzado el 26 de marzo de 2026). Los starter kits de Laravel 13 (React, Vue y Svelte) ya vienen compatibles con Inertia.
Diferencias con SPA y MPA tradicionales
| Arquitectura | Características | Retos |
|---|---|---|
| MPA (aplicación Blade tradicional) | Simple, fácil integración con Laravel | Recarga completa en cada navegación |
| SPA (API + frontend separado) | Alta interactividad | Gestión duplicada de diseño de API, autenticación y tipos |
| Inertia (monolito moderno) | UX de SPA + sencillez del lado servidor | Coste de aprendizaje propio |
Relación con los starter kits de Laravel
Al crear un proyecto conlaravel new, si eliges React, Vue o Svelte, Inertia se configura automáticamente.
inertiajs/inertia-laravel(adaptador del lado servidor)@inertiajs/react/@inertiajs/vue3/@inertiajs/svelte(adaptadores del lado cliente)- Middleware
HandleInertiaRequests - Pantallas de login, registro y restablecimiento de contraseña (ya implementadas como componentes Inertia)
Fundamentos de Inertia::render()
Para devolver una respuesta Inertia desde un controlador de Laravel se usa Inertia::render(). En el primer argumento se indica el nombre del componente JavaScript y en el segundo, los datos que se pasan como props.
'Posts/Index' corresponde a una ruta de archivo. En React, el componente correspondiente es resources/js/Pages/Posts/Index.jsx, y en Vue, resources/js/Pages/Posts/Index.vue.
Estructura de un componente de página
Los componentes de página de Inertia son componentes Vue/React normales. Los datos pasados desde el controlador se reciben como props.React
Vue
<Link>, la navegación entre páginas se realiza por XHR, evitando la recarga completa. Se escribe exactamente igual que una etiqueta <a> normal, pero por debajo Inertia solo cambia el componente de página.
Datos compartidos — middleware HandleInertiaRequests
Los datos comunes que necesitan todas las páginas (información del usuario autenticado, mensajes flash, etc.) se definen en el método share() del middleware HandleInertiaRequests.
React
Como los datos compartidos se incluyen en todas las peticiones, se recomienda limitarlos al mínimo necesario. Si los pasas mediante una evaluación diferida con
fn(), se evaluarán solo en las peticiones que realmente los necesiten.Envío de formularios y manejo de errores de validación
El procesamiento de formularios con Inertia se integra de forma natural con la validación de Laravel. Con el helperuseForm() puedes implementar de forma sencilla la gestión del estado del formulario, el envío y la visualización de errores.
Lado del controlador
errors.
Lado del frontend
React
Vue
useForm() mantiene el contenido introducido y muestra el error. No hay que hacer que el usuario vuelva a introducir el formulario, lo que mejora la experiencia.
Casos de uso adecuados y no adecuados
Casos en los que Inertia es adecuado
- Cuando un equipo que conoce bien Laravel quiere construir UIs al estilo SPA
- Cuando se quiere gestionar centralizadamente autenticación, autorización y validación en el lado Laravel
- Aplicaciones como paneles de administración o herramientas internas, con baja prioridad de SEO
- Proyectos en los que se quiere evitar el coste de diseñar y mantener una API aparte
Casos en los que no es adecuado
- Cuando múltiples clientes externos (apps móviles, etc.) usan la misma API
- Sitios de contenido en los que el SEO es muy importante (se puede afrontar con SSR, pero se vuelve más complejo)
- Configuraciones de microfrontends u otras en las que el frontend se desarrolla por un equipo totalmente independiente
Principales cambios de Inertia v3
Inertia v3 se lanzó el 26 de marzo de 2026. A continuación presentamos los principales cambios respecto a v2.Eliminación de Axios: cliente XHR ligero integrado
En v3 se ha eliminado Axios y se ha sustituido por un cliente XHR ligero integrado. En la mayoría de aplicaciones no se necesitan cambios de código. Los interceptores de Axios pueden migrarse directamente a los interceptores integrados. Si sigues queriendo usar Axios, puedes utilizarlo mediante el adaptador de Axios.Simplificación de SSR con el plugin @inertiajs/vite
Al introducir el nuevo plugin de Vite, la resolución automática de componentes de página y la configuración de SSR se simplifican enormemente. SSR durante el desarrollo funciona ahora con solo ejecutar npm run dev, sin necesidad de arrancar un servidor Node por separado.
Hook useHttp: peticiones HTTP sin cambio de página
El hook useHttp permite enviar peticiones HTTP al servidor sin provocar una navegación de página (Inertia visit). Es útil cuando quieres comunicarte manteniendo la página actual, como guardar desde un modal o procesamiento en segundo plano.
Actualizaciones optimistas (Optimistic Updates)
Se soportan las actualizaciones optimistas a nivel deuseForm y de router. Actualiza la UI de inmediato sin esperar la respuesta del servidor y, si falla, hace rollback automáticamente.
Props de layout (Layout Props)
Con el hookuseLayoutProps puedes pasar datos desde el componente de página al layout persistente. El “control de estado del layout específico de una página”, que antes solo podía apoyarse en datos compartidos o en props de página, ahora se escribe de forma sencilla.
Cambios de requisitos
En v3 se han elevado las versiones mínimas siguientes.| Elemento | v2 | v3 |
|---|---|---|
| PHP | 8.1+ | 8.2+ |
| Laravel | 10+ | 11+ |
| React | 18+ | 19+ |
| Svelte | 4+ | 5+ |
Eliminación de Inertia::lazy()
Inertia::lazy(), que estaba obsoleto en v2, se ha eliminado por completo en v3. En su lugar se usa Inertia::optional().
Cambios en los nombres de eventos
| v2 | v3 |
|---|---|
invalid | httpException |
exception | networkError |
Eliminación de la opción future
Se ha eliminado el bloque de configuración future que en v2 se ofrecía como opción experimental. Todas esas opciones están ahora habilitadas por defecto. Elimina el bloque future de la configuración de createInertiaApp.
Para el procedimiento detallado de actualización desde v2, consulta la guía oficial de actualización. Para v2 se ofrecen correcciones de errores hasta el 26 de septiembre de 2026 y correcciones de seguridad hasta el 26 de marzo de 2027.
Conclusión
Inertia.js es una herramienta que responde a la necesidad realista de “quiero mantener Laravel tal cual y escribir el frontend con React/Vue”. Su mayor fortaleza es la sencillez de pasar datos directamente desde los controladores a los componentes sin diseñar una API. Que los starter kits de Laravel 13 soporten Inertia confirma también que su posición en el ecosistema Laravel está consolidada. Si Livewire es un enfoque para construir UIs dinámicas solo con PHP, Inertia es un enfoque que permite usar el poder de los frameworks JavaScript sin perder la sencillez del lado servidor. Cuál elegir depende del conjunto de habilidades del equipo y de los requisitos del proyecto, pero cuando se trata de “mantener los controladores de Laravel tal cual y construir la interfaz con React”, Inertia es la elección más natural.Documentación oficial de Inertia.js
Para todas las funcionalidades de Inertia v3, consulta la documentación oficial.