Invidious: Self-Hosted Private YouTube Frontend
YouTube is the world's largest video platform, but it comes with pervasive tracking, algorithm-driven recommendations, and ads. Invidious is an alternative frontend that proxies YouTube content through your own server — no Google account required, no tracking, no ads, and no algorithmic feed.
Photo by Tim Mossholder on Unsplash
What Invidious Does
- Watch YouTube videos without sending requests directly to Google's servers
- Subscribe to channels without a Google account (subscriptions stored locally)
- No ads: video delivery without YouTube's advertising layer
- No recommendation algorithm: chronological or custom feeds only
- Audio-only mode: stream audio without video for music
- RSS feeds: subscribe to channels via RSS reader
- Multiple instances: run your own or use a community instance
Docker Compose Setup
Invidious requires a PostgreSQL database:
services:
invidious:
image: quay.io/invidious/invidious:latest
container_name: invidious
restart: unless-stopped
ports:
- 3000:3000
environment:
INVIDIOUS_CONFIG: |
db:
dbname: invidious
user: invidious
password: changeme
host: invidious-db
port: 5432
check_tables: true
external_port: 3000
domain: invidious.yourdomain.com
https_only: false
statistics_enabled: false
registration_enabled: false
login_enabled: true
depends_on:
- invidious-db
invidious-db:
image: docker.io/library/postgres:14
container_name: invidious-db
restart: unless-stopped
volumes:
- invidious-db:/var/lib/postgresql/data
environment:
POSTGRES_DB: invidious
POSTGRES_USER: invidious
POSTGRES_PASSWORD: changeme
volumes:
invidious-db:
Navigate to http://your-server:3000. The UI mirrors YouTube's layout but without ads or tracking.
Key Configuration Options
Set these in the INVIDIOUS_CONFIG block:
# Privacy: don't proxy videos by default (saves bandwidth) — users can toggle
default_user_preferences:
proxy_videos: false
quality: hd720
dark_mode: dark
# Rate limiting and performance
pool_size: 100
use_quic: false
# Automatically refresh subscriptions
feed_menu: ["Subscriptions", "Playlists", "History"]
For a private instance (single household), set registration_enabled: false and login_enabled: true — create accounts manually.
Features
Subscriptions Without a Google Account
Create an account on your Invidious instance → subscribe to channels. Invidious stores subscriptions locally in PostgreSQL. Your subscription list never reaches Google.
Export/import subscriptions as OPML files for migration.
Channel RSS Feeds
Every channel has an RSS feed via Invidious:
https://invidious.yourdomain.com/feed/channel/UC...
Add these to your RSS reader (Miniflux, FreshRSS) for a clean, algorithm-free subscription feed.
Download via yt-dlp Integration
With yt-dlp installed on the same host, Invidious can offer download links for videos. Add to config:
yt_dlp:
enabled: true
Playlist Support
Import and subscribe to YouTube playlists. Useful for following curated content without the recommendation noise.
Bandwidth Considerations
By default, videos still stream from YouTube's CDN — Invidious proxies metadata and the initial request but video data comes from Google. With proxy_videos: true, all traffic routes through your server:
- Proxy off: Lower server load, but YouTube still gets your server's IP
- Proxy on: Full privacy, but bandwidth-intensive — 1080p video is 3-8 GB/hour
For home use without exposing to the internet, proxy-off is usually fine.
Reverse Proxy with Caddy
invidious.yourdomain.com {
reverse_proxy localhost:3000
}
Or with Nginx:
server {
listen 443 ssl;
server_name invidious.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Limitations
Invidious depends on YouTube's internal API — when Google changes their API structure, Invidious breaks until updated. This happens several times per year. The community-maintained codebase typically patches within days to weeks.
Age-restricted content: Requires a Google account configured as a token on the instance. Not ideal for privacy.
Live streams: Limited support. Works for some, not all live content.
Shorts: YouTube Shorts have inconsistent support across versions.
Comparison: Invidious vs Using a VPN
| Invidious | VPN | |
|---|---|---|
| Removes tracking | Yes (from Google) | Partial |
| Removes ads | Yes | No (YouTube serves from same domain) |
| Google account needed | No | Optional |
| Kills recommendation algorithm | Yes | No |
| Self-hosted | Yes | VPN provider |
An ad blocker removes YouTube ads in a browser. Invidious removes the entire tracking layer — even without an ad blocker.
Use Cases
Privacy-conscious household: Watch YouTube without Google building a profile of viewing habits.
Child accounts: Create Invidious accounts for kids with specific channel subscriptions, bypassing YouTube's algorithm-driven recommendations.
RSS-based workflow: Subscribe to all YouTube channels via RSS in your feed reader — no algorithm, no shorts, no notifications.
Slow/unreliable internet: Some configurations cache video segments, improving playback stability.
The Invidious project is at github.com/iv-org/invidious. For households wanting YouTube access without the surveillance, running a private instance is the most thorough solution.
