Skip to content

Défis & solutions

Cross-platform packaging

Le défi — Produire un installeur natif pour Windows (.msi), Linux (.deb) et macOS (.dmg) depuis un seul codebase, de manière automatisée.

La solution — Tauri gère nativement les trois plateformes. Le workflow GitHub Actions utilise une matrice de runners :

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

Chaque runner produit l'installeur de sa plateforme via tauri-apps/tauri-action, et tout est publié dans une GitHub Release automatiquement dès qu'un tag est poussé.


L'overlay OBS sans serveur externe

Le défi — Faire communiquer une application desktop avec une source navigateur dans OBS, sans dépendre d'un service cloud ni d'un serveur hébergé.

La solution — Un serveur WebSocket embarqué dans l'application Tauri, implémenté côté Rust avec tokio-tungstenite. OBS se connecte à localhost:9876 comme à n'importe quel WebSocket. Quand l'application se ferme, la connexion tombe. Tout reste local.


Synchronisation du Stream Deck

Le défi — Le plugin Stream Deck doit connaître les platines configurées dans l'application, sans couplage direct entre les deux.

La solution — Protocole de handshake simple : au démarrage, le plugin envoie GET_DECKS_CONFIG. L'application répond avec la liste complète des platines (nom, type, icône en base64). Si la configuration change, l'utilisateur peut déclencher une re-synchronisation depuis le plugin.


Pochettes d'album locales dans l'overlay

Le défi — Les pochettes peuvent venir d'une URL externe ou d'un fichier local. L'overlay OBS (un navigateur) ne peut pas accéder au système de fichiers local de l'utilisateur.

La solution — Quand l'utilisateur sélectionne un fichier local, l'application Tauri le lit côté Rust et le convertit en base64. L'image est ensuite incluse directement dans les messages WebSocket sous forme de data URI. L'overlay n'accède jamais au disque — tout passe par le WebSocket.


Synchronisation de version

Le défi — Trois fichiers doivent contenir la même version : package.json, tauri.conf.json et Cargo.toml. Les oublier mène à des builds incohérents.

La solution — Un script scripts/sync-version.js lit la version dans package.json et met à jour automatiquement les deux autres fichiers. Il est déclenché automatiquement via les hooks npm prebuild et pretauri, rendant la mise à jour manuelle impossible à oublier.