madeye
meow
Dart

Meow - A Clash/mihomo Android client with Flutter UI, powered by mihomo-rust and netstack-smoltcp tun2socks

Last updated Jul 3, 2026
94
Stars
4
Forks
0
Issues
0
Stars/day
Attention Score
42
Language breakdown
No language data available.
โ–ธ Files click to expand
README

Meow

Feature Graphic

A Clash/mihomo Android client with Flutter UI, powered by meow-rs and netstack-smoltcp tun2socks.

An iOS port is in public beta โ€” see madeye/meow-ios.

Download

Get it on Google Play Download from GitHub Join the iOS TestFlight public beta

Architecture

Flutter UI (Dart)
    |  MethodChannel / EventChannel
    v
Android Native (Kotlin)
    |  VpnService + AIDL IPC
    |  JNI (System.loadLibrary)
    v
Rust FFI (libmihomoandroidffi.so)
    |  netstack-smoltcp tun2socks
    |  Per-socket VpnService.protect() via JNI
    v
meow-rs (Cargo dependency)
    |  Tunnel, Config, Proxy, API
    v
Network

Features

  • Proxy Protocols: Shadowsocks, Trojan, AnyTLS, Direct
- Shadowsocks plugins: built-in simple-obfs (HTTP/TLS) and v2ray-plugin (WebSocket, optional TLS) โ€” no external SIP003 binary required
  • Transports: TLS (with ECH), WebSocket, gRPC, HTTP/2, HTTPUpgrade
  • Rule Engine: Domain, IP, port, geo-based routing, rule-providers, proxy groups
  • tun2socks: Pure Rust via netstack-smoltcp (no C dependencies)
  • DNS: Engine-owned fake-IP resolver; every in-TUN DNS query is answered
in-process and upstream lookups bypass the tunnel via protected sockets
  • Socket Protection: Per-socket VpnService.protect(fd) via JNI callback
  • REST API: Embedded external controller (127.0.0.1:9090) drives the
live connections, logs, rules, and traffic views
  • Flutter UI: Shadowrocket-style tab view
- Home: VPN toggle, proxy group & node selection, connection status - Subscribe: Add/edit/remove subscriptions, YAML editor, import/export config - Traffic: Real-time speed chart, session upload/download stats - Connections / Logs / Rules: Live views powered by the REST API - Settings: Version, network config, per-app VPN proxy/bypass, connectivity diagnostics, about
  • i18n: English, Chinese (zh_CN)
  • E2E Tests: Automated with ssserver + Android emulator (SS and HTTP-proxy harnesses)

Building

Prerequisites

  • Android SDK (API 36) with NDK
  • Rust toolchain with Android targets:
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
  • Flutter SDK (3.x)
  • JDK 17

Build

# Generate Flutter module files
cd flutter_module && flutter pub get && cd ..

Build debug APK (arm64 only, release Rust)

export JAVA_HOME=/path/to/jdk17 ./gradlew :mobile:assembleDebug -PTARGETABI=arm64 -PCARGOPROFILE=release

The APK is at mobile/build/outputs/apk/debug/mobile-arm64-v8a-debug.apk.

E2E Test

# Requires: ssserver, Android emulator, adb
./test-e2e.sh

Project Structure

core/                           Android library module
  src/main/java/                Kotlin: VPN service, AIDL, Room DB
  src/main/rust/
    mihomo-android-ffi/         Rust FFI crate (JNI + tun2socks)
flutter_module/                 Flutter UI module
  lib/screens/                  Home, Subscriptions, Traffic, Connections,
                                Logs, Rules, Per-app proxy, Settings
  lib/services/                 VPN channel, REST API client, traffic history
  lib/l10n/                     Localization (en, zh_CN)
mobile/                         Android app module (FlutterActivity host)
test-e2e.sh                     End-to-end test script (Shadowsocks)
test-e2e-http.sh                End-to-end test script (HTTP proxy)

License

MIT - Max Lv

๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท madeye/meow ยท Updated daily from GitHub