El primer tauri dev
Qué ocurre cuando ejecutas el comando de desarrollo: el orden real de las cosas, por qué la primera vez tarda tanto, qué se recarga solo y qué no, y cómo se lee su salida.
La secuencia
bun run tauri devPor qué la primera vez tarda tanto
Es la pregunta más frecuente y la respuesta tranquiliza. En el paso 3, Cargo no compila solo tu código: compila todas las dependencias, y el árbol de Tauri es grande —el framework, wry, tao, la maquinaria de serialización, un runtime asíncrono—. Son cientos de paquetes, y es normal que la primera compilación en una máquina nueva se cuente en minutos.
Lo importante es que es una sola vez. Cargo guarda los artefactos compilados en el directorio de destino del proyecto, y las siguientes compilaciones solo rehacen lo que cambió: tu código, casi siempre. Un cambio en un comando recompila en segundos.
Tres consecuencias prácticas:
- No borres el directorio de destino para «limpiar» salvo que sepas por qué. Estás tirando el trabajo de esos minutos.
- La integración continua sí paga ese precio cada vez, a menos que guarde ese directorio en caché entre ejecuciones. Es lo primero que hay que configurar cuando el nivel 73 llegue.
- La compilación de producción es más lenta todavía, porque activa las optimizaciones. Eso es el nivel 10.
Qué se recarga y qué no
La regla es sencilla y ahorra mucha confusión:
| cambias… | qué pasa |
|---|---|
| HTML, CSS, JavaScript, componentes | recarga en caliente, instantánea. Es tu servidor de desarrollo, no Tauri |
| un comando o cualquier cosa de Rust | recompila y reinicia la aplicación entera |
tauri.conf.json |
recompila: la configuración se incrusta en el binario |
un fichero de capabilities/ |
recompila: el manifiesto lo genera build.rs |
| un icono o un recurso del bundle | recompila |
La fila que importa es la segunda: tocar Rust reinicia la aplicación, así que se pierde el estado de la interfaz —la pantalla en la que estabas, lo que habías escrito en un formulario—. Es la fricción principal del desarrollo con Tauri, y hay una forma de mitigarla que conviene adoptar pronto: mientras trabajas en la interfaz, trabaja en el navegador, contra el servidor de desarrollo, sin arrancar Tauri. Solo necesitas la aplicación cuando lo que tocas cruza el puente.
Eso funciona si tu frontend no da por hecho que invoke existe, que es justo la disciplina que el nivel 53 recomienda por otros motivos.
Leer la salida
La salida del comando mezcla tres fuentes y distinguirlas ahorra tiempo:
VITE v7.0.0 ready in 312 ms ← tu frontend Compiling mi-app v0.1.0 ← cargo, compilando el core Finished dev profile in 4.2s ← cargo, terminado Running `target/debug/mi-app` ← el binario arrancando[error] failed to invoke 'greet' ← tu aplicación, en ejecuciónY hay una cuarta fuente que no aparece ahí: el JavaScript de tu interfaz. Los mensajes de la consola del frontend van a las herramientas de desarrollo de la webview, no al terminal. Confundir eso lleva a pensar que un console.log no se ejecuta cuando lo que pasa es que se imprime en otro sitio. El nivel 55 trata cómo ver las dos mitades en la misma línea de tiempo, y hay un plugin de registro que unifica ambas salidas para no tener que mirar en dos ventanas.