BufferedTV for Android: an unofficial PeerTube client for Android phones and tablets. https://buffered.tv/android
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ric Harvey d67b303874
The privacy policy says the app has no server of its own, not that we have none
BufferedTV is to have a PeerTube instance of its own, announced on
buffered.tv on 14 October 2026, so the policy can no longer say that nothing
is sent to the developer because the developer has no server. It now says
that the app has no server of its own behind it and reports nothing to the
developer, and that the instance, when it opens, will be an instance like
any other, with a privacy policy of its own. This matches the policy at
buffered.tv/privacy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CZ5UTv5NoGZ2RXESPiisne
2026-10-14 00:09:22 +01:00
app No pull to refresh on a television 2026-10-09 16:20:56 +01:00
gradle BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
.gitignore BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
build.gradle.kts BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
gradle.properties BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
gradlew BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
gradlew.bat BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
LICENSE BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00
PRIVACY.md The privacy policy says the app has no server of its own, not that we have none 2026-10-14 00:09:22 +01:00
README.md The same app on Google TV, Android TV and Fire TV 2026-10-09 15:52:54 +01:00
settings.gradle.kts BufferedTV for Android phones and tablets 2026-10-08 23:15:10 +01:00

BufferedTV for Android

An unofficial PeerTube client for Android phones, tablets and televisions. Free, open source, and built with ❤️ by Ric Harvey, supported by SquareCows.

One app, and one APK, runs on all of them: phones and tablets, and Google TV, Android TV and Fire TV with a remote control.

This is the Android companion to BufferedTV for Apple TV and BufferedTV for iPhone and iPad, with the same features rebuilt in Kotlin and Jetpack Compose. It lives at buffered.tv.

What is PeerTube?

PeerTube is video hosting that nobody owns. Instead of one company running one enormous site, thousands of independent servers, called instances, host their own videos and share them with each other. No algorithm deciding what you see, no adverts, no company.

What it does

  • Browse any instance. Trending, recently added, live now, top rated and local videos, with a full grid behind every shelf.
  • Search the whole network. Searches every public instance through SepiaSearch by default, and plays what it finds wherever it lives.
  • Sign in, or don't. Subscriptions, playlists, Watch Later, history and continue watching, with two-factor sign-in. Or browse anonymously.
  • Watch properly. Each video has one page: the player at the top, with full screen, picture in picture, subtitles, audio tracks and speed, and quality pinned to the best the instance published. Turn a phone sideways and the video fills the screen.
  • Have your say. Like or dislike, subscribe to the channel, save to Watch Later in one tap or to any playlist, share, and read, write and reply to comments.
  • Subtitles in your language. Point it at a LibreTranslate server and it translates a video's subtitles while you watch.
  • Your feed, your way. Block an account or a whole server and it disappears everywhere, comments included. Report anything worse to the moderators.
  • Parental controls. Sensitive videos are hidden until you choose otherwise. Set a parental PIN and changing that needs it, or choose Ask for the PIN to enter it before each sensitive video plays.
  • Phones and tablets. A bar along the bottom on a phone, a rail down the side on a tablet, and a watch page that puts more from the channel in a second column when there is room for one.
  • Televisions. On Google TV, Android TV and Fire TV everything is reached with the remote's arrows. Whatever has the focus wears a bright ring, a video opens filling the screen with the player's controls under the remote, and Back steps out to the video's page and then to the list it came from, with the focus where it was left.
  • Nothing is tracked. No analytics, no adverts, no third-party code, and no server of ours. See the privacy policy.

Not in this version

Things the iPhone and iPad app does that this one doesn't yet:

  • Sound that carries on with the screen off or the app closed. A video keeps playing in picture in picture when you leave the app, and stops when that window is closed.
  • Leaving out search results from servers the device can't reach.
  • Links that open the app at a video or a channel.

Requirements

Android 7.1 (API 25) or later, which takes in Fire OS 6, 7 and 8: every Fire TV stick and box from the 2018 Fire TV Stick 4K onwards. Nothing older trusts the certificates most PeerTube instances use. The app is built against Android 17 (API 37) and targets Android 16 (API 36).

Televisions

The same APK installs on a television; there is no separate build. To put it on a Fire TV or a Google TV device, turn on installing from unknown sources (or developer options and ADB debugging) on the device, then either send the APK over with an app made for that, or from a computer on the same network:

adb connect <the device's address>
adb install BufferedTV.apk

It then appears among the device's apps under its own banner.

How it behaves there: the app decides once, as it starts, whether it is on a television (AppModel.isTelevision). On one, pages take the focus as they open, text fields wait for OK before raising the keyboard, cards grow under the focus, and picture in picture is left out.

Building

You need a JDK (17 or later; the one inside Android Studio works) and the Android SDK with platform 37 and build tools 36.1.0. Point local.properties at the SDK:

sdk.dir=/path/to/android/sdk

Then:

./gradlew :app:assembleDebug        # a development build
./gradlew :app:testDebugUnitTest    # the unit tests
./gradlew :app:lintDebug            # Android lint

The development build installs beside the release one, as com.squarecows.bufferedtv.debug.

Working against a local PeerTube

Release builds only ever speak HTTPS. A development build will also talk plainly to a PeerTube on your own machine, so sign-in, comments and the rest can be tried without touching a real instance. With one listening on port 9000:

adb reverse tcp:9000 tcp:9000

and enter localhost:9000 as the instance address. From the emulator, 10.0.2.2:9000 works without the adb reverse.

Release builds

A release is signed with a key that is kept outside this repository. The build looks for ~/.bufferedtv-android/keystore.properties (or the file named by BUFFEREDTV_KEYSTORE_PROPERTIES):

storeFile=bufferedtv-release.jks
storePassword=...
keyAlias=bufferedtv
keyPassword=...

storeFile is taken from the folder the properties file is in. Then:

./gradlew :app:assembleRelease

writes app/build/outputs/apk/release/app-release.apk, shrunk and optimised. Without the properties file the APK is built unsigned.

Keep the key and its passwords backed up somewhere private, and never commit them. Android only installs an update over an existing copy of the app when it is signed with the same key.

How it is put together

app/src/main/java/com/squarecows/bufferedtv/
  core/          the instance, the account, feeds and formatting
    model/       PeerTube's JSON, as Kotlin
    net/         the HTTP layer, the PeerTube client, the search index
    store/       settings, blocks, the parental PIN, the encrypted store
  nav/           the sections and the pages opened within each
  playback/      what to play for a video, the player, the watch page's model
  ui/            Compose: theme, shared parts (focus and remote control in
                 components/Focus.kt), and one file per screen

Everything the app is built from comes from two places: Google's AndroidX libraries (Compose, Material 3, Media3) and JetBrains' Kotlin libraries (coroutines, serialization). The HTTP layer is the platform's own HttpURLConnection, pictures are loaded by a few dozen lines in RemoteImage.kt, and sign-in tokens are sealed with a key in the Android Keystore. There is no analytics or crash reporting library, and nothing that talks to anyone but the instances you use.

Before a public release

  • The privacy policy at buffered.tv/privacy, which the app links to, should say what PRIVACY.md says about Android.
  • "Help and support" in Settings opens the Apple TV app's issue tracker, as the other apps do, until this repository is public.

Licence

MIT. See LICENSE.

PeerTube is a trademark of Framasoft. This app is not affiliated with the PeerTube project.