Developer
menaworks. ↗
← All projects

Onyx Control

Android

Apple TV remote control app for Android. Speaks the native Companion protocol with HAP pairing, wrapped in a clean Jetpack Compose interface.

View source on GitHub ↗

Downloads

First public release.

  • Apple TV discovery via mDNS
  • Secure HAP (SRP-6a) pairing with PIN
  • D-pad, trackpad, volume, Siri, sleep/wake controls
  • Now Playing with artwork
  • App quick-launch, Quick Settings tile, home screen widget
  • English and Turkish

Note: This APK is signed with a different key than the Play Store build; installing over the Play Store version is not possible (uninstall first).

View on GitHub

About

Onyx Control Logo

Onyx Control

Control your Apple TV from your Android phone.

Platform Version License


Features

  • Device Discovery — Automatically find Apple TVs on your local network via mDNS
  • Secure Pairing — HAP-based SRP-6a pairing with on-screen PIN entry
  • Remote Control — D-pad navigation, menu, home, play/pause, Siri, sleep/wake
  • Touch Trackpad — Swipe-based navigation just like the Siri Remote
  • Volume Control — Use your phone's hardware volume buttons
  • Now Playing — View current media info with album artwork
  • Quick Launch — Launch apps directly on your Apple TV
  • Quick Settings Tile — One-tap access from the notification shade
  • Home Screen Widget — Control buttons right on your home screen
  • Multi-language — English and Turkish

Screenshots

Remote

Architecture

The project is split into four Gradle modules:

Module Description
app Android UI (Jetpack Compose, Hilt, ViewModel)
protocol Apple TV Companion protocol (TCP, pairing, encrypted sessions)
crypto Cryptography (ChaCha20-Poly1305, Ed25519, Curve25519, SRP-6a, HKDF, OPACK, TLV)
serialization Data serialization (Protobuf)

Tech Stack

  • Language: Kotlin
  • UI: Jetpack Compose + Material 3
  • DI: Hilt
  • Async: Kotlin Coroutines + Flow
  • Navigation: Jetpack Navigation Compose
  • Image Loading: Coil
  • Widget: Glance
  • Min SDK: 26 (Android 8.0)
  • Target SDK: 35 (Android 15)

Building

# Debug build
./gradlew assembleDebug

# Release bundle (requires signing config in local.properties)
./gradlew bundleRelease

Release Signing

Create a keystore and add the following to local.properties:

RELEASE_STORE_FILE=../onyx-control-release.jks
RELEASE_STORE_PASSWORD=your_password
RELEASE_KEY_ALIAS=onyx-control
RELEASE_KEY_PASSWORD=your_password

Privacy Policy

Onyx Control does not collect any personal data. All communication happens locally on your Wi-Fi network. See the full Privacy Policy.

Support

If you enjoy the app, you can support development by sending crypto:

  • Bitcoin (BTC)
  • Ethereum (ETH)
  • USDT (TRC-20)

Wallet addresses are available in the app under the Donation screen.

License

All rights reserved.