flutter_singbox_client
flutter_singbox_client is a Flutter plugin that embeds the Sing-box proxy/VPN core for building cross-platform VPN and proxy apps.
Clean, stateless, event-driven Dart API. Lightweight Β· Stateless Β· Engine-focused
Features
| Feature | Description |
|---|---|
| π VPN Mode | Full device-wide TUN tunnel via Android VpnService |
| π Proxy Mode | HTTP/SOCKS proxy without a TUN device, no permission required |
| βοΈ Clash API | Runtime mode switching and outbound group control with latency testing |
| π± Per-App Proxy | Include or exclude specific apps from the tunnel (split tunneling) |
| π System Proxy | Register HTTP inbound as device-wide proxy on Android Q+ |
| π Kill Switch | Block all traffic at the OS level when the tunnel is down |
| π Live Traffic | Real-time upload/download speeds and session totals at ~1 Hz |
| π Connection Tracking | Full per-connection metadata, lifecycle, and close control |
| π Live Logs | Real-time Go core log streaming with per-level filtering |
| β οΈ Fault Alerts | Dedicated fault stream for actionable service errors |
| π§ Memory Limits | Go runtime soft memory cap (GOMEMLIMIT) with optional connection kill |
| π§ͺ Network Testing | Built-in STUN (NAT type, latency) and network quality (speed, RPM) tests |
| β Config Validation | Go core validation and JSON formatting before connecting |
| π Hot Reload | Reload config without restarting the service or dropping connections |
| π Boot Auto-start | Boot broadcast relay so your app can reconnect after device restart |
| π¦ Zero Persistence | No database, no shared preferences, no file I/O for user data |
Screenshots
| Home | Logs | Network Test |
|---|---|---|
![]() |
![]() |
![]() |
| Per-App Proxy | Settings | Settings (2) |
|---|---|---|
![]() |
![]() |
![]() |
Sing-Box Supported Protocols & Features
VMess Β· VLESS Β· Trojan Β· Shadowsocks Β· Hysteria2 Β· TUIC Β· WireGuard Β· ShadowTLS Β· AnyTLS Β· Naive Β· Tor Β· SSH
Includes full support for V2Ray transports (WebSocket, gRPC, HTTPUpgrade, QUIC), TLS security (uTLS, Reality, ECH, ACME), FakeIP DNS, rule-based routing, and anti-censorship obfuscation.
β‘οΈ See Supported Protocols & Features for the complete reference.
Supported Platforms
Cross-platform Flutter Sing-box SDK for Android, iOS, Windows, macOS, and Linux VPN / proxy apps.
| Platform | Status | Core | Availability |
|---|---|---|---|
| Android | β Done | Sing-box 1.14.0-alpha.20 | Free |
| iOS | β Done | Sing-box 1.14.0-alpha.45 | Buy Now |
| Windows | β Done | Sing-box 1.14.0-alpha.45 | Buy Now |
| macOS | β Done | Sing-box 1.14.0-alpha.45 | Buy Now |
| Linux | β Done | Sing-box 1.14.0-alpha.45 | Buy Now |
iOS (App Store Safe)
Build Flutter VPN and proxy apps for iPhone and iPad with Sing-box β designed for App Storeβcompatible Network Extension workflows. Premium build: Buy Now.
Desktop β Windows, macOS & Linux
Ship desktop VPN / system-proxy clients on Windows, macOS, and Linux with the same Dart API as mobile. Ideal for Flutter desktop Sing-box apps that need TUN or local HTTP/SOCKS proxy. Premium builds: Buy Now.
π‘ Questions about iOS or desktop licensing? Contact @AmirZrDevv on Telegram.
Requirements
| Requirement | Minimum |
|---|---|
| Flutter SDK | >=3.19.0 |
| Dart SDK | >=3.3.0 |
Android minSdk |
23 (Marshmallow) |
Android compileSdk |
35 |
| Java target | 17 |
Installation
1. Add the dependency (pubspec.yaml):
dependencies:
flutter_singbox_client: ^1.1.0
2. Configure Android Gradle (android/app/build.gradle):
android {
compileSdk 35
defaultConfig { minSdk 23 }
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions { jvmTarget = "17" }
}
3. Permissions β declared in the SDK manifest and merged automatically. See Android Permissions for optional and sensitive permissions.
Quick Start
import 'package:flutter_singbox_client/flutter_singbox_client.dart';
final client = SingboxClient();
// Initialize once at app startup
await client.initialize();
// Request VPN permission (VPN mode only)
if (!await client.requestVPNPermission()) return;
// Validate config β throws with the Go core's error message on failure
try {
await client.checkConfig(myConfigJson);
} catch (e) {
showError('$e');
return;
}
// Connect
await client.connect(SessionOptions(
config: myConfigJson,
networkMode: NetworkMode.vpn,
notification: NotificationConfig(
title: 'My VPN',
showTrafficStats: true,
showStopButton: true,
stopButtonLabel: 'Disconnect',
),
));
// Subscribe to live events
client.serviceStateStream.listen((state) => print('State: $state'));
client.trafficStatsStream.listen((s) => print('β${s.uplinkBps} β${s.downlinkBps}'));
client.faultStream.listen((error) => showSnackbar(error));
// Disconnect
await client.disconnect();
VPN Mode vs Proxy Mode
Select the operating mode via SessionOptions.networkMode.
| VPN Mode | Proxy Mode | |
|---|---|---|
| Android service | VpnService |
Foreground Service |
| TUN device | β | β |
| Traffic capture | System-wide at OS level | Manual (apps must use the proxy) |
| VPN permission required | β | β |
| Kill switch | β | β |
| System proxy | β (Android Q+) | β |
| Per-app routing | β | β |
tun inbound in config |
Required for auto-route | Must not be present |
Use NetworkMode.vpn when your config uses "type": "tun" or "auto_route": true, or when you need kill switch, per-app routing, or system proxy.
Use NetworkMode.proxy when you only need HTTP/SOCKS proxy ports without requesting VPN permission.
Warning
Proxy mode configs must not contain a tun inbound. Starting proxy mode with a TUN config causes an immediate startup failure via faultStream.
Documentation
| Guide | Contents |
|---|---|
| Getting Started | Initialization, lifecycle, config validation, traffic, outbound groups, Clash mode, connections, network testing, system proxy, boot |
| API Reference | All methods and event streams |
| Data Models | Field reference for every SDK type |
| Best Practices | Integration patterns, pitfalls, and a full example |
| Supported Protocols & Features | All Sing-box protocols, transports, TLS, DNS, routing, and obfuscation |
| Android Permissions | Required, optional, and sensitive permissions |
| Troubleshooting | Common errors and fixes |
License
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
Attribution
This project uses third-party libraries and resources. See ATTRIBUTION.md for details.
Donation
If you like this package, consider supporting continued development of the free Android SDK and premium iOS / Windows / macOS / Linux builds.
Libraries
- flutter_singbox_client
- flutter_singbox_client β Full Sing-box engine SDK for Flutter/Android.





