Release 0.8.0

@emberkit/core 0.8.0@emberkit/cli 1.0.0@emberkit/icons & @emberkit/ui 6.0.0

Esta release añade efectos reactivos, View Transitions, routing API en dev, imports SQL raw, bindings de hidratación más robustos y correcciones para cargar emberkit.config.ts en el plugin de Vite.

Destacados

ÁreaQué cambió
SignalscreateEffect y createMemo rastrean dependencias y se re-ejecutan cuando cambian los signals
View TransitionsTransiciones SPA integradas vía render(..., { viewTransitions: true })
Dev APIdevApiPlugin y rutas por archivo src/routes/_api/* en desarrollo
Hidratacióndata-ek-bind más rico para inputs; guía para listas async tras SSR
VitesqlRawPlugin() para imports *.sql?raw (Workers / edge)

Efectos reactivos y memos

Antes de 0.8.0, createEffect se ejecutaba una sola vez en el cliente. Ahora:

  • Rastrea lecturas dentro del effect (y dentro de createMemo)
  • Se re-ejecuta cuando cambian esos signals
  • Respeta untrack() y agrupa notificaciones vía batch()
  • Omite la ejecución durante SSR (window es undefined)
import { createSignal, createEffect } from '@emberkit/core';

const [query, setQuery] = createSignal('');

createEffect(() => {
  document.title = `Search: ${query()}`;
});

Consulta Signals — Effects.

View Transitions

Habilita cambios de ruta fluidos con la View Transitions API nativa:

import { render } from '@emberkit/core';
import App from './routes/_layout.tsx';
import { routes } from 'virtual:emberkit-routes';

render(App, document.getElementById('app')!, {
  routes,
  viewTransitions: true,
});

También exportados: supportsViewTransitions, withViewTransition, initViewTransitions, navigateWithViewTransition y navigate(..., { viewTransition: true }).

Guía completa: View Transitions.

Middleware Dev API

En desarrollo, reenvía /api y /api/* a un handler Node o a rutas por archivo bajo src/routes/_api/.

Opción A — config:

// emberkit.config.ts
export default defineConfig({
  devApi: {
    handler: './src/server/api-router.node.ts',
    export: 'handleApiRequestNode',
  },
});

Opción B — plugin Vite explícito (mismo comportamiento):

import { devApiPlugin, emberkitVitePlugin } from '@emberkit/core/vite-plugin';

plugins: [
  devApiPlugin({
    handler: './src/server/api-router.node.ts',
    export: 'handleApiRequestNode',
  }),
  emberkitVitePlugin(),
];

Si devApi no está configurado y tienes rutas src/routes/_api/*, el routing API por archivo se habilita automáticamente.

Detalles: Dev API.

sqlRawPlugin

Importa archivos SQL como strings en build time (útil para migraciones en Cloudflare Workers, donde no hay filesystem):

import migration from '../migrations/001_init.sql?raw';
import { sqlRawPlugin, emberkitVitePlugin } from '@emberkit/core/vite-plugin';

plugins: [sqlRawPlugin(), emberkitVitePlugin()];

Mejoras de hidratación

  • Inputs: data-ek-bind en <input>, <textarea> y <select> sincroniza .value; los botones pueden enlazar disabled.
  • SSR + listas async: La hidratación no re-renderiza listas .map() cuando un signal se actualiza. Consulta Listas dinámicas tras SSR.

Correcciones del plugin Vite (0.8.0)

  • emberkit.config.ts se transpila con esbuild cuando el plugin carga opciones (corrige que devApi no se aplicara bajo Node plano).
  • El middleware SSR en dev omite peticiones /api para que no se rendericen como páginas HTML.
  • El matching de prefijo API acepta /api y /api/* (no solo /api/... con path final).

CLI 1.0.0

La versión major del CLI se alinea con core 0.8.0. Las plantillas de scaffold fijan rangos de dependencias compatibles. Sin cambios breaking en comandos CLI más allá de la alineación de versiones.

Checklist de migración

  1. Actualiza dependencias: @emberkit/core@^0.8.0, @emberkit/cli@^1.0.0, opcional @emberkit/icons@^6.0.0 / @emberkit/ui@^6.0.0.
  2. Elimina shims locales si copiaste vite.dev-api-plugin.ts o vite-sql-raw.ts de apps antiguas.
  3. Añade devApi o devApiPlugin para rutas API locales.
  4. Habilita viewTransitions: true en render() y elimina scripts custom de view-transition si estaban duplicados.
  5. Para páginas SSR con listas obtenidas en cliente, sigue la guía de hidratación para listas dinámicas.

Próximos pasos