Chute Devs

Hello Android — Chute Comes to the Android Ecosystem

Hello everyone.

Today marks a major milestone for Chute: we are officially entering the Android ecosystem with MonoProxy for Android, powered by our new KLNEKit-K engine.

Why Android?

Since the launch of Chute iOS and Chute Mac, the most common question we received was: “When will you support Android?” The answer is: now.

Android represents the largest mobile platform in the world. Many of our users use both iOS and Android devices, and have been asking for a consistent proxy experience across platforms. With MonoProxy for Android, they can now use the same proxy configurations, the same protocol support, and the same DNS features on all their devices.

KLNEKit-K: A Ground-Up Kotlin Port

The biggest technical challenge was the proxy engine itself. KLNEKit — our core engine for iOS and macOS — is written in Objective-C and deeply integrated with Apple frameworks (Network.framework, Security.framework, GCD). Porting it to Android required a complete rewrite.

We chose Kotlin for the new engine. Kotlin is the modern language for Android development, compiles to JVM bytecode, and has excellent coroutine support for asynchronous I/O — the foundation of any proxy engine. Over six months of development, we ported the entire engine stack:

Layer Description
Protocol Adapters 14+ proxy protocols: HTTP, SOCKS5, Shadowsocks (legacy + 2022), ShadowsocksR, VMess, VLESS, Trojan, TUIC, AnyTLS, ShadowTLS, Hysteria2, WireGuard, SSH
TUN Layer Full IPv4/IPv6/TCP/UDP packet parsing in pure Kotlin, backed by lwIP for TCP state
DNS System DNS-over-HTTPS, DNS-over-TLS, DNS-over-QUIC, FakeDNS, NXDOMAIN caching
Rule Engine Surge-compatible rule matching with GEOIP, domain-set, IP-CIDR, and policy groups
TLS & MITM TLS connection management with Bouncy Castle, MITM certificate generation

Architecture on Android

MonoProxy for Android uses Android’s VpnService API to create a TUN interface. Here is how it works:

  1. The app creates a VPN interface through VpnService, obtaining a raw TUN file descriptor
  2. Raw IP packets from all apps flow into this TUN fd
  3. The Kotlin TUN runtime parses every packet — IPv4, IPv6, TCP, UDP, ICMP
  4. DNS queries are intercepted and resolved through the local DNS system (DoH/DoT/FakeDNS)
  5. TCP connections are tracked by the lwIP TCP stack (via JNA native bridge)
  6. After rule matching and policy selection, traffic is forwarded through the appropriate proxy protocol
  7. Outbound connections are protected via VpnService.protect() to avoid routing loops

The lwIP TCP stack is compiled as a native shared library per Android ABI (arm64-v8a, armeabi-v7a, x86_64) and linked through JNA. This gives us a production-grade TCP/IP stack without depending on the device’s kernel implementation.

What MonoProxy for Android Supports

  • All major proxy protocols (Shadowsocks, VMess, VLESS, Trojan, TUIC, Hysteria2, WireGuard, and more)
  • Full TUN mode VPN (all-app proxy)
  • Per-app proxy filtering
  • DNS encryption (DoH, DoT, DoQ)
  • GEOIP-based routing
  • Remote configuration subscription
  • Home screen widget for quick toggle
  • Quick Settings tile
  • Foreground notification with live traffic stats

Development Status

MonoProxy for Android is currently in active development. The Kotlin engine has already reached 895 tests with zero failures. The Android app has been tested on devices from Android 10 through Android 15, on both ARM and x86 architectures.

We are targeting a public release in the coming months. If you would like to participate in beta testing, please contact us via Support.

What This Means for Chute

With Android support, Chute becomes a truly cross-platform proxy solution. The same configuration file works across iOS, macOS, and Android. The same rule-sets, the same DNS configuration, the same protocol support. If you switch between an iPhone and an Android tablet, your proxy experience follows you seamlessly.

This is also a technical achievement for our team: building a production-grade proxy engine in two languages (Objective-C and Kotlin), targeting three platforms (iOS, macOS, Android), with full protocol parity and a shared configuration format.

We have been working toward this for a long time, and we are excited to finally share it. MonoProxy for Android — backed by our new Kotlin engine — brings the full Chute proxy experience to the Android platform.

Stay tuned for the beta release announcement. More details to come.

Thanks.

Chute Devs