Comparación honesta con el ecosistema
El frontend de 2026 converge hacia los signals: React con su compilador, Svelte 5 con runes, Vue con Vapor mode y Qwik con su reactividad resumible caminan todos hacia el grano fino que Solid tuvo desde el principio. Esta lección compara sin fanatismo dónde vive el cambio en cada uno, qué gana y qué pierde cada modelo, qué hace verdaderamente único a Solid —la tríada de signals de runtime, compilación a DOM y ownership— y en qué flaquea de verdad frente a alternativas más grandes o mejor financiadas.
Comparar frameworks se degrada casi siempre en tribalismo. Aquí no. El dato más honesto de 2026 es que el ecosistema entero converge hacia el modelo de Solid: React incorporó un compilador que memoiza por ti, Svelte 5 reescribió su reactividad con runes basados en signals, Vue estrenó Vapor mode que compila fuera el virtual DOM, y Qwik empujó el grano fino hasta la resumabilidad. Que todos caminen hacia donde Solid ya estaba no lo convierte en “el ganador” —cada uno paga y cobra en sitios distintos—. Esta lección ordena esas diferencias por un solo eje y dice, sin adornos, qué hace único a Solid y dónde pierde.
- Ordenar todos los frameworks por un eje claro: dónde y cómo vive el cambio.
- Comparar con honestidad React, Svelte 5, Vue Vapor y Qwik frente a Solid.
- Nombrar lo que hace único a Solid: la tríada signals de runtime, compilación y ownership.
- Reconocer, sin defensa tribal, las debilidades reales de Solid frente a alternativas.
El eje que lo ordena todo: dónde vive el cambio
Hay una sola pregunta que separa a todos estos frameworks: cuando un dato cambia, ¿qué vuelve a ejecutarse? En un extremo, el re-render: React reejecuta el componente, produce un árbol virtual nuevo y lo reconcilia contra el viejo para hallar el mínimo cambio de DOM. En el otro, el grano fino: el signal que cambió notifica directamente a la computación que actualiza el nodo exacto, sin árbol intermedio ni comparación.
Solid nació en ese segundo extremo, y la noticia de la década es que casi todos se están moviendo hacia él. El motivo es económico: el coste del re-render —recalcular y comparar lo que no cambió— es real y crece con la app, mientras que el grano fino paga solo por lo que de verdad cambia. Cuando un modelo gana esa clase de argumento, el ecosistema termina imitándolo.
flowchart TD P[cuando un dato cambia que reejecuta] --> A[re-render: reejecuta el componente y reconcilia un arbol] P --> B[grano fino: el signal actualiza el nodo exacto] A --> RE[React aun reejecuta aunque el compilador memoice] B --> SV[Svelte 5 adopta runes basados en signals] B --> VU[Vue Vapor compila fuera el virtual DOM] B --> SO[Solid: signals de runtime mas compilacion mas ownership] QK[Qwik mueve otro eje: resumabilidad sin hidratacion] --> SO style A fill:#f38ba8,color:#11111b style B fill:#a6e3a1,color:#11111b style SO fill:#89b4fa,color:#11111b
El mismo contador hace visible el eje. En React, el cuerpo del componente vuelve a correr entero en cada cambio, y el compilador solo evita recalcular lo que memoiza; en Solid, el cuerpo corre una vez y solo la interpolación se reevalúa.
// React: el cuerpo REEJECUTA en cada set; el compilador memoiza, no elimina el re-render
function Contador() {
const [n, setN] = useState(0);
console.log("cuerpo React"); // se imprime en cada actualizacion
return <button onClick={() => setN(n + 1)}>{n}</button>;
}
// Solid: el cuerpo corre UNA vez; solo la computacion de {n()} se reevalua
function Contador() {
const [n, setN] = createSignal(0);
console.log("cuerpo Solid"); // se imprime UNA sola vez en toda la vida
return <button onClick={() => setN(n() + 1)}>{n()}</button>;
}
Ese console.log es el experimento que zanja la discusión: en React se imprime en cada clic, en Solid una sola vez en toda la vida del componente. No es una diferencia de velocidad, es una diferencia de modelo mental, y de ella se derivan casi todas las demás —por qué en Solid no destructuras props, por qué no hay array de dependencias, por qué un useMemo no tiene equivalente necesario—.
Frente a frente, sin adornos
React es el gigante y su modelo es el re-render. React 19 y su compilador auto-memoizan para que no tengas que escribir useMemo y useCallback a mano, lo cual acerca la ergonomía a la de Solid —pero por debajo sigue reejecutando componentes y reconciliando árboles, solo que menos veces—. Donde Solid te da grano fino por diseño, React te lo aproxima con una capa de compilación sobre un modelo que sigue siendo de re-render.
Su fuerza, además, no es principalmente técnica sino gravitacional: el ecosistema más grande con diferencia, una reserva de talento inmensa y —esto sí es una ventaja de fondo— los React Server Components, cuyo modelo de servidor está hoy más maduro y más probado en producción que el de SolidStart. Si tu apuesta principal es una arquitectura server-first a gran escala, es honesto reconocer que React llegó antes y más lejos por ese camino.
Svelte 5 hizo el giro más llamativo: sus runes —$state, $derived, $effect— son signals con otro nombre, y abandonó el viejo modelo de invalidación por asignación. Compila a algo diminuto y su DX es exquisita. La diferencia con Solid es sutil pero de fondo: las runes de Svelte están atadas al compilador y a los archivos .svelte; los signals de Solid son valores de runtime, funciones que puedes crear, pasar, derivar y componer en cualquier módulo TypeScript, dentro o fuera de un componente. Svelte optimiza la escritura; Solid optimiza la composición.
// Solid: un signal es un valor de runtime; vive y viaja en cualquier modulo .ts
export function crearContador(inicial = 0) {
const [n, setN] = createSignal(inicial);
return { n, incr: () => setN((x) => x + 1) }; // se exporta, se pasa, se compone
}
// Svelte: $state solo existe dentro de la compilacion de un .svelte;
// no puedes exportar una rune cruda desde un modulo .ts y reusarla igual.
Esa distinción no es académica: decide cómo testeas. La lógica de estado de Solid se prueba en un test de Node puro, sin renderizar nada, porque es solo funciones; la de Svelte suele necesitar montar el componente. Optimizar la escritura, como hace Svelte, y optimizar la composición, como hace Solid, son metas distintas que se pagan en sitios distintos.
Vue Vapor lleva la reactividad de Vue —ref, reactive, que siempre fue signal en espíritu— a un modo que compila fuera el virtual DOM, convergiendo visiblemente hacia el modelo de Solid. Vue gana en amplitud: dos modos de render, una API enorme, un ecosistema empresarial sólido y documentación de referencia.
Paga esa amplitud en superficie conceptual: más maneras de hacer lo mismo, la coexistencia de dos modos de render que mantener, y una reactividad potente pero con sus propias trampas de unwrapping de refs. Donde Solid apuesta por una sola idea llevada al extremo, Vue apuesta por cubrir todos los estilos, y cada apuesta tiene su público.
Qwik juega en otro eje. No compite en cómo propaga cambios —también usa signals— sino en cómo arranca: en vez de hidratar (reejecutar en el cliente lo que el servidor ya renderizó), resume, serializando el estado y el grafo para continuar donde el servidor lo dejó, con coste de arranque casi constante sin importar el tamaño de la app. Solid hidrata; Qwik reanuda. Para una app enorme donde el time-to-interactive manda, la resumabilidad de Qwik es una respuesta distinta a una pregunta que Solid contesta con hidratación en streaming.
Vale la pena ver la cronología para calibrar quién siguió a quién. Solid llevaba signals de grano fino desde 2019. React presentó su compilador años después para paliar el coste del re-render sin cambiar el modelo. Svelte, que en sus versiones 3 y 4 usaba invalidación por asignación, reescribió su reactividad con runes basadas en signals en la versión 5. Vue, cuya reactividad siempre fue signal en espíritu, estrenó Vapor mode para compilar fuera el virtual DOM. Ninguno adoptó el grano fino porque estuviera de moda: lo adoptó porque el argumento de rendimiento y de composición que Solid defendía en soledad resultó, con los años, incontestable.
Que todos adopten signals no los vuelve intercambiables. El signal es el ladrillo; lo que difiere es el edificio. React pone signals debajo de un modelo que sigue reejecutando. Svelte los ata a su compilador y su formato de archivo. Vue los envuelve en una API amplia con dos modos. Qwik los usa para resumir en vez de hidratar. Solid los deja crudos, como funciones de runtime, y los combina con compilación a DOM y un árbol de ownership. La misma pieza, cinco arquitecturas. Comparar solo el ladrillo es no ver la casa.
Qué hace único a Solid
Lo que ningún otro reúne a la vez es la tríada: signals que son valores de runtime componibles como funciones planas, un compilador que convierte el JSX en creación de DOM real sin runtime de VDOM, y un árbol de ownership que ata y libera recursos solo.
Cada rival tiene alguna pieza, ninguno las tres. React tiene ergonomía JSX pero no grano fino nativo; Svelte tiene grano fino pero atado al compilador y a su formato de archivo; Vue converge hacia el grano fino pero carga una API amplia y dos modos; Qwik optimiza el arranque en un eje distinto. Solid es el único que te da el JSX y el TypeScript que ya conoces sin re-render, con signals que viajan fuera de los componentes y una limpieza que nunca escribes. La firma no es ninguna pieza suelta —hoy todas están repartidas— sino su combinación exacta.
Esa composición fuera del componente es la ventaja más infravalorada. Como un signal es solo una función, puedes fabricar lógica de estado en un módulo neutro, testearla sin montar nada, y compartirla entre componentes o incluso frameworks. Es la misma propiedad que hace que los primitivos de la comunidad se encadenen como funciones puras: el modelo no tiene costuras entre «dentro» y «fuera» del árbol.
// store.ts: estado compartido en un modulo neutro, sin ceremonia
const [sesion, setSesion] = createSignal<Usuario | null>(null);
export const usuario = sesion; // getter de solo lectura
export const entrar = (u: Usuario) => setSesion(u); // dos componentes lo consumen
// Header.tsx y Perfil.tsx importan `usuario` y reaccionan sin provider ni hook:
// el mismo signal, leido desde cualquier sitio, mantiene su reactividad intacta.
Ningún otro framework te da exactamente esto: en React necesitarías un contexto o una store externa; en Svelte, la rune no sale del componente sin envoltura; en Solid, el estado compartido es un módulo que exporta funciones, y ya está.
Dónde flaquea de verdad
Y ahora la parte que un fan omitiría. Solid es más pequeño en todo lo que no es rendimiento: menos librerías —a veces la de gráficos, tablas o auth que necesitas solo existe para React—; menos talento disponible —contratar un experto en Solid es más difícil que en React—; un meta-framework más joven que Next.js, con menos features de nicho y menos batallas de producción ganadas; y menos respaldo corporativo, lo que para algunas organizaciones es un riesgo de longevidad que no pueden asumir.
Ese déficit de ecosistema es concreto, no abstracto. Llega el día en que necesitas una tabla virtualizada con edición en línea, o un SDK de pagos, o un editor de texto rico maduro, y descubres que en React hay tres opciones probadas y en Solid ninguna del todo lista. Puedes envolver la versión vanilla con un primitivo —el track te enseñó cómo—, pero eso es trabajo que en React ya estaría hecho. La superioridad del modelo no rellena ese hueco.
Su curva de entrada es real y específica: «el componente corre una vez» y «no destructures props» tumban a quien llega con los reflejos de React, y esos tropiezos cuestan semanas de bugs sutiles antes de que el modelo encaje. Nada de esto es un defecto técnico; es el precio de ser el mejor modelo con la comunidad más pequeña, y fingir que no existe es el error de todo entusiasta.
Si tuvieras que resumir cada uno en una frase útil para decidir: React gana por gravedad —ecosistema, talento, servidor maduro— aunque su modelo sea el más antiguo. Svelte 5 ofrece la mejor DX con signals atados a su compilador. Vue Vapor converge hacia el grano fino cargando una API amplia y dos modos. Qwik responde a otra pregunta, la del arranque, con resumabilidad. Solid tiene el modelo más limpio y componible, y la comunidad más pequeña. No hay un ganador universal: hay un ganador por restricción, que es justo el tema de la próxima lección.
React
Re-render con compilador que memoiza. Gana en ecosistema, RSC y talento. Aproxima el grano fino en vez de tenerlo por diseño.
Svelte 5 · Vue Vapor
Signals de verdad: runes atadas al compilador en Svelte, VDOM compilado fuera en Vue. Convergen hacia Solid desde su propia historia.
Qwik
Otro eje: resumabilidad sin hidratación, arranque casi constante. No compite en propagación sino en time-to-interactive.
La lectura madura del panorama de 2026 es incómoda para el entusiasta y clarificadora para el arquitecto: Solid ganó el debate técnico —el grano fino sin virtual DOM, que en 2019 sonaba a herejía, es hoy el destino declarado de React, Svelte, Vue y Qwik— y precisamente por haber ganado ese debate perdió su argumento de venta más fácil, porque ya no puedes decir “elige Solid porque es el único con signals” cuando todos los tienen. Lo que queda, y es más sutil, es que la convergencia ocurre en el ladrillo y no en la casa: cada framework metió signals debajo de una arquitectura que arrastra desde su historia, y esas arquitecturas divergen aunque el ladrillo coincida. React los pone bajo un modelo que sigue reejecutando componentes y reconciliando, y los suaviza con un compilador. Svelte los ata a su formato de archivo y a su compilador, comprando ergonomía a cambio de que tu reactividad no salga de .svelte. Vue los envuelve en una superficie amplia con dos modos que debe mantener a la vez. Qwik los reorienta hacia la resumabilidad, respondiendo a una pregunta distinta —el arranque— con la misma pieza. Solid es el único que combina signals de runtime que son funciones planas y componibles en cualquier módulo, un compilador que elimina el VDOM entero en lugar de optimizarlo, y un árbol de ownership que hace la limpieza invisible; esa tríada, no el signal suelto, es su firma, y sigue sin tener réplica exacta. Pero la honestidad exige cerrar la balanza: esa superioridad de modelo convive con una comunidad más pequeña, menos librerías, un pool de contratación estrecho, un meta-framework más joven y menos respaldo institucional, y ninguna de esas carencias se arregla teniendo razón en lo técnico. El experto de verdad sostiene las dos verdades a la vez sin que le tiemble la mano —Solid tiene el mejor modelo y la desventaja de ecosistema es real— porque solo desde esa doble lucidez se elige bien, y elegir bien, no ganar discusiones de foro, es de lo que trata la arquitectura.
- Sitúa React, Svelte 5, Vue Vapor, Qwik y Solid sobre el eje “qué reejecuta cuando un dato cambia” y justifica la posición de cada uno.
- Explica la diferencia real entre las runes de Svelte 5 y los signals de Solid apelando a “atado al compilador” frente a “valor de runtime componible”.
- Argumenta por qué Qwik no compite en el mismo eje que Solid, y qué pregunta responde su resumabilidad que la hidratación en streaming responde de otro modo.
- Nombra la tríada que hace único a Solid y muestra qué framework tiene cada pieza por separado pero ninguno las tres juntas.
- Enumera tres debilidades reales de Solid que no se arreglan con su superioridad técnica, y pon un ejemplo concreto de proyecto donde cada una pesaría más que el rendimiento.