newpipeextractor_dart 2.0.0
newpipeextractor_dart: ^2.0.0 copied to clipboard
Flutter plugin wrapping NewPipe Extractor for YouTube data extraction. Extract video info, streams, subtitles, comments, channels, playlists, search results, and trending content — no API key required.
2.0.0 #
Relicensed to GPL-3.0, plus stateless token-based list pagination so multiple feeds can page independently without sharing a single native cursor.
Breaking changes #
- Relicensed from BSD-3-Clause to GPL-3.0. This package wraps NewPipe
Extractor (GPL-3.0); the license now matches it. Applications that use this
package are subject to the GPL-3.0. See
LICENSEandNOTICE. - Pagination is now driven by
PageTokeninstead of internal cursors. Each list call returns its items plus a continuation token; pass that token back to fetch the next page. This lets independent lists (e.g. several category feeds plus search) paginate concurrently without clobbering each other.- New types:
PageToken,PageDto,StreamListPageDto, and theStreamPage/SearchPagetypedefs (({items, next})/({result, next})). searchYoutube/searchYoutubeMusicnow return the result plus anexttoken. The no-arggetNextPage()/getNextMusicPage()are replaced bysearchNextPage(query, filters, token)/searchMusicNextPage(query, filters, token).getChannelUploads/getPlaylistStreams/getTrendingVideos/getKioskContentnow return({items, next})instead of a bare list.getChannelNextPage(url, token),getChannelTabNextPage(url, tabFilter, token),getPlaylistNextPage(url, token)replace their no-arg predecessors; addedgetTrendingNextPage(token)andgetKioskNextPage(kioskId, token).- Channel-tab results now also carry a
nexttoken.
- New types:
Improvements #
- Network timeouts —
DownloaderImplnow setsconnectTimeout(15s),writeTimeout(30s), and a totalcallTimeout(45s) in addition to the existing read timeout, so a stalled request can no longer hold a worker thread indefinitely.
Fixes #
- Fixed
NetworkOnMainThreadException(crash) when opening a trending/kiosk feed —getKioskContentwas performing the network fetch inside the main-thread callback post; extraction now runs entirely on the worker pool and only the result is delivered to the main thread.
Internal #
- New
ExtractorHelperpage helpers:mapPage,pageFromDto,streamListPage; removed the per-API stateful extractor/page fields now that pagination is stateless.
1.1.0 #
Closes the remaining NewPipe Extractor coverage gaps (all additive — no breaking changes):
- Subscriptions — new
SubscriptionExtractorreads subscription lists from public channel URLs (fromChannelUrl) or exported files (fromFile), withgetSupportedSources/getRelatedUrl. Read-only extraction, not account login. - Generic comments —
ServiceExtractor.getComments/getCommentsNextPageextract comments on any service whose extractor supports them (previously YouTube-only). - Generic channel tabs —
ServiceExtractor.getChannelTabContent/getChannelTabNextPagefetch arbitrary channel-tab content for non-YouTube services that expose tabs. - Localization read APIs —
LocalizationExtractor.getSupportedLocalizations/getSupportedCountriesenumerate the languages/countries a service supports. - Internal: shared comment + tab-item mappers in
ExtractorHelper; the plugin's executor is now a bounded thread pool (was an unbounded cached pool).
1.0.2 #
- Fixed trending extractor — resilient fallback when YouTube changes tab names
- Fixed
subtitlesStreamstypo causing compilation failure (nowsubtitlesDefault) - Removed explicit Kotlin Gradle Plugin dependency (uses Flutter built-in Kotlin)
1.0.1 #
- Added pub.dev badges and updated installation instructions
- Documentation improvements across all public API surfaces
- Comprehensive CONTRIBUTING guide with architecture deep-dive
1.0.0 #
Breaking Changes #
- Complete rewrite — all existing APIs have changed
- Replaced raw
MethodChannelwith type-safe Pigeon bridge - Replaced handwritten models with immutable
freezeddata classes - Replaced Java native layer with Kotlin
- Rebranded package to
com.ottomancoder - Dart SDK minimum raised from 2.17.5 to 3.0.0
- All model constructors changed (now use named parameters with
const factory) YoutubeSearchandYoutubeMusicSearchmerged intoSearchResult- Exception classes consolidated into sealed
ExtractorExceptionhierarchy
New Features #
- Multi-service support — SoundCloud, Bandcamp, PeerTube, media.ccc.de via
ServiceExtractor - Subtitles/captions — extract subtitle tracks with language, format, auto-generated flag
- Live stream support —
StreamTypeenum, HLS/DASH manifest URLs - Comment pagination —
getNextCommentsPage()for scrolling through all comments - Comment replies —
getCommentReplies(index)to load reply threads - Search suggestions —
getSearchSuggestions(query)for autocomplete - Channel tabs — browse Videos, Shorts, Live, Playlists, Channels, Albums tabs
- Playlist pagination —
getPlaylistNextPage()for large playlists - Kiosk support —
listKiosks()andgetKioskContent(kioskId)for Trending, Top 50, etc. - URL validation —
isValidStreamUrl(),isValidPlaylistUrl(),isValidChannelUrl() - Localization control —
setLocalization(languageCode, countryCode)for content language - Cookie management —
CookieExtractorfor setting/getting cookies - Shorts detection —
isShortflag onVideoInfoandStreamInfoItem - Verified badges —
isUploaderVerifiedon videos,isVerifiedon channels and comments - FPS info —
fpsfield onVideoOnlyStreamandVideoStream - Storyboard frames —
Framesetmodel with preview thumbnail grids - Audio track info —
audioTrackName,audioTrackLocale,audioTrackTypefor multi-audio videos - Playlist metadata —
descriptionandplaylistType(normal, mix, album) - Video metadata —
uploaderSubscriberCount,subChannelName/Url/Avatars,licence,supportInfo,privacy - Comment metadata —
isChannelOwner,isUploaderVerified,streamPosition,replyCount - Thumbnails on list items —
StreamInfoItem.thumbnailsfor search results, trending, playlists - Extension methods —
videoOnlyWithHighestQuality,audioWithBestAacQuality,bestAudioForVideo(), etc.
Improvements #
- Extractor caching —
VideoExtractorApiImplcaches the stream extractor by URL, preventing duplicatefetchPage()calls - reCAPTCHA propagation — challenges now propagate as structured
FlutterError("RECAPTCHA")for automatic retry - Thread safety —
ConcurrentHashMapfor cookies, executor shutdown on detach - Error handling — all service extractors wrap property access in try-catch for resilience across services
- Typed HTTP client —
getStream()uses expliciturl/sizeparameters instead ofdynamic
Upgraded Dependencies #
- NewPipe Extractor: v0.24.2 → v0.26.2
- Gradle: 4.1.0 → 8.1.0
- OkHttp: 3.12.13 → 4.12.0
- Gson: 2.8.6 → 2.11.0
- compileSdk: 34 → 35
- desugar_jdk_libs: 1.1.1 → 2.1.4
Bug Fixes #
- Fixed cookie null check in plugin initialization
- Fixed typo in
transistentFailureException.dart→transientFailureException.dart - Fixed trending extractor after default kiosk changed from "Trending" to "Live" in v0.24.8
- Fixed variable shadowing in
ExtractorHttpClient.getStreamthat caused crash on retry - Fixed HTTP client connection leak on error paths
- Fixed
audioWithBestAacQuality/audioWithBestOggQualitycomparingformatNameinstead offormatSuffix - Fixed empty locale country fallback (now defaults to "US")
- Removed debug cookie logging from
DownloaderImpl
0.0.2 #
- Minor updates
0.0.1 #
- Initial Release