Framework HTML-first · SEO-first
HTML real. Cero JavaScript de más.
Nexa compila cada página a HTML de verdad — con SEO, i18n y datos reales — y activa JavaScript solo en los nodos que de verdad lo necesitan. Nada de bundle vacío por las dudas.
export const seo = {
title: "Mi tienda",
description: "Zapatillas para correr"
};
function sayHi() {
alert("hola desde Nexa!");
}
export default function Home() {
return (
<main>
<h1>Bienvenido</h1>
<button onClick={sayHi}>Saludar</button>
</main>
);
}Un mismo proyecto
Web, escritorio, Android e iOS — sin reescribir nada
El mismo código fuente que compila a HTML real para la web también empaqueta a un binario de escritorio o a una app móvil de verdad. Nada de una versión web y otra nativa por separado.
Web
Chrome, Firefox, Safari — el HTML real de siempre, indexable y sin nada que instalar.
nexa buildEscritorio
Windows, macOS y Linux con Tauri — un binario de escritorio real y ejecutable, compilado con cargo.
nexa add tauri
cd src-tauri && cargo buildAndroid
Un APK real compilado con Gradle vía Capacitor — verificado de punta a punta con el SDK de Android real.
nexa add capacitor
npx @capacitor/cli add android
cd android && ./gradlew assembleDebugiOS
Mismo mecanismo de Capacitor que Android — genera un proyecto Xcode real. Necesita macOS para compilar; no verificado en este entorno Linux.
npx @capacitor/cli add iosLa diferencia real
Nexa no es "otro Astro"
Astro, Next.js, Nuxt y SvelteKit ya resuelven muy bien "HTML primero, JS solo donde hace falta". La diferencia de Nexa está un nivel más abajo: en cómo se genera ese HTML.
Cómo se genera el HTML
Astro/Next/Nuxt/SvelteKit: para producir el HTML, literalmente EJECUTAN tu código — corren el renderer real de React, Vue o Svelte en el servidor, incluso para contenido 100% estático.
Nexa: el compilador (escrito en Rust) nunca ejecuta tu código. Es un analizador estático que reconoce un conjunto fijo de patrones en tu archivo (data.x, t("clave"), <For each={...}>, export const load/seo) y los traduce directo a HTML — sin runtime de JavaScript de por medio, ni en el servidor.
Activación progresiva vs. hidratación
Hidratación clásica: se vuelve a ejecutar el árbol entero del componente en el navegador para "revivir" los event listeners, aunque solo un botón sea interactivo.
Nexa: cada nodo interactivo (cada onClick, cada isla) tiene su propio identificador y su propio chunk de JS, cargado por separado y con su propia estrategia (interaction/visible/idle/load/manual). No hay un árbol que revivir — cada pieza se activa sola.
Islas: opacas vs. renderizadas
Islas de Astro: son componentes reales de React/Vue/Svelte. El propio renderer de Astro para ese framework genera el HTML inicial de la isla en el servidor.
Islas de Nexa: son una caja negra total. El compilador de Rust nunca abre ni interpreta lo que hay dentro — el HTML inicial de la isla es el que vos mismo escribís a mano (con los mismos patrones estáticos de cualquier página Nexa), y el framework real que elijas corre 100% en el cliente, nunca en el servidor.
En la práctica esto significa que no hace falta elegir un solo paradigma para todo el proyecto: la home y el blog pueden ser HTML puro sin una línea de framework, un formulario puede activarse solo con @nexa/reactivity, y un dashboard complejo puede ser una isla con Vue o React completo adentro — todo en el mismo proyecto, compilado por el mismo Rust que nunca necesita entender ese Vue o ese React.
Ventajas
¿Por qué Nexa?
Cero JavaScript por defecto
Una página sin interacción se compila a HTML puro. Sin runtime, sin hidratación, sin bundle vacío por las dudas.
Activación progresiva
Cada nodo interactivo declara su propia estrategia: interaction, visible, idle, load o manual.
SEO real, no un plugin
title, meta tags, Open Graph y JSON-LD válidos, generados por página — con un analizador que avisa si falta algo.
Islas para lo interactivo de verdad
Un dashboard o un carrito complejo se monta con tu framework favorito, sin que el resto del sitio deje de ser HTML-first.
Cache-busting real
Cada archivo generado lleva el hash de su propio contenido — un redeploy nunca sirve JS o CSS viejo desde el caché.
Empaquetado nativo
El mismo proyecto genera un binario de escritorio real (Tauri) o un APK real (Capacitor), sin reescribir nada.
Tiempo real de primera clase
connectSSE/connectSocket envuelven EventSource/WebSocket nativos en señales reactivas — notificaciones, chat, dashboards en vivo.
Backend-agnóstico
load() hace un GET HTTP a cualquier backend que ya tengas — PHP, Go, Node, lo que sea. Nexa no impone el tuyo.
Sobre el logo
El loto en el centro es pureza y renacer, el mismo símbolo del mito de Nezha (哪吒). Alrededor, una única rueda de fuego evoca sus zapatillas y el impulso divino. Jade, dorado y rojo conectan lo mítico con lo moderno.