Freya 0.4: la biblioteca GUI de Rust se independiza de Dioxus

Fuentes: Freya 0.4 — Rust GUI library drops Dioxus dependency in biggest rewrite yet

Freya es una biblioteca para construir interfaces gráficas (GUI) escrita en Rust. Su versión 0.4, publicada el 16 de julio de 2026 por su autor, marc2332, representa la mayor reescritura del proyecto desde sus inicios y llega tras aproximadamente un año de trabajo desde la versión 0.3.

El cambio más relevante es la eliminación de la dependencia con Dioxus, el framework reactivo sobre el que Freya se apoyaba desde sus primeras versiones. Dioxus estaba pensado principalmente para la web, lo que imponía limitaciones de seguridad de tipos, extensibilidad y simplicidad. Además, cualquier cambio aguas arriba podía afectar a Freya aunque no estuviera alineado con su dirección. La reescritura replicó un modelo similar al de Dioxus y React —con hooks, callbacks y un sistema de estado asíncrono— pero construido desde cero y adaptado a las necesidades de Freya, lo que permite a la biblioteca controlar toda la pila tecnológica.

La nueva API abandona la macro rsx!() y la sustituye por un patrón builder con atributos totalmente tipados. El nombre de use_signal pasa a ser use_state, los componentes devuelven impl IntoElement y elementos como rect, label y paragraph exponen métodos encadenables para configuración tipada. Esto permite que el compilador detecte errores en los atributos, que el IDE autocomplete correctamente y que los stack traces apunten al código del usuario.

Varios crates del ecosistema Dioxus fueron bifurcados y renombrados: dioxus-radio se convirtió en freya-radio, dioxus-query en freya-query, dioxus-i18n en freya-i18n y dioxus-clipboard en freya-clipboard. Se incorporaron nuevos crates como freya-icons, freya-animation, freya-edit, freya-terminal, freya-webview, freya-markdown, freya-router o freya-android, y se reorganizaron otros como freya-hooks, freya-native-core y freya-elements.

Otra novedad destacada es que los elementos ya no están hardcodeados en el framework: cualquier persona puede implementar el trait ElementExt para definir elementos completamente personalizados con su propio layout, renderizado y diffing. El changelog completo está disponible en el repositorio de GitHub del proyecto.