An ad-free YouTube client for Android — built with Flutter.
AdlessTube is a privacy-friendly, open-source YouTube front-end that lets you browse, search, watch, and download videos without ads, trackers, or interruptions. It uses NewPipeExtractor under the hood to resolve video streams directly, so nothing is proxied through a third-party server.
Grab the latest APK from the Releases page:
Requires Android 6.0 (Marshmallow) or newer.
The goal of AdlessTube is simple: watch YouTube the way you want to.
- 🚫 No ads. Ever. Not before, during, or after a video.
- 🕵️ No tracking. No analytics, no telemetry, no profiling.
- 📴 Offline playback. Download videos and music to watch or listen later.
- 🎨 Clean, familiar UI. Feels like the YouTube app, minus the clutter.
- 🔓 Open source. Fully transparent, community-driven, and free forever.
It's built for people who want an uninterrupted viewing experience on their own terms.
- Personalized home feed built from your watch history, subscriptions, saved videos, and search history.
- Endless scroll with an interleaved recommendation engine — no two refreshes look the same.
- Full video player with quality selection, playback speed (0.25x – 2x), double-tap to seek, and gesture controls.
- Dubbed audio support — switch between original and dubbed language tracks on the fly.
- Picture-in-Picture (PiP) mode on Android.
- Floating mini player that keeps videos playing while you browse.
- Dedicated music player with background playback and media notification controls.
- Like songs, build a favorites queue, and start an endless radio of similar tracks.
- Autoplay related songs when the queue ends.
- Full music search with live suggestions.
- Vertical, full-screen short video feed.
- Preloads the next short ahead of your swipe for instant playback.
- Personalised from your subscriptions and regional trends.
- Download video + audio, video only, or audio only.
- Parallel segmented downloads for significantly faster speeds.
- Live progress with pause, resume, and cancel.
- Download music directly from the music player.
- Watch history, subscriptions, saved videos, and downloads — all in one place.
- Fully searchable and organized by tab.
- Region selection (20+ countries) for localized trending and music feeds.
- Service toggles — enable or disable YouTube, Shorts, or Music independently.
- Light / Dark / System theme.
- Default video quality preference.
- Search history with live YouTube-suggested queries.
- Beautiful shimmer skeleton loaders throughout the app.
- In-app update checker powered by GitHub Releases.
AdlessTube doesn't use YouTube's official API. Instead, it relies on NewPipeExtractor, an open-source Java library that extracts video metadata and stream URLs directly from YouTube's public pages.
┌──────────────────────────────────────────────────────────┐
│ AdlessTube App │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────────────┐ │
│ │ Home Feed │ │ Music │ │ Shorts │ │
│ └─────┬──────┘ └─────┬──────┘ └─────────┬──────────┘ │
│ │ │ │ │
│ └───────────────┼────────────────────┘ │
│ ▼ │
│ ┌───────────────────────┐ │
│ │ NewPipeService │ │
│ │ (caching + parsing) │ │
│ └───────────┬───────────┘ │
└────────────────────────┼─────────────────────────────────┘
▼
┌───────────────────────┐
│ newpipeextractor │
│ (Dart FFI bridge) │
└───────────┬───────────┘
▼
┌───────────────┐
│ YouTube │
└───────────────┘
| Layer | Responsibility |
|---|---|
newpipe_service.dart |
Wraps newpipeextractor_dart. Handles search, trending, channels, related videos, and stream resolution. Includes a shared in-memory cache (15 min TTL for streams, 30 min for related videos) so navigating back and forth is instant. |
recommendation_service.dart |
Builds the personalized home feed using weighted lottery selection across multiple source types — subscribed channels, related videos from recent watches, topic keywords, saved videos, and regional trending. |
video_playback_service.dart |
App-wide video player powered by media_kit. Handles quality switching, audio track selection, playback state persistence, and mini player lifecycle. |
music_playback_service.dart |
Background music player using audio_service + just_audio. Provides Android media notification controls and queue management. |
download_service.dart |
Segmented parallel downloader with live progress. Pre-allocates the target file and writes each segment via a positioned RandomAccessFile handle — typically 3–5× faster than a single connection. |
storage_service.dart |
Hive-based local persistence for history, subscriptions, liked songs, saved videos, downloads, settings, search history, and feed impression memory. |
- Flutter SDK
3.24.0or newer — install guide - Android SDK with API level 21+ (Android 5.0 Lollipop minimum)
- Java JDK
17or newer - A physical Android device or emulator
Verify your setup:
flutter doctor-
Clone the repository
git clone https://github.com/devfahim00/AdlessTube.git cd AdlessTube -
Install dependencies
flutter pub get
-
Build the debug APK (for testing)
flutter build apk --debug
-
Build the release APK
flutter build apk --release
The output APK will be at:
build/app/outputs/flutter-apk/app-release.apk -
Build split APKs per ABI (smaller downloads)
flutter build apk --split-per-abi --release
Outputs:
build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk build/app/outputs/flutter-apk/app-arm64-v8a-release.apk build/app/outputs/flutter-apk/app-x86_64-release.apk
flutter runTo select a specific device:
flutter devices
flutter run -d <device-id>To sign your own release builds, create android/key.properties:
storePassword=<your-password>
keyPassword=<your-password>
keyAlias=<your-key-alias>
storeFile=<path-to-your-keystore>Then reference it in android/app/build.gradle.kts under signingConfigs.
- Go to the Releases page.
- Download the latest
app-release.apk(or the ABI-specific variant for your device). - On your Android device, enable Install unknown apps for your browser or file manager:
- Settings → Apps → Special access → Install unknown apps
- Open the downloaded APK and tap Install.
- Launch AdlessTube, pick your region and services, and you're ready to go.
# Connect your device via USB with USB debugging enabled
flutter install --releaseOr manually install a built APK:
adb install build/app/outputs/flutter-apk/app-release.apk- Select your region — this determines trending and music feeds.
- Choose services — enable YouTube, Shorts, and/or Music.
- Start browsing — the home feed personalizes as you watch, search, and subscribe.
You can change region and services anytime from Menu → Region and Menu → Services.
lib/
├── main.dart # App entry point, provider setup
├── models.dart # Data models (VideoItem, DownloadItem, etc.)
├── storage_service.dart # Hive-based local persistence
├── newpipe_service.dart # YouTube extraction + caching
├── recommendation_service.dart # Home feed recommendation engine
├── video_playback_service.dart # App-wide video player
├── music_playback_service.dart # Background music player
├── download_service.dart # Segmented parallel downloader
├── suggestion_service.dart # Search-as-you-type suggestions
├── update_service.dart # GitHub Releases update checker
├── region_service.dart # Supported regions list
├── widgets.dart # Shared UI components + skeletons
├── service_select_screen.dart # First-launch service picker
├── region_select_screen.dart # First-launch region picker
└── screens/
├── main_shell.dart # Bottom nav + mini player
├── home_screen.dart # Personalized YouTube feed
├── music_screen.dart # Music discovery feed
├── shorts_screen.dart # Vertical shorts feed
├── library_screen.dart # History / Subs / Saved / Downloads
├── search_screen.dart # YouTube search
├── music_search_screen.dart # Music search
├── player_screen.dart # Video player
├── music_player_screen.dart # Now Playing screen
├── video_controls.dart # Custom player controls
├── channel_screen.dart # Channel browse
├── downloads_screen.dart # Downloads manager
├── menu_screen.dart # Menu / settings hub
├── settings_screen.dart # App settings
└── region_change_screen.dart # Region switcher
| Package | Purpose |
|---|---|
newpipeextractor_dart |
YouTube metadata & stream extraction |
media_kit |
Video playback engine (mpv-based) |
just_audio |
Music playback |
audio_service |
Background audio + media notifications |
provider |
State management |
hive_flutter |
Local key-value storage |
cached_network_image |
Thumbnail caching |
android_pip |
Picture-in-Picture support |
share_plus |
Share sheet integration |
url_launcher |
External link handling |
package_info_plus |
App version info |
Contributions are welcome and appreciated!
- Fork the repository.
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m "Add my feature" - Push to the branch:
git push origin feature/my-feature - Open a Pull Request.
- Follow the existing code style and keep widgets/service boundaries clean.
- Run
flutter analyzebefore submitting — no new warnings. - Add comments for non-obvious logic.
- Test on a real device when possible.
Found a bug or have a feature idea? Open an issue.
AdlessTube is an unofficial YouTube client and is not affiliated with, endorsed by, or sponsored by YouTube or Google LLC.
- All video content is fetched directly from YouTube's public infrastructure.
- This app does not host, store, or redistribute any copyrighted material.
- Users are responsible for complying with YouTube's Terms of Service in their region.
- The app is provided as-is for personal, educational, and research purposes.
If you enjoy the content you watch, please support the creators directly.
This project is licensed under the GNU General Public License v3.0.
You may copy, distribute, and modify this software under the terms of the GPLv3. See the LICENSE file in this repository for the full text, or read it online at https://www.gnu.org/licenses/gpl-3.0.html.
Copyright (C) 2026 devfahim00
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
- Telegram: t.me/projectredfox
- Issues: GitHub Issues
- Releases: GitHub Releases
⭐ If you find this project useful, please consider giving it a star! ⭐
Made with ❤️ by devfahim00