Go to file
syeopite 60c8c55ff2
Add workaround to avoid duplicating theme css
In order to support both a theme toggle and to automatically use the
user's selected theme based on browser/system defaults the stylesheets
has to be duplicated twice since the latter requires the css to be
wrapped around a media query.

This duplication is a painful experience to deal with when adding or
changing existing styles. Even more so when it involves jumping around
the behemoth default.css from and back to whatever sections you were
just working on.

I don't believe the we the Invidious team will be able to agree to a
proper solution anytime soon (eg css post-processor, modern css
light-dark feature, etc) so this commit is here as a stopgap measure.

The workaround is to move the theming styles to two separate files
which are read at runtime and used to generate a combined stylesheet
with the necessary duplication for the media query. This combined
stylesheet is then delivered on a new route added to Invidious,
bypassing the static file handler.
2025-05-21 19:10:30 -07:00
.github CI: Bump Crystal version matrix (#5293) 2025-05-14 01:51:03 -04:00
assets Add workaround to avoid duplicating theme css 2025-05-21 19:10:30 -07:00
config Reflect companion secret character limit in example config comment (#5269) 2025-05-04 07:47:42 +00:00
docker Bump crystallang/crystal from 1.16.2-alpine to 1.16.3-alpine in /docker (#5301) 2025-05-14 01:20:50 -04:00
kubernetes move helm chart to a dedicated github repository (#4711) 2024-05-27 00:40:43 +02:00
locales Remove text captchas from Invidious (#5308) 2025-05-17 16:37:55 -07:00
mocks@b55d58dea9 update submodule 2024-10-13 23:57:29 +02:00
screenshots Rework the README (#2135) 2021-07-24 20:48:30 +02:00
scripts Add Javascript licence information automatically 2025-05-10 18:44:53 -07:00
spec update the mocks with the latest updated data 2024-10-13 21:18:21 +02:00
src Add workaround to avoid duplicating theme css 2025-05-21 19:10:30 -07:00
.ameba.yml Ameba: Disable Style/RedundantNext rule 2024-08-28 23:49:10 -07:00
.editorconfig Initial commit 2017-11-23 01:48:55 -06:00
.gitattributes Only ignore the videojs libraries 2021-05-23 17:59:02 +00:00
.gitignore Add the docs/ folder to gitignore (#3694) 2023-03-19 20:03:15 +01:00
.gitmodules Add mocks as a submodule 2022-06-08 23:56:40 +02:00
CHANGELOG_legacy.md Rename legacy changelog file 2024-04-27 00:14:46 +02:00
CHANGELOG.md Fix incorrect PR link for v2.20250504.0 2025-05-17 15:49:03 -07:00
docker-compose.yml Use trending api for health checks 2024-04-04 19:10:27 -04:00
invidious.service Add logfile to systemd service and fix path 2019-01-23 21:31:52 +01:00
LICENSE Change license 2018-01-28 11:32:40 -06:00
Makefile Makefile: Add MT option to enable the 'preview_mt' flag 2024-10-09 18:37:08 +02:00
README.md Fix minor casing issues in brand names (#5258) 2025-05-02 15:36:31 +02:00
shard.lock Update Kemal to 1.6.0 and remove Kilt 2025-01-29 11:49:45 -08:00
shard.yml Release versioning maintenance (#5310) 2025-05-17 16:22:32 -07:00
TRANSLATION TRANSLATION file for l10n 2020-05-26 18:02:21 +00:00
videojs-dependencies.yml Bump videojs to 7.12.1 (#3011) 2022-04-22 22:37:45 +02:00

Invidious logo

Invidious

License: AGPLv3 Build Status GitHub commits GitHub issues GitHub pull requests Translation Status Awesome Humane Tech

An open source alternative front-end to YouTube

Website  •  Instances list  •  FAQ  •  Documentation  •  Contribute  •  Donate

Chat with us:
Matrix Libera.chat (IRC)
Fediverse: @invidious@social.tchncs.de
E-mail

Screenshots

Player Preferences Subscriptions

Features

User features

  • Lightweight
  • No ads
  • No tracking
  • No JavaScript required
  • Light/Dark themes
  • Customizable homepage
  • Subscriptions independent from Google
  • Notifications for all subscribed channels
  • Audio-only mode (with background play on mobile)
  • Support for Reddit comments
  • Available in many languages, thanks to our translators

Data import/export

  • Import subscriptions from YouTube, NewPipe and FreeTube
  • Import watch history from YouTube and NewPipe
  • Export subscriptions to NewPipe and FreeTube
  • Import/Export Invidious user data

Technical features

  • Embedded video support
  • Developer API
  • Does not use official YouTube APIs
  • No Contributor License Agreement (CLA)

Quick start

Using Invidious:

Hosting Invidious:

Documentation

The full documentation can be accessed online at https://docs.invidious.io/

The documentation's source code is available in this repository: https://github.com/iv-org/documentation

Extensions

We highly recommend the use of Privacy Redirect, a browser extension that automatically redirects YouTube URLs to any Invidious instance and replaces embedded YouTube videos on other websites with Invidious.

The documentation contains a list of browser extensions that we recommended to use along with Invidious.

You can read more here: https://docs.invidious.io/applications/

Contribute

Code

  1. Fork it ( https://github.com/iv-org/invidious/fork ).
  2. Create your feature branch (git checkout -b my-new-feature).
  3. Stage your files (git add .).
  4. Commit your changes (git commit -am 'Add some feature').
  5. Push to the branch (git push origin my-new-feature).
  6. Create a new pull request ( https://github.com/iv-org/invidious/compare ).

Translations

We use Weblate to manage Invidious translations.

You can suggest new translations and/or correction here: https://hosted.weblate.org/engage/invidious/.

Creating an account is not required, but recommended, especially if you want to contribute regularly. Weblate also allows you to log-in with major SSO providers like GitHub, GitLab, BitBucket, Google, ...

Projects using Invidious

A list of projects and extensions for or utilizing Invidious can be found in the documentation: https://docs.invidious.io/applications/

Liability

We take no responsibility for the use of our tool, or external instances provided by third parties. We strongly recommend you abide by the valid official regulations in your country. Furthermore, we refuse liability for any inappropriate use of Invidious, such as illegal downloading. This tool is provided to you in the spirit of free, open software.

You may view the LICENSE in which this software is provided to you here.

  1. Limitation of Liability.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.