mrkeyoor.com_
Wed 16 Sept 23:52 UTC
Self-Hostedevaluationupdated 26 Aug 2026

invidious review

Invidious is a self-hosted, privacy-focused front end for watching YouTube without YouTube's normal interface, ads, or account system. It offers subscriptions, history import, audio-only playback, embeds, and an API while avoiding the official YouTube API.

+123stars / 7d
Verdict

Our Invidious checkout installed in 19 seconds and built in 8, but pytest collected 0 tests and exited with code 5, so that run does not prove behavioral correctness. Use Invidious when a shared, private web front end is worth operating 3 services and responding to upstream YouTube changes. For one desktop or Android user, FreeTube or NewPipe avoids the server work.

We ran it

Lab card: what happened when we ran invidiousScreenshot of invidious (invidious.io)
Install✓ · 19s35 packages · 37 MB
Build✓ · 8s
Tests✗ · 11s0 passed · 0 failed of 0 (pytest)
Known vulns0(pip-audit)
Repo381 files~3,287 lines of source · 10.2 MB · 6 CI workflows · tests dir

Answers from our run

Does invidious build from source?

Dependencies installed in 19 seconds (35 packages), and the build succeeded in 8 seconds. We cloned commit 34173a3 into a clean Debian container with 3 CPUs and no project-specific setup.

Do invidious's tests pass?

Yes: 0 of 0 passed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does invidious have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use invidious?

Casual self-hosters expecting one low-maintenance container: the installation guide requires Invidious, PostgreSQL, and Invidious Companion, then recommends restarting Invidious at least daily.

What are the alternatives to invidious?

Piped, FreeTube, NewPipe. Our Invidious checkout installed in 19 seconds and built in 8, but pytest collected 0 tests and exited with code 5, so that run does not prove behavioral correctness.

Setup2/5Three services, secrets, proxying, and frequent restarts
Docs4/5Detailed install paths and candid hosting warnings
Community5/522,824 stars with August 2026 code and issue activity
Maturity4/5Established service, but YouTube changes keep operations active

Discussed on

  1. hnGoogle has been blocking Invidious with error "This helps protect our community"130 points
  2. hnHow Google fights Invidious (a privacy YouTube Front end)106 points
  3. hnYouTube is trying to block Invidious101 points
  4. hnYouTube legal team contacted Invidious developers94 points
  5. hnInvidious: An alternative front-end to YouTube21 points

Who it’s for

Privacy-minded users who want a lighter YouTube interface with no required JavaScript.
Self-hosters prepared to operate PostgreSQL, Invidious Companion, and a reverse proxy.
Developers who need a public API or embeddable player without the official YouTube API.
Communities willing to maintain their own instance rather than depend on a public operator.

Who it’s NOT for

Casual self-hosters expecting one low-maintenance container: the installation guide requires Invidious, PostgreSQL, and Invidious Companion, then recommends restarting Invidious at least daily.
Cheap PaaS accounts or capped servers: the official guide calls the service bandwidth intensive and warns that unsupported hosts may suspend it for abuse.
Windows operators seeking a supported native build: the guide says Crystal does not officially support Windows and points users to Docker or WSL.
Anyone requiring stable behavior independent of YouTube changes: current issues cover missing response fields, renderer changes, and API description fields.

Setup reality

Our sandbox installed 35 Python packages in 19 seconds and used 37 MB. The build succeeded in 8 seconds. Pytest exited with code 5 after 11 seconds because it collected 0 tests: the log says no tests ran in 0.05s, so there was no passing coverage to judge.

A real instance needs PostgreSQL, a random HMAC key, a separate secret for Invidious Companion, and usually a reverse proxy with domain and HTTPS settings. The production Compose guide runs 3 services and obtains the Invidious image from Quay.

Our commit scan found 381 files, about 3,287 source lines, 6 CI workflows, a Compose file, and a tests directory, but no Dockerfile. Pip-audit found 0 known vulnerabilities in the measured Python environment. The official application is documented as Crystal and requires regular restarts, so operators should validate the deployed image rather than infer production readiness from our small harness build.

Invidious replaces YouTube's interface, not its video source

Invidious presents YouTube videos through its own web interface. Users get subscriptions independent of Google, notification feeds, audio-only playback, themes, history and subscription import, embeds, and a developer API. JavaScript is optional for basic use. The service does not use the official YouTube API, which frees it from an API key but ties its behavior to interfaces that YouTube can change without supporting third-party clients.

That distinction determines who should run it. A household or community can keep account data on its own instance and offer a calmer viewing interface. The same operator then owns breakage when upstream responses or player rules move. GitHub listed 477 combined open issues and pull requests when we checked. One current bug reports a missing commentsEnabled key, while another reports empty description fields in API search results. Neither issue means every request fails, but both concern live data parsing.

