flutter_singbox_client

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

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
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

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.

Buy Me A Coffee

Libraries

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