Skip to content

Desafíos y soluciones

Empaquetado multiplataforma

El desafío — Producir un instalador nativo para Windows (.msi), Linux (.deb) y macOS (.dmg) desde un único codebase, de manera automatizada.

La solución — Tauri gestiona de forma nativa las tres plataformas. El workflow de GitHub Actions utiliza una matriz de runners:

yaml
strategy:
  matrix:
    os: [ubuntu-22.04, windows-latest, macos-latest]

Cada runner produce el instalador de su plataforma vía tauri-apps/tauri-action, y todo se publica automáticamente en una GitHub Release en cuanto se empuja un tag.


El overlay OBS sin servidor externo

El desafío — Hacer que una app de escritorio se comunique con una fuente de navegador en OBS, sin depender de un servicio cloud ni de un servidor alojado.

La solución — Un servidor WebSocket embebido en la app Tauri, implementado en Rust con tokio-tungstenite. OBS se conecta a localhost:9876 como a cualquier WebSocket. Cuando la app se cierra, la conexión cae. Todo permanece local.


Sincronización del Stream Deck

El desafío — El plugin Stream Deck necesita conocer los platos configurados en la app, sin acoplamiento directo entre ambos.

La solución — Protocolo de handshake simple: al iniciar, el plugin envía GET_DECKS_CONFIG. La app responde con la lista completa de platos (nombre, tipo, icono en base64). Si la configuración cambia, el usuario puede activar una re-sincronización desde el plugin.


Portadas de álbum locales en el overlay

El desafío — Las portadas pueden venir de una URL externa o de un archivo local. El overlay OBS (un navegador) no puede acceder al sistema de archivos local del usuario.

La solución — Cuando el usuario selecciona un archivo local, la app Tauri lo lee en el lado Rust y lo convierte a base64. La imagen se incluye directamente en los mensajes WebSocket como data URI. El overlay nunca accede al disco — todo pasa por el WebSocket.


Sincronización de versiones

El desafío — Tres archivos deben contener la misma versión: package.json, tauri.conf.json y Cargo.toml. Olvidarse de uno lleva a builds inconsistentes.

La solución — Un script scripts/sync-version.js lee la versión de package.json y actualiza automáticamente los otros dos archivos. Se activa automáticamente mediante los hooks npm prebuild y pretauri, haciendo imposible olvidar la actualización manual.