The production path is a 3-service deployment

The official Compose example runs Invidious, Invidious Companion, and PostgreSQL 14. Invidious handles the web application, PostgreSQL stores user and application data, and Companion supports playback work that older helper services used to perform. Operators generate separate secrets for the HMAC setting and Companion communication. The docs explicitly warn against reusing the same value. A reverse proxy normally provides the public HTTPS endpoint.

Hardware guidance is candid. The installation page asks for at least 20 GB of disk and 2 GB of free RAM for a private setup, with regular restarts. A public instance is described with 60 GB of disk, 4 GB of RAM, 2 virtual CPUs, a 200 Mbps connection, and about 20 TB of traffic or no cap. Those are project recommendations, not numbers from our performance lab, but they rule out many bargain hosting plans.

What happened when we ran it

Our sandbox installed 35 Python packages in 19 seconds, occupying 37 MB on disk. The build completed successfully in 8 seconds. The measured checkout at commit 34173a3 had 381 files, roughly 3,287 source lines, and used 10.2 MB before dependencies. Pip-audit found 0 known vulnerabilities in the environment produced by that run.

Tests did not pass. Pytest exited with code 5 after 11 seconds because it collected 0 tests, reporting no tests ran in 0.05s. That is different from a suite with zero failures: no test exercised the application. The scan found a tests directory and 6 CI workflow files, plus a Compose file but no Dockerfile. We do not know from the log why collection returned nothing, so we are not assigning a cause.

The measurement also deserves a scope warning. Our harness classified that checkout as Python, while the current repository and official manual installation describe the application as Crystal. The current docs list Crystal 1.14.x through 1.19.x and a set of native Linux packages. Our 19-second dependency result does not measure that manual production stack, its PostgreSQL migration, Companion, video playback, or response to live YouTube traffic.

Frequent restarts are part of the documented operation

The post-install guide says Invidious must be restarted often, at least once a day and ideally every hour. It also asks public instances to enable PubSub feeds and an InnerTube caption setting, then configure the domain, external port, and HTTPS flag behind a proxy. That is unusually direct operational advice. It should enter the deployment design as a service policy, with health checks and controlled restarts, rather than remain a note someone discovers after an outage.

Unsupported hosting is another firm boundary. The docs warn that PaaS and SaaS products may have trouble with a bandwidth-intensive proxy and might suspend the account for abuse. Windows is not a supported native Crystal route; Docker Desktop or WSL is the practical choice. The Compose image comes from Quay, and the repository must currently be cloned because SQL initialization files are mounted into PostgreSQL. The guide says removing that cloning requirement is a hope for the future, not a delivered feature.

Privacy gains still depend on the instance operator

The README promises no ads or tracking in Invidious itself and supports subscriptions without Google. A public instance, however, is run by somebody else. Its administrator controls logs, retention, domain security, updates, and database access. Privacy-sensitive users should read an instance's policy or run their own. Import and export support makes moving subscriptions and user data easier, but it does not certify the host.

The AGPL-3.0 license is relevant for modified network deployments because it requires corresponding source availability under its terms. Teams embedding Invidious into another service should review that obligation instead of treating it like a permissive library. The README also asks users to follow local rules and rejects responsibility for illegal downloading. Invidious changes the interface and account relationship; it does not change rights attached to the videos.

August 2026 activity shows an actively repaired service

The repository was pushed on August 23, 2026, and release v2.20260804.1 arrived on August 5. That patch restored debug information in container images after a build regression, specifically to improve stack traces and crash diagnosis. GitHub showed 22,824 stars. The recent push, release, translation work, and active parser issues together describe a maintained project under continuous upstream pressure, not a finished appliance.

For a shared browser-based alternative, Invidious remains the most recognizable choice here. Its features are useful and its operator documentation does not hide the costs. Adopt it with monitored restarts, pinned images, backups, secrets, and enough bandwidth. If only one person needs private viewing, a local FreeTube or NewPipe installation removes PostgreSQL, Companion, proxy configuration, and the public-instance trust question.

Alternatives

ProjectWhat it isPick it when
PipedA privacy-focused YouTube front end with a separate backend and web client.pick this instead when you prefer Piped's architecture and instance ecosystem.
FreeTube gh↗A private YouTube desktop application that stores user data locally.pick this instead when one person's desktop app is easier than maintaining a shared server.
NewPipeA lightweight Android streaming client with no Google account requirement.pick this instead when Android is the only target and you do not need a web service.

What people are saying

  1. [github-trending] iv-org/invidious

Sources

  1. Invidious README
  2. Invidious repository
  3. Invidious installation guide
  4. Invidious v2.20260804.1 release
  5. Missing commentsEnabled issue
  6. API search description issue

More self-hosted reviews

Octop · newsnow · forem · octo-server · runtime · openfang · the whole board →