flutter_singbox_client

Open Source Love License Stars Forks Issues Release pub package pub likes pub points

Tip

πŸš€ Flutter Sing-box on Android, iOS, Windows, macOS & Linux β€” iOS App Store Safe

 

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
Home Logs Network Test
Per-App Proxy Settings Settings (2)
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.

Buy Me A Coffee

Libraries

flutter_singbox_client
flutter_singbox_client β€” Full Sing-box engine SDK for Flutter/Android.