Skip to content

tojemoc/FloatNative

 
 

Repository files navigation

FloatNative

Download on the App Store Get it on Google Play APK Download

A modern, native client for Floatplane — built from scratch for iPhone, iPad, Apple TV, Android phone, Android TV, and Fire TV.

Highlights

  • Native everywhere. SwiftUI on Apple platforms, Jetpack Compose on Android. Not a wrapped web view.
  • Closed captions on every platform, with system-styling support.
  • Picture-in-picture and background audio on iPhone, iPad, and Android.
  • Watch Later, custom Playlists, and Enhanced LTT search via a companion API.
  • Simple Floatplane OAuth login — sign in with your Floatplane account through Floatplane's official OAuth flow; tokens are DPoP-bound to a private key in the device Keychain / Keystore so they can't be replayed if intercepted.
  • Player polish: sleep timer, force-landscape, screen-stay-awake, playback-speed memory, tappable timestamps in descriptions, watch-progress restore, multi-part post support.
  • TV-first TV apps for tvOS, Android TV, and Fire TV — not phone apps stretched onto a 65" screen.

Repository layout

This is a pnpm + Gradle monorepo.

floatnative/
├── apps/
│   ├── ios/               # SwiftUI app — iOS, iPadOS, tvOS
│   ├── android/           # Jetpack Compose app — Android phone, Android TV, Fire TV
│   └── chrome-extension/  # Companion extension for Floatplane playlists in the web UI
│
├── packages/
│   ├── api/               # Companion API — original Cloudflare Workers (TS, Hono, D1)
│   ├── api-go/            # Companion API — Go reimplementation for self-hosting (chi, Postgres)
│   └── openapi/           # Community-maintained OpenAPI spec + Swift/Kotlin model generation
│
└── tools/
    └── floatcli/          # Diagnostic CLI that mirrors what the apps do, for reproducing bugs

Getting started

iOS / iPadOS / tvOS

pnpm install
open apps/ios/FloatNative.xcodeproj

Requirements: Xcode 16.4+, iOS 17+ / tvOS 17+.

Android / Android TV / Fire TV

Open apps/android/ in Android Studio (Hedgehog or newer) and let Gradle sync. Min SDK 26, target SDK 36.

Companion API

pnpm api:dev           # Cloudflare Workers local dev
pnpm api:deploy        # ship to Cloudflare

For the Go variant (self-hosting on a Linux box with Postgres), see packages/api-go/README.md.

Regenerate API models

pnpm openapi:generate:swift    # iOS models
pnpm openapi:generate:kotlin   # Android models
pnpm openapi:generate:all      # both
pnpm openapi:update-spec       # pull latest community spec

Spec and generation scripts live in packages/openapi/.

Authentication & DPoP

Floatplane's V2 auth uses DPoP (Demonstrating Proof-of-Possession) to bind OAuth tokens to a device-held private key, so intercepted tokens can't be replayed elsewhere.

Both apps store the DPoP key in the platform's secure enclave (iOS Keychain, Android Keystore) and sign every request with a fresh proof. For HLS playback — where neither AVPlayer nor ExoPlayer can sign individual segment requests — we use a manifest interception strategy: a custom resource loader signs the master playlist and key requests with DPoP, then rewrites segment URIs to absolute https:// so the player streams them natively without DPoP. The backend is designed around this split: keys require session-bound auth, segments don't.

Acknowledgments

  • The community-maintained FloatplaneAPI spec
  • Hydravion-AndroidTV — invaluable as a reverse-engineering reference
  • Wasserflug-tvOS — a great tvOS client my wife and I used every day for years, and a strong codebase to learn from
  • apple-docs MCP
  • Claude Code (why hide it)
  • The Floatplane team — for building a service worth writing a client for, and for putting up with nerds like me

License

MIT — see LICENSE.

This is an unofficial third-party client and is not affiliated with Floatplane Media Inc.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Kotlin 51.4%
  • Swift 33.9%
  • TypeScript 8.6%
  • Go 2.6%
  • Python 2.5%
  • Shell 0.8%
  • Other 0.2%