v1.2.0 Release Notes
Docker Image:
docker pull ghcr.io/aquantumofdonuts/mixarr:latest
Docker Usage:
docker run -d \
--name mixarr \
-p 3443:443 \
-v ~/mixarr-data:/data \
-e SESSION_SECRET="$(openssl rand -hex 32)" \
-e FRONTEND_URL="https://YOUR-SERVER-IP:3443" \
-e BASE_URL="https://YOUR-SERVER-IP:3443" \
ghcr.io/aquantumofdonuts/mixarr:latestBugfixes
- Issue #24: Lidarr import settings are not respected
- Issue #22: Allow renaming custom spotify playlists
- Issue #21: Can't access the WebUI on http
- Issue #20: slskd server ban (warning)
- Fix modals not scrollable on small screens
- Fix Discogs subscription error on save
- Fix Musicbrainz subscription error on save
- Fix subscription edit using PUT to match API route
- Fix Spotify category preset field name mismatch
- Fix Docker image typo (aquantumofdonums → aquantumofdonuts)
- Expose port 3010 for direct web access in unified Docker image
- Prevent worker auto-import in test environment
- Pass monitorOption from Lidarr connection settings when adding artists
Security
- Sanitize 5xx errors in production responses
- Add session secret validation warning
- Add auth rate limiting verification tests
- Global rate limiting for CodeQL findings
Added - Lidarr Monitor New Items
- Add "Monitor New Albums" dropdown to Lidarr connection settings
- Support for None, All, New, and Existing monitor options
- Automatically apply monitor setting when adding artists via subscriptions
Subscription System Refactoring
- Extract SubscriptionService with TDD (business logic layer)
- Add SubscriptionController with TDD (HTTP layer)
- Wire CRUD routes through controller pattern
- Extract SubscriptionFormModal component (1019 lines)
- Extract SubscriptionCard component (204 lines)
- Extract subscription-constants.ts (260 lines)
- Add useCreateSubscription and useUpdateSubscription hooks
- Reduce subscriptions/page.tsx from 1,179 to 214 lines (82% reduction)
Added - Type Safety & Code Quality
- Add Socket.IO type definitions to eliminate
as anycasts - Add shared subscription types and result handling constants
- Standardize error logging across all API routes
- Consolidate LidarrConnectionConfig to single canonical type
Documentation
- Add pre-release cleanup documentation
slskd Integration (Major Feature)
Added
- Add slskd (Soulseek) as a new connection type with schema validation
- SlskdService: search, downloads, connection test functionality
- SlskdSubscriptionProcessor with peer quality scoring algorithm
- SlskdDownload model for tracking download status and history
- API endpoints for downloads with filtering, retry, and cancel actions
- Webhook endpoint for download completion events
- Polling job for download status detection (2-minute interval)
- SlskdOrganizerService for automatic file organization
- Rate limiting with exponential backoff to protect slskd server
- Queue monitoring and metrics for download operations
- Two-phase commit for transaction safety
- 30-second timeout on all slskd API calls
- Search polling loop until search completion
- Peer quality scoring for better download source selection
- Detailed API error parsing with logging
slskd UI
- Downloads page with status filtering and actions (retry, cancel)
- slskd search modal integrated on Search, Discovery, and Review Queue pages
- ArtistCard integration for quick slskd search
Fixed (slskd-specific)
- Fix slskdProcessor scope in finally block (ReferenceError)
- Fix DB error propagation in rate limiting flag check
- Fix memory leak in slskd worker metrics interval
- Fix stale flag caching in subscription processor
- Fix cross-device file moves with copy fallback (EXDEV error)
- Fix BigInt serialization to string in JSON responses
- Export QueueEvents cleanup for graceful shutdown
Security (slskd-specific)
- Path traversal security fix in slskd webhook handler
- Unicode normalization before path validation (prevent bypass attacks)
Documentation
- Add slskd rate limiting operations guide
Upgrade Instructions
From Docker Compose
cd mixarr
git fetch --tags
git checkout v1.2.0
docker compose up -d --buildFrom Docker Run
docker pull ghcr.io/aquantumofdonuts/mixarr:v1.2.0
docker stop mixarr
docker rm mixarr
docker run -d \
--name mixarr \
-p 3443:443 \
-v ~/mixarr-data:/data \
-e SESSION_SECRET="your-existing-secret" \
-e FRONTEND_URL="https://YOUR-SERVER-IP:3443" \
-e BASE_URL="https://YOUR-SERVER-IP:3443" \
ghcr.io/aquantumofdonuts/mixarr:v1.2.0Full Changelog
See v1.0.0...v1.2.0