- Rust 83.7%
- HTML 13.7%
- Python 1.6%
- Shell 0.5%
- JavaScript 0.4%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| data | ||
| design | ||
| docker | ||
| packaging/flatpak | ||
| scripts | ||
| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| IMPLEMENTATION_PLAN.md | ||
| README.md | ||
| TESTING.md | ||
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
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.



