| Area |
Features |
| 🎬 Player |
ExoPlayer, double-tap seek (±10s), speed (0.25x–5x), quality selector, loop, captions, stats for nerds, fullscreen pinch-zoom |
| 📺 UI |
YouTube-style flat bottom nav (Home, Shorts, Create+, Notifications, Profile), dark theme, mini player |
| 🏠 Home |
Category feeds, video cards, channel bar, pull-to-refresh, shimmer loading |
| 📱 Shorts |
Vertical swipe feed, autoplay, like/dislike, share |
| 👤 Profile |
Avatar, stats, playlists, history, downloads, liked videos, sign-in prompt |
| ⚙️ Settings |
11 sub-pages: General, Account, Data Saver, Autoplay, Quality, Downloads, TV, History, Privacy, Notifications, Accessibility |
| 🔐 Login |
2-step login with guest mode, YouTube-style form |
| ⬇️ Downloads |
Quality selector, download manager |
| 🔔 Notifications |
Notification feed |
| 💬 About |
Developer credits, version info, release notes |
┌─────────────────────────────────────────────────────────────────┐
│ Screenshots coming soon — Replace this section with your own │
│ device screenshots of Home, Player, Settings, Profile, etc. │
└─────────────────────────────────────────────────────────────────┘
# Option 1: Direct download
curl -O http://187.127.175.206:8080/app-release.apk
adb install app-release.apk
# Option 2: Browse to URL
open http://187.127.175.206:8080/
# Clone
git clone https://github.com/codexskills/YouTubeClone.git
cd YouTubeClone
# Build
chmod +x gradlew
./gradlew assembleRelease
# Output: app/build/outputs/apk/release/app-release-unsigned.apk
# Sign with your keystore before install
| Layer |
Technology |
| Language |
Kotlin 2.0 |
| UI |
Jetpack Compose, Material 3 |
| Player |
ExoPlayer (Media3) |
| API |
InnerTube (YouTube) |
| Async |
Coroutines + Flow |
| DI |
Hilt |
| Storage |
DataStore Preferences |
| Build |
Gradle 9.4, Kotlin 2.3 |
| Min SDK |
API 24 (Android 7.0) |
| Target SDK |
API 36 |
app/
├── src/main/java/com/darkk/youtube/
│ ├── data/
│ │ └── LocalRepository.kt # DataStore + session management
│ ├── download/
│ │ └── DownloadManager.kt # Video download handler
│ ├── innertube/
│ │ ├── InnerTubeClient.kt # YouTube API client
│ │ └── PlayerData.kt # Data models
│ ├── ui/
│ │ ├── components/ # Reusable composables
│ │ │ ├── VideoOptionsSheet.kt
│ │ │ ├── DownloadDialog.kt
│ │ │ └── YouTubeTopBar.kt
│ │ ├── screens/ # All screen composables
│ │ │ ├── HomeScreen.kt
│ │ │ ├── ShortsScreen.kt
│ │ │ ├── PlayerScreen.kt # 1800+ lines
│ │ │ ├── ProfileScreen.kt
│ │ │ ├── SettingsScreen.kt
│ │ │ ├── LoginScreen.kt
│ │ │ ├── AboutScreen.kt
│ │ │ ├── NotificationsScreen.kt
│ │ │ ├── CreateScreen.kt
│ │ │ ├── SettingsSubPage.kt # Reusable settings UI
│ │ │ └── *_SettingsScreen.kt # 11 sub-settings
│ │ └── theme/
│ └── viewmodel/
│ └── YouTubeViewModel.kt # Main ViewModel
├── src/main/res/
│ ├── drawable/
│ │ ├── ic_launcher_foreground.xml # YouTube-style play icon
│ │ └── ic_launcher_background.xml # Red background
│ └── mipmap-*/ # Launcher icons
└── build.gradle.kts
Settings stored via DataStore:
| Setting |
Values |
Default |
| Playback Speed |
0.25x – 5x |
1x (Normal) |
| Video Quality |
Auto, 144p–1080p |
Auto |
| Data Saver |
On/Off |
Off |
| Autoplay |
On/Off |
On |
| Dark Theme |
On/Off |
On |
| Save History |
On/Off |
On |
| Captions |
Off / Language |
Off |
| Loop |
On/Off |
Off |

Red (#FF0000)
|

Play Triangle
|
YouTube-style adaptive icon for API 26+

Codex Skiller
Android Developer & Creator
|
This project is for educational purposes only.
YouTube is a trademark of Google LLC.
InnerTube API is unofficial and may break at any time.