multi-source music streaming with provider abstraction
Streams music from multiple free sources (YouTube, Jamendo, SoundCloud, Audius) through a pluggable provider architecture that abstracts source-specific APIs behind a unified interface. The plugin system allows providers to implement streaming, metadata fetching, and search independently, with the core player handling stream selection, quality negotiation, and playback state management across providers.
Unique: Uses a TypeScript-based plugin SDK with a provider registry pattern that allows third-party developers to implement source adapters without forking the core player. The architecture separates provider logic (search, metadata, streaming) from playback orchestration, enabling independent provider updates and testing.
vs alternatives: More extensible than monolithic players like Spotify or Apple Music because any developer can add a new source via the plugin system; more privacy-focused than cloud-based players because sources are aggregated locally without tracking.
local music library indexing and metadata enrichment
Indexes local music files on disk using a file-system scanner that detects audio formats (MP3, FLAC, OGG, etc.) and extracts embedded metadata (ID3 tags, Vorbis comments). The system enriches local metadata by querying external metadata providers (likely Last.fm, MusicBrainz) to fill gaps, normalize artist/album names, and fetch cover art, storing results in a local database for fast subsequent lookups.
Unique: Combines local file-system scanning with external metadata provider queries in a two-phase enrichment pipeline. Uses embedded tag parsing (ID3, Vorbis) for initial extraction, then queries providers to normalize and augment data, storing results in a queryable local database that persists across sessions.
vs alternatives: More comprehensive than iTunes-style tag-only indexing because it enriches incomplete local metadata; more privacy-preserving than cloud-synced libraries (Google Play Music, Apple Music) because indexing happens locally with optional provider queries.
settings persistence and configuration management
Manages user preferences (playback settings, UI preferences, provider configuration) in a persistent local store, likely using JSON or SQLite. The settings system provides a typed interface for reading/writing preferences, with change notifications that trigger UI updates when settings are modified. Settings are organized hierarchically (player settings, provider settings, theme settings) and can be exported/imported for backup or migration.
Unique: Implements settings as a typed, hierarchical store with change notifications that trigger reactive UI updates. The architecture separates settings schema from storage implementation, allowing settings to be persisted in different backends (JSON, SQLite) without changing the API. Settings can be organized by feature (provider settings, playback settings) and accessed programmatically by plugins.
vs alternatives: More flexible than hardcoded defaults because settings are user-configurable and persistent; more maintainable than scattered configuration files because settings are centralized; more extensible than fixed settings because plugins can register custom settings without modifying core code.
playlist and collection management with import/export
Manages user-created playlists and collections stored in a local database with support for importing/exporting standard formats (M3U, PLS, JSON). The system maintains playlist state (track order, metadata, creation date) and provides hooks for import/export operations that transform between internal playlist schema and external formats, enabling interoperability with other music players.
Unique: Implements playlist persistence via a schema-based model (defined in @nuclearplayer/model package) with dedicated import/export hooks that handle format transformation. The architecture separates playlist state management from UI rendering, allowing playlists to be manipulated programmatically via the plugin SDK.
vs alternatives: More portable than streaming-service-locked playlists (Spotify, Apple Music) because exports are standard formats; more flexible than static M3U files because the internal schema supports rich metadata and track resolution across multiple sources.
unified search across local and streamed music with result ranking
Executes search queries against both local library and remote streaming providers, aggregating results from multiple sources and ranking them by relevance using heuristics (match quality, provider priority, popularity). The search system queries the local database for indexed tracks and simultaneously invokes provider search methods, then merges and deduplicates results before presenting to the UI.
Unique: Implements a parallel search architecture that queries local database and remote providers concurrently, then applies a ranking pipeline that considers match quality, provider priority, and result deduplication. The search subsystem is provider-agnostic — new providers automatically participate in searches without code changes.
vs alternatives: More comprehensive than single-source players because it searches local + multiple streams simultaneously; faster than sequential search because provider queries run in parallel; more transparent than algorithmic ranking because ranking rules are deterministic and configurable.
audio playback control with queue management
Manages playback state (play, pause, seek, volume) and a dynamic queue of tracks from mixed sources (local + streamed). The playback engine handles stream selection from multiple providers, bitrate/quality negotiation, and queue manipulation (add, remove, reorder, shuffle, repeat modes). Built on Tauri's audio backend with Rust bindings for low-latency control and state synchronization between main and renderer processes.
Unique: Uses Tauri's Rust backend for audio handling, enabling native OS audio APIs (PulseAudio on Linux, CoreAudio on macOS, WASAPI on Windows) with low-latency control. The queue system is decoupled from playback — tracks can be queued from any provider, and the playback engine resolves streams at play time.
vs alternatives: More responsive than Electron-based players because audio control runs in Rust; more flexible than single-source players because queue can mix local and streamed tracks; more efficient than web-based players because native audio APIs avoid browser audio context overhead.
plugin system with sdk for extending player functionality
Provides a TypeScript-based plugin SDK that allows developers to extend Nuclear with custom providers, themes, and features. Plugins are loaded dynamically at runtime via a plugin registry, with standardized interfaces for provider implementation (search, metadata, streaming), theme definition, and settings management. The plugin system includes a plugin store for discovering and installing community plugins.
Unique: Implements a monorepo-based plugin SDK (@nuclearplayer/plugin-sdk) with standardized interfaces for providers, themes, and settings. Plugins are loaded dynamically via a registry pattern, allowing runtime discovery and installation without recompiling the core player. The SDK includes TypeScript types and documentation for each plugin category.
vs alternatives: More accessible than Electron plugin systems because it uses standard JavaScript/TypeScript; more modular than monolithic players because plugins are independently versioned and distributed; more community-friendly than closed-source players because the plugin SDK is open-source and well-documented.
cross-platform desktop application with tauri runtime
Builds a lightweight desktop application using Tauri (Rust + React) that compiles to native binaries for Windows, macOS, and Linux. The architecture separates the Rust backend (audio handling, file I/O, system integration) from the React frontend (UI rendering), communicating via Tauri's IPC bridge. This approach reduces binary size and memory footprint compared to Electron while maintaining cross-platform compatibility.
Unique: Uses Tauri's Rust backend for system-level operations (audio, file I/O, OS integration) while keeping the UI in React, enabling a modular architecture where performance-critical code runs natively. The monorepo structure (managed with Turborepo) separates player logic, UI components, and plugins into independent packages that can be developed and tested in isolation.
vs alternatives: Smaller binary footprint than Electron (Tauri ~50-100MB vs Electron ~150-300MB) because Tauri leverages system WebView instead of bundling Chromium; faster startup and lower memory usage because Rust backend avoids JavaScript overhead; more maintainable than pure Rust TUI because React provides rich UI capabilities.
+3 more capabilities