No description
  • Kotlin 96.1%
  • HTML 2.8%
  • Shell 0.8%
  • Dockerfile 0.3%
Find a file
Salix bd170d7b75
Some checks are pending
Build Android APK / apk (push) Has started running
ci: handle Docker runner bind mount fallback
2026-07-07 17:22:06 +02:00
.forgejo/workflows ci: use valid package registry secret for APK build 2026-07-07 17:00:02 +02:00
app Add encrypted sync and playback tracking UI 2026-07-07 12:12:03 +02:00
design Add encrypted sync and playback tracking UI 2026-07-07 12:12:03 +02:00
docker ci: add native build tools to Android image 2026-07-07 17:01:43 +02:00
docs Route Android media through shared Invidious core 2026-06-24 19:08:36 +02:00
gradle Route Android media through shared Invidious core 2026-06-24 19:08:36 +02:00
scripts ci: handle Docker runner bind mount fallback 2026-07-07 17:22:06 +02:00
.dockerignore Bootstrap Invidious Material Android app 2026-06-20 11:13:12 +02:00
.gitignore chore: ignore generated artifacts 2026-07-07 15:10:59 +02:00
AGENTS.md Route Android media through shared Invidious core 2026-06-24 19:08:36 +02:00
build.gradle.kts Move Android data and network logic onto shared core 2026-06-23 15:10:39 +02:00
gradle.properties Bootstrap Invidious Material Android app 2026-06-20 11:13:12 +02:00
gradlew Bootstrap Invidious Material Android app 2026-06-20 11:13:12 +02:00
gradlew.bat Bootstrap Invidious Material Android app 2026-06-20 11:13:12 +02:00
keystore.properties.example Add watch UI, backups, and Invidious playback improvements 2026-06-20 13:24:28 +02:00
PLAN.md Route Android media through shared Invidious core 2026-06-24 19:08:36 +02:00
README.md docs: add project README 2026-07-07 17:08:45 +02:00
settings.gradle.kts Route Android media through shared Invidious core 2026-06-24 19:08:36 +02:00

Invio Android

Invio Android is the Android shell for Invio, a personal Invidious-first video app. It is built with Kotlin, Jetpack Compose, Media3, WorkManager, Android WebView, and the shared Rust core from ../invio-core.

The app is meant to browse, watch, and organize YouTube content through configured Invidious instances. The Android repo owns the native app experience; reusable product behavior belongs in the shared core.

What It Does

  • Shows a subscription feed backed by Invidious and the shared core.
  • Searches videos and channels.
  • Plays videos through native Media3 playback.
  • Keeps Invidious as the preferred path for feeds, metadata, comments, and playback.
  • Solves Invidious browser checks with a hidden/minimal WebView, then reuses those cookies for native requests.
  • Supports Shorts, channel pages, library lists, playlists, watch history, downloads, and settings.
  • Integrates SponsorBlock and Return YouTube Dislike through the shared core.
  • Imports and exports app data so installs can be moved or restored.

Screenshots

Invio Android foldable and phone preview

Invio Android theater layout crop

Repository Role

This repo should stay Android-specific:

  • Compose UI and navigation.
  • Android lifecycle, permissions, storage access, notifications, and picture-in-picture.
  • Media3 playback and download integration.
  • WorkManager background jobs.
  • Android WebView challenge solving.
  • Packaging and Gradle configuration.

Shared logic such as Invidious parsing, instance handling, stream resolution, SponsorBlock, Return YouTube Dislike, persistence models, and sync belongs in ../invio-core.

Building

Use the Docker-based workflow. The host machine is not expected to have Java or the Android SDK.

scripts/dbuild.sh ./gradlew :app:testDebugUnitTest
scripts/dbuild.sh ./gradlew :app:assembleDebug

The app consumes checked-in generated Kotlin bindings and native .so files from invio-core:

  • app/src/main/java/uniffi/invio_core/invio_core.kt
  • app/src/main/jniLibs/<abi>/libinvio_core.so

After changing the Rust public API in ../invio-core, regenerate bindings and rebuild the Android native libraries before testing this app.

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.