
Invidious
github.com/iv-org/invidious- Category
- Entertainment
- Type
- APP
- Builder
- iv-org
- GitHub
- 24.8k stars
- Latest release
- v2.20260804.1
- Date
About
Invidious is an open-source, privacy-focused alternative front-end to YouTube — lightweight, with no ads, no tracking, and no required JavaScript, and with subscriptions that work independently of a Google account.
What it does
Invidious is a server you run yourself that sits between you and YouTube. It pulls video, channel, search and comment data from YouTube's internal endpoints, then renders its own pages: no ads, no tracking scripts, and playback that still works with JavaScript turned off. Accounts live in your own database, so subscriptions and playlists exist without a Google login. The same data is exposed as a JSON API, and background workers keep subscription feeds and channel listings current. You either host it or point your browser at somebody else's public instance.
Why it's ranked here
Judge this one on operational reality, not on the feature list. It reads undocumented YouTube endpoints, so upstream changes break playback and the fix cycle never really ends, and stream loading has been split into a separate companion program that operators must run and key themselves. Against that, continuous integration builds across a long span of compiler releases plus a nightly, boots the container image and requests a page from it before passing. The maintainers also state in writing that contributor supply is thin because of the language choice. Strong for a private front end. Fragile as set and forget.
What's good
The operator surface is documented inline: each option carries accepted values, a default, and a note on when it becomes mandatory behind a reverse proxy. The container image creates a dedicated account and runs the binary as that unprivileged user under a small init process. Static linking is available, and the project can be compiled without the web interface for API-only deployments. Health checks gate startup order between the application and its database. The spec suite, a formatter check and a linter all run in continuous integration, and translation work happens on a hosted platform instead of in the repository.
Tradeoffs
The build is heavy. Player dependencies resolve at compile time behind a printed warning that it may take more than twenty minutes, and the container image compiles OpenSSL from source to work around a reported memory leak. Version strings are captured from git during compilation, so repository history has to be present in the build context. The test setup requires parsing helpers and data modules but not the routing layer, so route behaviour is not covered there. Crystal is a small ecosystem and the maintainers say most of the work lands on them. Operators also inherit legal exposure the project explicitly disclaims.
How to use it well
Best for someone who already runs a small Linux server and wants YouTube without the account graph: a home lab, a privacy-minded group, a classroom. Budget an afternoon for the database, the reverse proxy and the companion process, then expect to patch on upstream breakage rather than on your own schedule. The API is worth a look if you want to script feeds or embed video without third-party trackers. It does not download or archive video for you, it does not cover other platforms, and it will not make running a public instance legal where you live.
Technical notes+
The program in src/invidious.cr is one top-level script: it loads config, opens a PostgreSQL connection or exits with a message, builds connection pools for YouTube, image hosts and the companion service, registers background jobs for channel refresh, feed refresh, statistics, pubsub subscriptions, popular videos, notifications and expiry, then hands control to the Kemal web framework with handlers for compression, API routing, auth and frame denial. Flags parsed at startup override thread counts, log level and output destination. Dependencies declared in shard.yml are the web framework, Postgres and SQLite drivers, a protobuf decoder, a content negotiation shard and an HTTP proxy client, with Spectator and Ameba for development. config/config.example.yml is the whole operator surface, from database credentials and companion keys to socket binding and outbound proxy type. docker/Dockerfile builds a static binary in a builder stage, compiles OpenSSL separately, and ships an Alpine image that runs as a created non-root user. .github/workflows/ci.yml runs the spec suite and a build across a compiler matrix, plus a separate container build that starts the stack and probes it over HTTP. The repository also carries a contributor policy requiring anyone submitting AI-assisted issues or code to name the exact model and tooling used and to demonstrate manual human verification.
Observed
- License
- AGPL-3.0-only
- Language
- Crystal
- Datastore
- PostgreSQL
- Interfaces
- Self-hosted web front end plus a JSON HTTP API
- Install surface
- Build from source, Docker Compose, or use a third-party public instance
- Runtime
- Linux server; container image runs as a non-root user
- Data source
- YouTube internal endpoints, not the official YouTube API
- Kubernetes
- Helm chart maintained in a separate repository
Read from README.md, shard.yml, src/invidious.cr, config/config.example.yml, docker-compose.yml, docker/Dockerfile, docker/init-invidious-db.sh, Makefile, LICENSE, AI_POLICY.md, .github/workflows/ci.yml, scripts/install-dependencies.sh, scripts/deploy-database.sh, spec/spec_helper.cr, kubernetes/README.md.
What it can do
Watch YouTube videos without ads or tracking
YouTube video URL or search query → Ad-free video playback
Import subscriptions from other platforms
Subscription data from YouTube, NewPipe, or FreeTube → Invidious subscription list
Export subscriptions to other platforms
Invidious subscription list → Export file compatible with NewPipe or FreeTube
Play audio-only mode with background playback
YouTube video → Audio stream with mobile background play capability
Display Reddit comments for videos
YouTube video → Reddit discussion threads related to the video
Import and export watch history
Watch history data from YouTube or NewPipe → Imported watch history in Invidious or exported data file
Embed videos without YouTube tracking
Invidious video URL → Embeddable video player for websites
Tags
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.