A Flutter video browser & downloader powered by NewPipe Extractor — search, browse, watch, and download from YouTube without an API key.
⚠️ Disclaimer. UDownload is an independent, educational project. It is not affiliated with, endorsed by, or sponsored by Google/YouTube. "YouTube" is a trademark of Google LLC. You are responsible for complying with the terms of service of any platform you access and with the copyright laws in your jurisdiction. Use it for personal, lawful purposes only.
- 🔎 Search — YouTube search with autocomplete suggestions and a YouTube Music mode.
- 🏠 Home feed — category tabs (Trending, Music, Gaming, Movies, News, Sports) + dynamic kiosk tabs, all with infinite-scroll pagination.
- 📺 Channels — info, uploads, and tab browsing (Videos, Shorts, Live, Playlists).
- 🎵 Playlists — details and paginated track/video listings.
▶️ Native player — ExoPlayer-based playback with quality selection, video chapters, related videos, and comments (with reply threads).- ⬇️ Downloads — download videos through the native layer.
- 🌙 Polish — light/dark themes, responsive phone/tablet layouts, keep-screen-awake while playing, and reCAPTCHA handling via an in-app WebView.
| Home | Search | Player |
|---|---|---|
![]() |
![]() |
![]() |
Add your own captures to
docs/screenshots/(PNG) and adjust the table above.
| Requirement | Version |
|---|---|
| Flutter | 3.x (Dart SDK ≥ 3.12) |
| Platform | Android only (minSdk 22 / Android 5.1+) |
| JDK | 17 |
The player and extraction layers rely on native Android code; iOS/web/desktop are not supported.
git clone https://github.com/OttomanDeveloper/u_downloader.git
cd u_downloader
flutter pub get # pulls newpipeextractor_dart ^2.0.0 from pub.dev
flutter runUDownload integrates AppLovin MAX (ads), OneSignal (push), and
Firebase (analytics/messaging). These need your own accounts/keys and a
google-services.json to function; core features still work without them
(ads/push/analytics will simply be inert). Never commit real keys.
- Flutter + Dart 3
- State / DI:
flutter_bloc,hydrated_bloc,equatable,get_it - Routing:
go_router - Extraction/playback:
newpipeextractor_dart(NewPipe Extractor + a native ExoPlayer view) - UI:
google_fonts,auto_size_text,shimmer,responsive_framework,loading_indicator,animate_do - Misc:
flutter_inappwebview(reCAPTCHA),wakelock_plus,share_plus,url_launcher,permission_handler,shared_preferences,path_provider - Services:
applovin_max,onesignal_flutter, Firebase
Layered, with a clear separation between data, logic, and UI:
lib/
├─ core/
│ ├─ blocs/ # Cubits / BLoCs (search, channel, playlist, comments, …)
│ ├─ server/ # Repositories wrapping the extractor (videos, channel, …)
│ ├─ functions/ # get_it setup, url handling, cookies, isolates, parsers
│ └─ models/ extensions/ database/ …
├─ views/
│ ├─ screens/ # dashboard (home/categories/downloads), search, channel,
│ │ # playlist, video_details, splash …
│ └─ widgets/ # reusable widgets (video cards, shimmers, native player …)
└─ meta/hooks/ # hooks_meta.dart — shared barrel import
Conventions: state via Cubit/BLoC (no setState), network access only through a
repository, stateless token-based pagination, and a bounded native thread
pool with request timeouts. See CONTRIBUTING.md for details.
Contributions are welcome! Please read CONTRIBUTING.md for setup, conventions, and the PR workflow. By contributing you agree your work is licensed under GPL-3.0.
UDownload is licensed under the GNU General Public License v3.0 — see LICENSE and NOTICE.
This project depends on NewPipe Extractor (GPL-3.0); the copyleft license is inherited from that dependency. Note that combining GPL-3.0 code with the bundled proprietary SDKs (AppLovin/OneSignal/Firebase) can create licensing conflicts when distributing binaries — review with legal counsel before publishing builds. See NOTICE for full attributions.
- TeamNewPipe/NewPipeExtractor
- newpipeextractor_dart
- The Flutter & Dart open-source community
Maintained by Muhammad Usman (@OttomanDeveloper).


