An app store for Android TV that lists open-source TV apps from GitHub and installs them from each project's releases, using only the remote.
Google Play on TV only carries apps that publish there. Plenty of good TV apps only live on GitHub, where installing one means a phone, a download link and a guess at which APK fits your box. Open Shelf does that part for you.
- Lists about 2,900 Android TV apps from GitHub, in 18 categories
- Every app in the list declares TV support in its manifest and ships an APK in its latest release
- Search by name or by what an app does, like "video player" or "launcher"
- Picks the APK that matches your TV's CPU
- Checks the signing key before installing an update, and holds the update if the key changed
- My Apps shows what's installed, with updates for apps in the catalog
- Light and dark themes, and a choice of accent colours
- IPTV players and debrid or Stremio streaming clients are hidden by default, with a switch in Settings to show them
- When an app looks abandoned, its page points to a maintained fork if one ships a newer TV build
![]() |
![]() |
| Discover | Categories |
![]() |
![]() |
| A category | An app page |
![]() |
![]() |
| Search | Settings |
You need an Android TV, Google TV, Fire TV or other Android box running Android 9 or newer.
- Download the latest
OpenShelf-x.y.z.apkfrom Releases. - Sideload it with an app like Downloader, or from a computer with
adb install OpenShelf-x.y.z.apk. - The first time you install an app, Android asks you to allow installs from Open Shelf. Allow it once.
The app list is built from public GitHub data and ships inside the APK. An app is included when:
- the repository isn't a fork, unless the original is archived or hasn't had a release in a year, and the fork has at least 10 stars and ships a newer TV build
- its latest release has an APK, published in the last 3 years
- that APK's manifest has the Android TV launcher entry
Apps with fewer than 10 stars stay out of browsing, but search still finds them by their exact name.
Needs JDK 17 or newer and the Android SDK. Point local.properties at the SDK (sdk.dir=...), then:
./gradlew assembleRelease
Release builds are signed with the debug key unless a keystore.properties file sits in the project root with storeFile, storePassword, keyAlias and keyPassword.
All the app's text is in app/src/main/res/values/strings.xml. To add a language, copy that file to values-<code>/strings.xml (for example values-de for German), translate the text and open a pull request.
- Keep placeholders like
%1$sand%1$das they are. They're filled in with names and numbers. fmt_date,fmt_short_dateandfmt_month_yearare date patterns. German would used. MMM yyyy.- App descriptions come from each project's GitHub page and stay in English.
Open Shelf is licensed under the GNU General Public License v3.0. See LICENSE.
The Geist font is licensed under the SIL Open Font License 1.1. See FONT-LICENSE-OFL.txt.
App names, descriptions and artwork in the catalog belong to their projects.






