No description
  • Rust 83.7%
  • HTML 13.7%
  • Python 1.6%
  • Shell 0.5%
  • JavaScript 0.4%
Find a file
Salix cc6af1487d
All checks were successful
Build Flatpak Bundle / flatpak (push) Successful in 5m27s
docs: add project README
2026-07-07 17:08:45 +02:00
.forgejo/workflows ci: build Flatpak bundle 2026-07-07 15:23:27 +02:00
data Update Flatpak bundle artifacts 2026-07-05 14:29:59 +02:00
design Add channel detail view and improve feed syncing 2026-06-23 17:35:25 +02:00
docker Refresh Flatpak build image when Dockerfile changes 2026-07-07 16:47:39 +02:00
packaging/flatpak Update Flatpak bundle artifacts 2026-07-05 14:29:59 +02:00
scripts Fix Flatpak build in Docker runner 2026-07-07 16:59:27 +02:00
src Refine chapter chrome and progress saving 2026-07-07 15:39:39 +02:00
.gitignore chore: ignore generated artifacts 2026-07-07 15:10:58 +02:00
Cargo.lock Update Flatpak bundle artifacts 2026-07-05 14:29:59 +02:00
Cargo.toml Add responsive Adwaita shell and testing driver 2026-06-23 15:08:58 +02:00
IMPLEMENTATION_PLAN.md baseline: pre-redesign Adwaita UI 2026-06-21 23:12:05 +02:00
README.md docs: add project README 2026-07-07 17:08:45 +02:00
TESTING.md Add responsive Adwaita shell and testing driver 2026-06-23 15:08:58 +02:00

Invio Adwaita

Invio Adwaita is the native GNOME/libadwaita shell for Invio, a personal Invidious-first video app. It uses the shared Rust core from ../invio-core directly for Invidious networking, parsing, stream resolution, SponsorBlock, Return YouTube Dislike, SQLite storage, backup, and sync.

The app keeps the desktop-specific pieces in this repo: GTK/libadwaita UI, GStreamer playback, WebKitGTK challenge solving, desktop integration, and packaging.

What It Does

  • Shows an Invidious-backed subscription feed with categories.
  • Searches videos and channels.
  • Plays videos with native desktop playback.
  • Presents Shorts as a vertical feed.
  • Stores library lists, playlists, watch history, downloads, settings, and subscriptions.
  • Uses SponsorBlock and Return YouTube Dislike through the shared core.
  • Solves Invidious browser checks through WebKitGTK and reuses the solved cookies for playback.
  • Imports and exports data in a format compatible with the Android app.

Screenshots

Feed

Watch page

Shorts

Library

More design notes and screenshot-generation commands live in design/README.md.

Build Dependencies

Ubuntu 26.04 package names:

sudo apt install \
  build-essential pkg-config libgtk-4-dev libadwaita-1-dev libwebkitgtk-6.0-dev \
  libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
  gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
  gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav

Install the optional Flatpak/AppStream helpers when validating or packaging the desktop metadata:

sudo apt install flatpak flatpak-builder appstream desktop-file-utils

Local Development

cargo test --no-default-features
cargo test
cargo run

--no-default-features tests the portable service layer without native GTK dependencies.

To drive and screenshot a running window for end-to-end or manual checks, see TESTING.md and the scripts/invio-test driver when present.

The app defaults to GTK's software renderer because some Mesa/EGL/Zink setups fail before the window appears. To opt back into GTK's automatic hardware renderer selection:

GSK_RENDERER=ngl cargo run

Packaging

Flatpak:

flatpak-builder --user --install-deps-from=flathub --force-clean build-dir packaging/flatpak/app.invidious.Invio.yml

Install and run the local build:

flatpak-builder --user --install --install-deps-from=flathub --force-clean build-dir packaging/flatpak/app.invidious.Invio.yml
flatpak run app.invidious.Invio

When Cargo.lock changes, refresh the vendored crate source metadata before building:

packaging/flatpak/update-cargo-sources.py

AppImage staging:

scripts/build-appimage.sh

The AppImage target is an Ubuntu-baseline artifact. It expects compatible WebKitGTK and GStreamer runtime components on the host; Flatpak is the supported portable package.

Project Status

This is a personal project. It is built for the author's own use and experimentation, so it does not come with warranty, support commitments, compatibility guarantees, or release promises.

Invio is not affiliated with YouTube, Google, Invidious, SponsorBlock, or Return YouTube Dislike.

Source Availability

The code is currently source available for reading and reference. It is not open source licensed. Unless a separate license is added, no permission is granted to reuse, redistribute, or relicense the code.