Changelog
A history of notable changes, fixes, and features in Coda.
v1.0.0August 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