feat: update ui components to material 3 expressive by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7444
feat: add support for viewing downloaded playlists by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7810
feat: support for trending categories (gaming, trailers, ...) by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7592
feat: use system default animations by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7053
feat: display search suggestion / typo correction in results page by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7780
feat: support edge to edge by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7507
feat: new semitone mode in playback options sheet by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7579
feat: filter members-only videos from channel tab by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7677
feat: keep queue history when opening new video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7676
Small new features / Quality of Life changes
feat: add 'change region' button in TrendsFragment by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7816
feat: add delays between subscription imports to avoid rate limits by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7693
feat: add toggle to include timestamp in playlists/subscriptions expo… by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7691
feat: allow drag-to-seek like YouTube by @osamasayed585 in https://github.com/libre-tube/LibreTube/pull/7757
feat: automatically pause downloads when network changes to metered by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7696
feat: display title of downloading video by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7578
feat: show download playlist name by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7768
feat: dynamically scale landscape player based on screen size by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7477
feat: enable edge-to-edge in bottom sheets by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7574
feat: extract playlist name from filename at YouTube CSV imports by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7481
feat: disable video track when minimized while PiP is off by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7601
feat: list all added custom instances in link share dialog by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7652
feat: load cached and downloaded images even if data saver mode disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7396
feat: logarithmic brightness scaling by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7536
feat: request user confirmation before clearing playback queue by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7752
feat: separate 'clone' and 'create' when creating a new playist by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7597
feat(subscriptions sheet): filter list by currently selected group by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7702
feat: support for setting locale in Android settings for app (A13+) by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7512
feat: show snackbar when unsubscribing by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7679
feat: show toolbar when scrolling up in subscriptions feed for better accessibility by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7673
Layout changes
feat: improve channel row layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7769
feat: improve comments row, replies and sheet styles and layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7774
feat: improve dialogs buttons style by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7726
feat: improve filter sort sheet ux by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7775
feat: improve description style and layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7782
feat: library text style and layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7784
feat: improve playlist layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7766
feat: improve playlist thumnail card by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7724
feat: replace image buttons with material 3 expressive icon buttons by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7709
feat: style of the sort button for download content by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7733
feat: subscription layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7783
Bug Fixes
fix: disable 'Add to playlist' button and spinner when there is no playlist available by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7603
fix(player): move screenshot writing task to background thread by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7735
fix(player ui): better control overlays visibility by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7636
fix: appbar and bottom navigation paddings not properly applied by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7623
fix: audio player autoplay doesn't work if autoplay countdown enabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7480
fix: auth api not immediately updated after selecting instance by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7566
fix: auto-fullscreen on shorts stopped working by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7638
fix: autoplay countdown appears when manually skipping to next video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7674
fix: channel page scroll position reset when entering fullscreen by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7811
fix: collapse description when loading new video by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7553
fix(Comments): decrease intensity of creator badge by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7809
fix: comments sheet not dismissed when next video starts by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7437
fix: comment time not localized by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7509
fix: crash in trends when uploader url is unknown by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7750
fix: crash when deleting subsequent downloads by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7567
fix: crash when loading dearrow in search result by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7717
fix: crash when opening app with no internet connection by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7718
fix: crash when opening other video while in background player by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7455
fix: crash when setting video title with dearrow by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7778
Fix crash when streams size > 1MB by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7530
fix: create playlist dialog shows URL instead of name text input field by default by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7621
fix: display ContentItems with UNKNOWN availability by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7813
fix: don't cancel subscriptions import if some channels can't be imported by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7692
fix: filter only StreamInfoItems for availability by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7684
Fix: floating buttons by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7725
fix: hide channel avatar if there's none by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7751
fix(Home): hide Trending category by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7675
fix: home screen error not shown if homepage fails to load by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7776
fix: icon color of subscriptions toggle button by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7777
fix: image loading issues when scrolling too fast on a list by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7649
Fix initial video player margin issue in PlayerFragment by @101paul in https://github.com/libre-tube/LibreTube/pull/7753
fix: instance selection dialog not updated after modifying custom instances by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7565
fix: keyboard showing up in player screen by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7662
fix: last selected playlist is not remembered in AddToPlaylistDialog by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7527
fix: library buttons overflowing in some languages by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7747
fix: localization of comment time by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7748
fix: location category is empty on A13+ by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7688
fix: offline player video title not updating when playing next video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7439
fix: PiP button not working as intended by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7622
fix(player): clear current stream when closing player by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7429
fix: player not paused when switching to other apps while pauseOnQuit is on by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7615
fix(player ui): seek and skip buttons appear at opposite side in rtl mode by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7635
fix: playlist/subscription imports don't complete for larger data by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7440
fix: prevent accidential navigation to the uploader instead of video by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7817
fix: queue missing when playing playlist video in background by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7456
fix: remove HLS message by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7564
fix: repeat mode doesn't work in offline player by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7438
fix: reset to previous pitch value if input is empty by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7606
fix: screen turns off while player active after switching to video mode by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7479
fix: seek buttons always visible if double tap to seek disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7573
fix: seek buttons still visible when player locked by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7639
fix: select main video language in download dialog by default by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7510
fix: Show a blank video when transitioning to a new video, just to inform the user that the new video is being loaded by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7526
fix: 'show in seekbar' sponsorblock option causes app to crash by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7388
fix: shuffling downloads leaves queue empty if insertRelatedStreams disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7593
fix: SponsorBlock segments skipped even if temporarily allowed by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7395
fix(sponsorblock): segment time not properly parsed if exceeds 1 hour by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7637
fix(SubscriptionsFragment): reset scroll position when switching Chan… by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7808
fix(trending): 'Trailers' and 'Podcasts' content got swapped by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7758
fix: trends fragment contains only first 10 items by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7695
fix(UI/Comments): only show creator reply indicator for the initial comment by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7613
fix: videos added to watch history even though history is disabled by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7760
fix: enable legacy TTML subtitle decoding support in Media3 by @Bilal-Ahmad123 in https://github.com/libre-tube/LibreTube/pull/7492
fix: improve landscape player UI by @bermount in https://github.com/libre-tube/LibreTube/pull/7475
fix: fetch dearrow via background thread in VideoCardsAdapter by @dhanuarf in https://github.com/libre-tube/LibreTube/pull/7795
Refactor
refactor: provide service type via startForeground compat method by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7739
refactor: refactor comments logic by @Pittvandewitt in https://github.com/libre-tube/LibreTube/pull/7076
refactor: improve sizes in home layout by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7767
refactor: load deArrow when video gets visible for better loading times by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7694
refactor: make feed notifications more robust against subscription changes by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7376
refactor: merge general and advanced settings categories by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7687
refactor: move player related sub-views to its own binding by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7550
refactor(Preferences): use MIGRATION length as version by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7442
refactor: re-use cached home page trends in trends fragment for faster load times by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7600
refactor: slightly simplify usages of onScrollStateChanged by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7812
refactor: some small padding changes by @Elolcol in https://github.com/libre-tube/LibreTube/pull/7785
refactor: unify error handling to be more robust by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7618
refactor: use enum for top-level destinations by @osamasayed585 in https://github.com/libre-tube/LibreTube/pull/7762
refactor: use videoId for storing downloaded files by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7576
revert: downgrade media3 by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7595
refactor(Preferences/SponsorBlock): drop VISIBLE option by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7434
refactor: remove download title by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7575
refactor: remove legacy subscription view by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7406
Chores
build: keep NewPipeExtractor auto-generated proto classes by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7571
build: update NewPipeExtractor by @FineFindus in https://github.com/libre-tube/LibreTube/pull/7458
chore: fix images in readme by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7738
chore: remove accidentially commited file by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7518
Chore: Remove context parameter from InstanceRepository by @SEKI-YUTA in https://github.com/libre-tube/LibreTube/pull/7466
chore: remove hls over dash preference by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7508
Chore: Remove unused imports whole application by @SEKI-YUTA in https://github.com/libre-tube/LibreTube/pull/7468
chore: revert Improve landscape UI by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7476
chore: update media3 to v1.7.1 by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7617
chore: update newpipeextractor to latest version by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7779
chore: update npe fork by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7568
chore: use ListAdapter#currentList instead of manual items impl by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7452
chore: use sentence case in settings and remove ampersand by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7435
ci: replace deprecated wrapper-validation action by @Bnyro in https://github.com/libre-tube/LibreTube/pull/7511
New Contributors
@SEKI-YUTA made their first contribution in https://github.com/libre-tube/LibreTube/pull/7466
@Bilal-Ahmad123 made their first contribution in https://github.com/libre-tube/LibreTube/pull/7492
@dhanuarf made their first contribution in https://github.com/libre-tube/LibreTube/pull/7526
@Elolcol made their first contribution in https://github.com/libre-tube/LibreTube/pull/7726
@osamasayed585 made their first contribution in https://github.com/libre-tube/LibreTube/pull/7762
@101paul made their first contribution in https://github.com/libre-tube/LibreTube/pull/7753
Full Changelog: https://github.com/libre-tube/LibreTube/compare/v0.28.1...v29.0