A safe, toddler-friendly YouTube viewing app for Android. Designed specifically for young children (ages 1-4), KidsTube provides a distraction-free, curated video experience with large touch targets and parental controls.
- Large colorful thumbnails - No text, just big pictures perfect for little fingers
- 2-column grid layout - Easy to browse and tap
- Full-screen video player - Immersive viewing experience
- Auto-hiding controls - Clean playback, controls appear on tap
- Bright, cheerful theme - Engaging colors kids love
- Multi-language support - 12 languages: Dutch, English, Spanish, Portuguese, French, German, Russian, Arabic, Japanese, Korean, Hindi, Turkish
- 40+ curated channels - Free RSS feeds (zero API quota), including:
- English: CoComelon, Peppa Pig, Paw Patrol, Blippi, Super Simple Songs, BabyBus, and more
- Spanish: El Reino Infantil, Cleo y Cuquin, Pocoyó
- Portuguese: Galinha Pintadinha, Turma da Mônica
- French: Monde des Titounis, Trotro
- Multilingual: Hey Bear Sensory, Teletubbies
- Channel allowlist - 40+ known kids channels whitelisted regardless of YouTube's "madeForKids" flag
- Shuffled feed - Content reshuffles on pull-to-refresh
- Hybrid quota strategy - RSS feeds (free, unlimited) for browsing + YouTube API (quota-tracked) for search only
- 6-hour search cache - Minimizes YouTube API usage, stays under 10,000 unit daily limit
- Full-screen playback - No distractions
- Playback controls - Play/Pause, Previous, Next (appear on tap)
- Related videos - Horizontal thumbnail strip (hidden during playback)
- Auto-play - Automatically plays next video with countdown
- Sound enabled by default - Videos start with audio
- Smart navigation - Next button works even without related videos (plays random curated content)
- PIN-protected settings - Keep kids out of settings
- Onboarding wizard - Easy initial setup
- Language preferences - Configure allowed content languages
- Channel blocking - Block unwanted channels
- Auto-play toggle - Enable/disable automatic video advancement
- Hidden settings button - Tiny, low-opacity gear icon invisible to toddlers
[!Architecture Diagram](https://excalidraw.com/#json=hwO8exQ70hPljnfoe1dSF,XjCcm7PYowBJ4vvkbxyFzw)
KidsTube follows Clean Architecture with a multi-module structure:
app/ # Main application module
├── MainActivity.kt # Entry point, immersive mode
└── navigation/ # Navigation graph
core/
├── core-common/ # Shared utilities
├── core-data/ # Repository implementations
├── core-database/ # Room database, caching
├── core-datastore/ # DataStore preferences
├── core-domain/ # Business logic, use cases
├── core-network/ # YouTube API client
└── core-ui/ # Shared Compose components
feature/
├── feature-home/ # Home screen with video grid
├── feature-player/ # Video player screen
├── feature-search/ # Search functionality
├── feature-parental/ # Settings & parental controls
└── feature-onboarding/ # First-run setup wizard
- Language: Kotlin
- UI: Jetpack Compose + Material 3
- Architecture: MVVM + Clean Architecture
- DI: Hilt
- Navigation: Jetpack Navigation Compose
- Networking: Retrofit + Moshi
- Database: Room
- Preferences: DataStore
- Image Loading: Coil
- Video: WebView with YouTube mobile site
- Android 8.0 (API 26) or higher
- YouTube Data API v3 key
-
Clone the repository
git clone git@github.com:juanmarques/KidsTube.git cd KidsTube -
Get a YouTube API key
- Go to Google Cloud Console
- Create a new project or select existing
- Enable "YouTube Data API v3"
- Create an API key (restrict to Android app recommended)
-
Configure the API key
Create or edit
local.propertiesin the project root:YOUTUBE_API_KEY=your_api_key_here -
Build and run
./gradlew assembleDebug
Or open in Android Studio and run on device/emulator.
- App opens to onboarding wizard
- Set a parental PIN (4-6 digits)
- Choose content languages (Dutch recommended)
- Done! Kids can start watching
- Tap any thumbnail to watch
- Tap video to show/hide controls
- Use Previous/Next buttons to navigate
- Tap back arrow to return home
- Pull down to refresh content
- Tap tiny gear icon (top-right, barely visible)
- Enter PIN to access settings
- Configure languages, block channels, toggle auto-play
- Access search to find specific content
| Module | Purpose |
|---|---|
core-domain |
Video/Category models, use cases, repository interfaces |
core-data |
Repository implementations, channel allowlist |
core-network |
YouTube API service, DTOs |
core-database |
Room DB, search cache, video cache |
core-datastore |
User preferences, PIN storage |
core-ui |
VideoCard, LoadingState, theme |
| Module | Purpose |
|---|---|
feature-home |
Main grid of video thumbnails |
feature-player |
Full-screen video player |
feature-search |
Search videos (parent access) |
feature-parental |
Settings, PIN entry |
feature-onboarding |
First-run setup |
| Language | Channels | Examples |
|---|---|---|
| English | 23 | CoComelon, Peppa Pig, Paw Patrol, Blippi, Super Simple Songs, BabyBus, Sesame Street |
| Spanish | 4 | El Reino Infantil, Cleo y Cuquin, Pocoyó, La Granja de Zenón |
| Portuguese | 3 | Galinha Pintadinha, Turma da Mônica, Mundo Bita |
| French | 2 | Monde des Titounis, Trotro |
| German | 1 | KiKA |
| Other | 6 | Russian, Arabic, Japanese, Korean, Hindi, Turkish (1 each) |
| Multilingual | 2 | Hey Bear Sensory, Teletubbies |
Content is fetched via free RSS feeds (no API quota) and supplemented with YouTube API search (quota-tracked, cached 6 hours).
The app includes built-in quota tracking:
- Tracks daily YouTube API usage
- Caches search results for 6 hours
- Rotates through content pools to distribute queries
- Designed to stay well under YouTube's 10,000 unit daily limit
- PIN is stored as salted SHA-256 hash
- No plaintext password storage
- Settings protected behind PIN verification
- Minimal permissions required
MIT License - see LICENSE for details.
Contributions welcome! Please read our contributing guidelines before submitting PRs.
- Built for my toddler who loves watching kid-friendly content
- Inspired by YouTube Kids but with better parental control
- Thanks to all the amazing Dutch kids content creators
Note: This app is not affiliated with YouTube or Google. It uses the official YouTube Data API v3.