flutter_singbox_client
A Flutter plugin for integrating the Sing-box core into applications with a 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
| Platform | Status | Core | Availability |
|---|---|---|---|
| Android | โ Done | Sing-box 1.14.0-alpha.20 | Free |
| iOS | ๐ง In Development | โ | Coming Soon |
| macOS | ๐ง In Development | โ | Coming Soon |
| Windows | ๐ Planned | โ | โ |
| Linux | ๐ Planned | โ | โ |
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.0.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 liked this package and want to accelerate the development of iOS and desktop platform support, consider supporting the project with a donation. Your contributions will directly help bring flutter_singbox_client to more platforms faster.
Libraries
- flutter_singbox_client
- flutter_singbox_client โ Full Sing-box engine SDK for Flutter/Android.





