www-apps/invidious - 2026.07.23.0 (guru)

Search

Install

Install this version:

emerge -a =www-apps/invidious-2026.07.23.0

If this version is masked, you can unmask it using the autounmask tool or standard emerge options:

autounmask =www-apps/invidious-2026.07.23.0

Or alternatively:

emerge --autounmask-write -a =www-apps/invidious-2026.07.23.0

Package Information

Description:
Invidious is an alternative front-end to YouTube
Homepage:
https://invidious.io/ https://github.com/iv-org/invidious
License:
AGPL-3 Apache-2.0 MIT

Ebuild Details

Version EAPI Keywords Slot
2026.07.23.0 8 ~amd64 0
View Raw Ebuild
# Copyright 2022-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit check-reqs shards systemd

MY_PV="2.$(ver_rs 1-2 '')"
MOCKS_COMMIT="b55d58dea94f7144ff0205857dfa70ec14eaa872"
MOCKS_P="${PN}-mocks-${MOCKS_COMMIT:0:7}"
DESCRIPTION="Invidious is an alternative front-end to YouTube"
HOMEPAGE="
	https://invidious.io/
	https://github.com/iv-org/invidious
"
IV_ORG="https://github.com/iv-org"
NPM="https://registry.npmjs.org"
SRC_URI="
	${IV_ORG}/${PN}/archive/refs/tags/v${MY_PV}.tar.gz -> ${P}.tar.gz
	${NPM}/video.js/-/video.js-7.12.1.tgz
	${NPM}/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-2.1.0.tgz
	${NPM}/videojs-http-source-selector/-/videojs-http-source-selector-1.1.6.tgz
	${NPM}/videojs-markers/-/videojs-markers-1.0.1.tgz
	${NPM}/videojs-mobile-ui/-/videojs-mobile-ui-0.6.1.tgz
	${NPM}/videojs-overlay/-/videojs-overlay-2.1.4.tgz
	${NPM}/videojs-share/-/videojs-share-3.2.1.tgz
	${NPM}/videojs-vr/-/videojs-vr-1.8.0.tgz
	${NPM}/videojs-vtt-thumbnails/-/videojs-vtt-thumbnails-0.0.13.tgz
	test? (
		${IV_ORG}/mocks/archive/${MOCKS_COMMIT}.tar.gz -> ${MOCKS_P}.tar.gz
	)
"
S="${WORKDIR}/${PN}-${MY_PV}"

LICENSE="AGPL-3 Apache-2.0 MIT"
SLOT="0"
KEYWORDS="~amd64"
IUSE="test"
RESTRICT="!test? ( test )"

COMMON_DEPEND="
	dev-db/sqlite:3
	dev-libs/boehm-gc
	dev-libs/libpcre2:=
	dev-libs/libxml2:2=
	dev-libs/libyaml
	dev-libs/openssl:=
	virtual/zlib:=
"
RDEPEND="${COMMON_DEPEND}
	acct-user/invidious
	gnome-base/librsvg
"
DEPEND="${COMMON_DEPEND}
	dev-crystal/athena-negotiation
	dev-crystal/http_proxy
	>=dev-crystal/kemal-1.6.0
	<dev-crystal/kemal-1.10.0
	>=dev-crystal/protodec-0.1.5
	virtual/crystal-db[postgres,sqlite]
	test? (
		dev-crystal/spectator
	)
"

DOCS=( {CHANGELOG,README}.md TRANSLATION )

CHECKREQS_MEMORY="2G"

CRYSTAL_DEFINES=( -Dskip_videojs_download )

src_unpack() {
	local src depname destname js css

	for src in ${A}; do
		if [[ ${src} == "${P}.tar.gz" ]]; then
			unpack ${src}
		elif [[ ${src} == "${MOCKS_P}.tar.gz" ]]; then
			unpack "${src}"
			mkdir -p "${S}"/mocks || die
			rmdir "${S}"/mocks || die
			mv mocks-${MOCKS_COMMIT} "${S}"/mocks || die
		else
			depname="${src%-*}"

			case ${depname} in
				video.js)
					js="video.js" ;;
				*)
					js="${depname}.js" ;;
			esac

			case ${depname} in
				video.js)
					css="video-js.css" ;;
				videojs-markers)
					css="videojs.markers.css" ;;
				*)
					css="${depname}.css" ;;
			esac

			# Create the destination directory
			destname="${S}/assets/videojs/${depname}"
			mkdir -p "${destname}" || die

			# Create a temporary directory
			mkdir -p "${WORKDIR}"/${depname} || die
			cd "${WORKDIR}"/${depname} || die

			# Copy assets
			unpack ${src}
			cd package/dist || die
			mv ${js} ${destname} || die
			if [[ -f ${css} ]]; then
				mv ${css} ${destname} || die
			fi

			cd "${WORKDIR}" || die
		fi
	done
}

