Changelog
A history of notable changes, fixes, and features in Coda.
v1.4.0September 2026
Features
- iPod Classic layout with a fully functional click wheel — scroll, click, and center Select with haptics
- Period-accurate wide iPod screen with menu-driven navigation
- Music, Artists, Albums, and Playlists library browsing
- Now Playing with click-wheel scrubbing and volume control
- Search, Reorder Mode, and more inside the iPod UI
- 8 device finishes — Classic White, Classic Black, Aluminum, and the four Mini colors (Settings > Appearance)
Fixes
- Real battery level and charging indicator on the iPod status bar
- Fixed missing artwork on the iPod Now Playing screen for cached and offline tracks
- Redesigned lyrics view with an always-visible controls row underneath
- Moved shuffle and repeat onto the top status bar instead of duplicated player controls
- Now Playing chrome (progress bar, lyrics, toggle) now matches the selected device finish
- Fixed ExpoFontLoader and battery native-module crashes on launch
v1.3.0September 2026
Features
- Batch Download All — grab an entire playlist or Navidrome album at once
- Playlist detail: tap the cloud icon in the header to download every non-cached Navidrome track
- Navidrome album browse view: Download All button under the breadcrumb
- Library multi-select can batch-download selected tracks together
- Live progress bar, per-track spinners/progress, and cancel for ongoing batches
- Failed downloads are reported and retried in one tap from the playlist banner
- Already-offline tracks are skipped automatically; resume re-downloads only what is missing
v1.2.0September 2026
Features
- New iPad layout with sidebar navigation replacing the bottom tab bar
- Responsive layout with device-adaptive touch targets and content width
- Safe-area (home indicator / notch) fixes for tablet views
- iPhone experience unchanged
v1.1.0September 2026
Features
- Support multiple saved Navidrome server configurations — switch between servers without re-entering credentials
- Each server's library, playlists, downloads, and playback state are fully isolated
- New server management UI in Settings — add, edit, delete, and switch servers
- Connection test before saving to verify server accessibility
- Transparent migration from single-server — existing users are unaffected
v1.0.0September 2026
Playback Engine
- Fixed overlapping audio on rapid track switching — only one player is active at a time
- Fixed stale progress bar after switching tracks
- Fixed track and playback position not persisting across app restarts
- Fixed Navidrome cached tracks failing to restore on launch
- Made position saves asynchronous to prevent UI thread blocking
Swipe Gestures
- Rebuilt SwipeableRow on react-native-gesture-handler + react-native-reanimated for 60fps UI-thread animations
- Fixed swipe-to-reveal accidentally triggering row play actions
- Added horizontal/vertical gesture disambiguation to prevent conflicts with FlatList scrolling
Lyrics
- Fixed multi-timestamp LRC lines displaying raw timestamp text
- Fixed lyrics sync drift after tap-to-seek
- Reduced highlight delay from 300ms to 200ms for tighter sync
- Added support for LRC files with optional fractional seconds
Security
- Encrypted Navidrome and Last.fm credentials with AES-256-GCM in settings JSON
- Moved encryption key to expo-secure-store (iOS Keychain / Android Keystore)
- Auto-migrated legacy plaintext credentials from AsyncStorage to SecureStore
- Replaced Math.random() with CSPRNG for salt generation
- Added file path sanitization for server-provided IDs in offline cache
- Removed unused RECORD_AUDIO permission on Android
Performance
- Split isPlaying into isolated context — eliminates 10x/sec re-renders of all useAudio() consumers
- Split sleep timer into isolated context to prevent 1x/sec re-renders
- Deferred synchronous filesystem cache scan until after UI is interactive
- Migrated all image components to expo-image with memory-disk caching
- Added FlatList virtualization tuning for large libraries
- Memoized smart playlist evaluation to avoid O(n) library scans per render
Features
- 5-band native equalizer with 6 presets (Flat, Bass Boost, Treble, Vocal, Rock, Pop)
- Smart playlists with rule-based filtering (play count, favorites, artist, album, source)
- Last.fm scrobbling and now-playing updates
- Synced lyrics via LRCLIB with tap-to-seek and fallback to plain text
- Crossfade and seamless/gapless playback modes
- Sleep timer with 30-second fade-out
- Playback speed control (0.5x–2.0x)
- Offline download and caching for Navidrome tracks and artwork
- 4 themes — Dark, Light, Midnight, Ocean
- File import via document picker for local audio
- Background audio with lock screen and Control Center controls
- Batch operations — multi-select for favoriting, playlist add, download, delete
- Shuffle with Fisher-Yates algorithm
- Centralized file storage in Coda/ folder, visible in iOS Files app
- Clear Cache and Clear Data settings with confirmation dialogs