Skip to content
Ubaid_ur_Rehman
All work

Photon-Dns

DNS resolver manager for Android that measures latency and switches resolvers, within bounds you set.

Problem

Android DNS configuration is either manual or automatic, and the automatic option picks for you without telling you what it picked.

What I built

Kotlin and Jetpack Compose with DNS-over-UDP, strict DNS-over-HTTPS and strict DNS-over-TLS resolver support, per-resolver latency checks and automatic switching with cooldown and hysteresis, plus bounded forwarding.

Impact

Resolver choice becomes an observable decision with the latency data to justify it. Bounds and hysteresis stop it oscillating.

Highlights

  • DNS-over-UDP, strict DNS-over-HTTPS, and strict DNS-over-TLS resolver support
  • Per-resolver latency checks and automatic switching with cooldown and hysteresis
  • Kotlin + Jetpack Compose with bounded packet handling and protected upstream sockets

Stack

  • Kotlin
  • Android
  • DNS
  • Privacy
  • DoH
  • DoT
GitHub