Despues de construir aplicaciones con React, Vue, y recientemente con HTMX/FastHTML, tengo una perspectiva clara de cuando usar cada enfoque.
El Problema con los SPAs
No me malinterpreten: React es excelente. Pero para muchas aplicaciones empresariales, un SPA introduce complejidad innecesaria:
SPA Tipico:
├── Frontend (React/Vue)
│ ├── State management (Redux/Vuex)
│ ├── Routing (React Router)
│ ├── API client (Axios/fetch)
│ ├── Build system (Webpack/Vite)
│ └── Testing (Jest/Cypress)
├── Backend (API)
│ ├── Serializers
│ ├── CORS config
│ └── Auth tokens
└── DevOps
├── 2 deployments
└── 2 pipelines CI/CD
Para un ERP interno o un panel de admin, esto es overkill.
La Filosofia HTMX
HTMX propone algo radical: el servidor envia HTML, no JSON.
<!-- Un boton que actualiza solo una parte de la pagina -->
<button
hx-post="/agregar-producto"
hx-target="#carrito"
hx-swap="innerHTML">
Agregar al carrito
</button>
<div id="carrito">
<!-- El servidor envia HTML aqui -->
</div>
El servidor responde con HTML listo para renderizar:
@rt('/agregar-producto')
def post(producto_id: int):
carrito = agregar_al_carrito(producto_id)
# Retorna HTML, no JSON
return Div(
*[ItemCarrito(item) for item in carrito.items],
P(f'Total: ${carrito.total}')
)
Comparativa Real
| Aspecto | SPA (React) | HTMX |
|---|---|---|
| Tiempo inicial | 2-3 semanas | 2-3 dias |
| Lineas de codigo | 10,000+ | 2,000 |
| Dependencias | 50+ | 3-5 |
| Bundle size | 200KB+ | 14KB |
| SEO | Requiere SSR | Nativo |
| Caching | Complejo | HTTP estandar |
Cuando Elegir HTMX
Ideal para: - Paneles de administracion - ERPs y sistemas internos - Landing pages con interactividad - Aplicaciones CRUD - MVPs rapidos
Ejemplos de mis proyectos: - ERP Market: POS completo con HTMX - AgencyFlow: CRM multi-tenant - Metalurgica: Sitio B2B con formularios
Cuando Elegir SPA
Necesario para: - Apps offline-first - Editores complejos (Figma, Notion) - Dashboards con graficos interactivos pesados - Apps moviles hibridas
Patron Hibrido
Lo mejor de ambos mundos: HTMX para el 90%, islas de JavaScript para lo complejo.
<!-- HTMX para la estructura -->
<div hx-get="/dashboard" hx-trigger="load">
Loading...
</div>
<!-- Alpine.js para interactividad local -->
<div x-data="{ open: false }">
<button @click="open = !open">Menu</button>
<nav x-show="open">...</nav>
</div>
<!-- Chart.js solo donde se necesita -->
<canvas id="grafico"
x-data
x-init="renderChart($el, await fetch('/api/datos').then(r => r.json()))">
</canvas>
Mi Stack Actual
FastHTML + HTMX + Alpine.js
├── Server-side rendering (SEO, performance)
├── Partial updates (UX fluida)
├── Minimal JS (solo donde agrega valor)
└── Un solo deployment (simplicidad)
Conclusion
HTMX no es "volver al pasado". Es reconocer que HTTP y HTML ya resuelven el 90% de los problemas de UI, y que agregar una capa de JavaScript solo tiene sentido cuando realmente lo necesitas.
Para mi proximo proyecto empresarial, HTMX sera mi primera opcion. React lo reservo para cuando realmente necesito un SPA.