Releases: devlusoft/devix
v0.4.1-beta.9
devix v0.4.1-beta.9
Bug fixes
Fix en carga de config con dependencias externas
Al transpilar devix.config.ts, el archivo temporal se generaba en el directorio del sistema (%TEMP% en
Windows, /tmp en Unix). Esto causaba ERR_MODULE_NOT_FOUND al intentar resolver paquetes como
@devlusoft/devix porque Node busca node_modules relativo a la ubicación del archivo importado.
El archivo temporal ahora se escribe en la raíz del proyecto del usuario, donde la resolución de módulos
funciona correctamente.
v0.4.1-beta.8
devix v0.4.1-beta.8
Bug fixes
Fix de compatibilidad con Node.js 22 en Windows
Los comandos dev, build, generate y start fallaban en Node 22 con ERR_UNKNOWN_FILE_EXTENSION al intentar
importar devix.config.ts directamente. Node 22 (LTS) no soporta archivos .ts nativamente — ese
comportamiento solo está disponible desde Node 23.6+.
La carga del config ahora se hace a través de una utilidad centralizada (loadConfig) que usa esbuild para
transpilar el archivo antes de importarlo, funcionando correctamente en Node 18, 20, 22 y 25.
v0.4.1-beta.7
devix v0.4.1-beta.7
Nuevas features
Soporte para iconos en Metadata
Ahora puedes definir favicons y otros íconos directamente desde el objeto Metadata de tu página:
export const metadata: Metadata = {
title: 'Mi app',
icons: '/favicon.ico',
// o también
icons: [
{ href: '/favicon.ico', rel: 'icon', type: 'image/x-icon' },
{ href: '/apple-touch-icon.png', rel: 'apple-touch-icon', sizes: '180x180' },
]
}
El campo icons acepta:
- Un string (URL del ícono)
- Un objeto MetadataIcon con href, rel, type y sizes
- Un array de MetadataIcon
Bug fixes
Fix crítico para Windows — los comandos dev, build, generate y start fallaban en Windows con
ERR_UNSUPPORTED_ESM_URL_SCHEME al cargar módulos con rutas absolutas. Las rutas ahora se convierten
correctamente a file:// URLs antes de pasarse al loader ESM de Node.
v0.4.1-beta.6
Bug Fixes
- Fix: Navegación SPA rota en modo static
El cliente siempre fetcha /_data/ al navegar, pero en modo static no había servidor que respondiera
ese endpoint. Ahora devix generate pre-genera un archivo JSON por ruta en dist/client/_data/ y devix start
los sirve en modo static. - Fix: dist/server se generaba innecesariamente en modo static
El build SSR es necesario durante la generación para pre-renderizar el HTML, pero no para servir el sitio.
Ahora devix generate elimina dist/server al finalizar cuando output: "static".
v0.4.1-beta.5
fix: typos
v0.4.1-beta.4
Bug Fixes
- Fix: scroll-behavior: smooth ignorado en navegación cliente
scrollIntoView() y window.scrollTo() no leían el scroll-behavior del CSS automáticamente. Ahora se lee el
valor computado del documento y se pasa explícitamente, respetando la preferencia del usuario tanto en
scroll al hash como en scroll al top. - Fix: scroll-behavior: smooth ignorado en carga directa con hash
El mismo problema aplicaba al scroll inicial tras la hidratación. Corregido en el entry client con el mismo
enfoque.
v0.4.1-beta.3
Bug Fixes
- Fix: Dev server no iniciaba tras implementar autoreload
El proceso hijo buscaba devix-dev-server.js relativo al proyecto del usuario en lugar del directorio del
CLI. La lógica del servidor fue separada a dev-server.ts y la ruta se resuelve ahora con import.meta.url. - Fix: no scrolleaba al elemento
Al navegar cliente a una URL con hash, window.scrollTo(0, 0) sobreescribía el scroll al elemento. Ahora se
scrollea al elemento con id correspondiente al hash si existe, y al top solo si no hay hash. - Fix: Scroll al hash en navegación cross-page
El scroll al hash ocurría antes de que React commitiera el nuevo DOM, por lo que el elemento aún no existía.
El scroll ahora se ejecuta dentro de requestAnimationFrame para garantizar que corre después del render. - Fix: Hash ignorado en carga directa
Al entrar directamente a una URL con hash (ej. /#section), la hidratación de React desplazaba el layout
después de que el browser intentaba el scroll nativo. Ahora se fuerza el scroll al elemento tras el primer
frame pintado.
v0.4.1-beta.2
fix: dev server
v0.4.1-beta.1
Bug Fixes
- Fix: #tag en URLs causa 404 en navegación cliente
Los fragmentos hash (/page#section) no se stripeaban antes del route matching, causando que la ruta no se
encontrara y devolviera 404. - Fix: CSS URLs rotas en rutas anidadas
En dev mode, Vite genera módulos CSS internos para inline styles (html-proxy) cuyas URLs no son paths
válidos. Al inyectarlos como se resolvían como relativos a la ruta actual, causando requests con URLs
corruptas.
Improvements
- Feat: Autoreload al modificar devix.config.ts
El dev server ahora detecta cambios en devix.config.ts y reinicia el proceso automáticamente. - Feat: Imports server-only en page/layout files
Los exports loader, guard, generateStaticParams y headers son automáticamente stripeados del bundle cliente
durante el build. Esto permite usar imports de node:* u otros módulos server-only en el top-level del
archivo sin errores de browser compatibility. No requiere cambios en el código del usuario.
v0.4.0
v0.4.0
Nuevas funcionalidades
useNavigate()— navegación programática con soporte dereplacey View Transitions APIconst navigate = useNavigate() navigate('/dashboard') navigate('/login', { replace: true }) navigate('/shop', { viewTransition: true })
- useRevalidate() — re-fetch de los datos del loader sin recargar la página
const revalidate = useRevalidate()
await revalidate() - redirect() con opciones — soporte de replace para no agregar entrada al historial del cliente
return redirect('/login', { replace: true }) - Autocompletado de rutas en $fetch — TypeScript sugiere los paths de las rutas API existentes del proyecto
- Tipado de params en PageProps — tipado directo sin necesidad de un loader
export default function Page({ params }: PageProps<{ id: string }>) {} - publicDir configurable — nueva opción en devix.config.ts para cambiar el directorio de archivos estáticos
(default: 'public')
Corrección de bugs
- Corregido mismatch de hidratación con Radix UI y librerías que usan useId — el servidor ahora renderiza la
misma estructura de árbol de fibras que el cliente - Corregido error useRequest() called outside of a request handler causado por instancias duplicadas de
AsyncLocalStorage en el bundle de esbuild - Corregido crash en layouts (data=undefined) cuando un guard redirigía — los errores del loader ahora
retornan 500 y muestran la página de error - Corregido tipo de retorno never en $fetch cuando el handler retorna un Response plano
- Corregido useNavigate / useRevalidate lanzando error durante SSR fuera de un RouterProvider
- Corregido: los archivos de la carpeta public ahora se sirven correctamente en producción — publicDir se
resuelve con ruta absoluta y el build SSR ya no copia archivos estáticos innecesariamente