Durvald
Reproductor de música local-first con interfaz SolidJS y núcleo nativo en Rust
2025
Contexto
Durvald es un reproductor de escritorio local-first para Windows, macOS y Linux, creado para devolver al usuario el control sobre su colección musical. En lugar de depender del catálogo y la conectividad de un servicio de streaming, la aplicación indexa archivos locales, organiza artistas y lanzamientos y mantiene colas, playlists e historial en el dispositivo.
Presentación de la interfaz e identidad visual de Durvald.
Problema técnico
Una biblioteca local combina tareas con características diferentes: lectura intensiva de archivos y metadatos, reproducción de audio en tiempo real, persistencia transaccional y una interfaz que debe responder de inmediato. Ejecutar todo en el proceso de la interfaz bloquearía la UI y mezclaría responsabilidades nativas con la capa de presentación.
La solución separa responsabilidades mediante una frontera IPC. SolidJS se ocupa de la presentación y el estado reactivo; los comandos de Tauri envían las operaciones privilegiadas a Rust. El núcleo procesa archivos, controla el audio, mantiene la cola y persiste datos sin acoplar esos detalles a los componentes visuales.
Arquitectura
El frontend se organiza en páginas, componentes, hooks y stores. La comunicación con el backend ocurre mediante invoke, mientras eventos como progress-update y song-changed llevan los cambios del reproductor de vuelta a la interfaz.
En el proceso nativo, Tokio coordina tareas asíncronas; Kira reproduce MP3, OGG, FLAC y WAV por streaming; Lofty extrae tags, propiedades técnicas y portadas; y SQLite almacena biblioteca, playlists, cola, historial, ajustes y última sesión. Las operaciones bloqueantes de la base usan un pool de conexiones y tareas dedicadas.
Reproducción y continuidad
El reproductor mantiene una cola VecDeque, historial en memoria y la pista actual. Los cambios también se reflejan en SQLite. Un loop asíncrono detecta el final de cada pista, inicia el siguiente elemento y emite el nuevo estado a la interfaz.
La última sesión registra pista, progreso, volumen, shuffle, modo repeat, snapshot de la cola y contexto de origen. Esto permite retomar la experiencia después de cerrar la aplicación.
Integración y seguridad
La integración Last.fm implementa autenticación por token, now playing, scrobbling y reintentos offline. Un rate limiter serializa las solicitudes para respetar el intervalo de la API. En macOS, los secretos se guardan en Keychain; en Windows y Linux se cifran con AES-256-GCM y se vinculan a la máquina y al usuario. Los archivos de audio permanecen locales.
Aplicación de escritorio multiplataforma
Durvald funciona de forma nativa en Windows, macOS y Linux. Tauri combina la interfaz SolidJS y el núcleo Rust en una única aplicación de escritorio, con acceso controlado al sistema de archivos, reproducción de audio y almacenamiento de credenciales específico de cada plataforma.
El pipeline de producción valida TypeScript antes de que Vite genere los recursos de interfaz incorporados en la aplicación. Cargo verifica el núcleo Rust y Tauri produce instaladores específicos para cada plataforma.
Límites y evolución
La aplicación ya funciona en los tres sistemas operativos compatibles. Los próximos objetivos de calidad son introducir pruebas automatizadas para stores, comandos y persistencia, además de formalizar migrations de la base. La indexación también depende de la consistencia de los metadatos presentes en los archivos del usuario.