src_prepare() {
	default

	local datadir="${EPREFIX}/usr/share/invidious"
	sed -i src/invidious.cr \
		-e 's/\(CURRENT_BRANCH \) *= .*/\1 = "master"/' \
		-e "s/\(CURRENT_COMMIT \) *= .*/\1 = \"0bbbb5df\"/" \
		-e "s/\(CURRENT_VERSION\) *= .*/\1 = \"$(ver_cut 1-3)\"/" \
		-e "s/\(CURRENT_TAG\) *= .*/\1 = \"v${MY_PV}\"/" \
		-e "s/\(ASSET_COMMIT\) *= .*/\1 = \"864893f4\"/" || die

	# fix paths
	sed -i src/invidious.cr \
		-e "s|\(public_folder\) \"assets\"|\1 \"${datadir}/assets\"|" || die
	sed -i src/invidious/helpers/i18n.cr \
		-e "s|File.read(\"locales/|File.read(\"${datadir}/locales/|" || die
	sed -i src/invidious/database/base.cr \
		-e "s|config/sql|${datadir}/\0|g" || die

	rm shard.lock || die
}

src_install() {
	dobin invidious
	einstalldocs

	insinto /usr/share/invidious
	doins -r assets config locales

	insinto /etc/invidious
	newins config/config.example.yml config.yml

	systemd_dounit "${FILESDIR}"/invidious.service
	newinitd "${FILESDIR}"/invidious.initd ${PN}
	newconfd "${FILESDIR}"/invidious.confd ${PN}
}

pkg_postinst() {
	elog "Follow the official instructions to set up Invidious Companion:"
	elog "https://docs.invidious.io/installation/#set-up-invidious-companion"
}

USE Flags

Manage flags for this package: euse -i <flag> -p www-apps/invidious | euse -E <flag> -p www-apps/invidious | euse -D <flag> -p www-apps/invidious

Global/Standard Flags

Inherited Eclasses

Dependencies

DEPEND

	dev-db/sqlite:3
	dev-libs/boehm-gc
	dev-libs/libpcre2:=
	dev-libs/libxml2:2=
	dev-libs/libyaml
	dev-libs/openssl:=
	virtual/zlib:=

	dev-crystal/athena-negotiation
	dev-crystal/http_proxy
	>=dev-crystal/kemal-1.6.0
	<dev-crystal/kemal-1.10.0
	>=dev-crystal/protodec-0.1.5
	virtual/crystal-db[postgres,sqlite]
	test? (
		dev-crystal/spectator
	)

RDEPEND

	dev-db/sqlite:3
	dev-libs/boehm-gc
	dev-libs/libpcre2:=
	dev-libs/libxml2:2=
	dev-libs/libyaml
	dev-libs/openssl:=
	virtual/zlib:=

	acct-user/invidious
	gnome-base/librsvg

Manifest for 2026.07.23.0

Type File Size Source URLs
DIST invidious-mocks-b55d58d.tar.gz 222861 bytes https://github.com/iv-org/mocks/archive/b55d58dea94f7144ff0205857dfa70ec14eaa872.tar.gz
DIST video.js-7.12.1.tgz 3511060 bytes https://registry.npmjs.org/video.js/-/video.js-7.12.1.tgz
DIST videojs-contrib-quality-levels-2.1.0.tgz 18770 bytes https://registry.npmjs.org/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-2.1.0.tgz
DIST videojs-http-source-selector-1.1.6.tgz 14270 bytes https://registry.npmjs.org/videojs-http-source-selector/-/videojs-http-source-selector-1.1.6.tgz
DIST videojs-markers-1.0.1.tgz 209230 bytes https://registry.npmjs.org/videojs-markers/-/videojs-markers-1.0.1.tgz
DIST videojs-mobile-ui-0.6.1.tgz 15408 bytes https://registry.npmjs.org/videojs-mobile-ui/-/videojs-mobile-ui-0.6.1.tgz
DIST videojs-overlay-2.1.4.tgz 26042 bytes https://registry.npmjs.org/videojs-overlay/-/videojs-overlay-2.1.4.tgz
DIST videojs-share-3.2.1.tgz 487816 bytes https://registry.npmjs.org/videojs-share/-/videojs-share-3.2.1.tgz
DIST videojs-vr-1.8.0.tgz 521483 bytes https://registry.npmjs.org/videojs-vr/-/videojs-vr-1.8.0.tgz
DIST videojs-vtt-thumbnails-0.0.13.tgz 440404 bytes https://registry.npmjs.org/videojs-vtt-thumbnails/-/videojs-vtt-thumbnails-0.0.13.tgz