wireguard_flutter_pro 0.1.2
wireguard_flutter_pro: ^0.1.2 copied to clipboard
A Flutter plugin to configure and control WireGuard VPN tunnels on Android, iOS, macOS, Windows, and Linux.
wireguard_flutter_pro #
A Flutter plugin for configuring and controlling WireGuard VPN tunnels across Android, iOS, macOS, Windows, and Linux.
Official package publisher: bgtunnel.com
Project Origin and Attribution #
This is not the original upstream package.
This project is a maintained derivative of the original wireguard_flutter work:
- Original upstream repository: Caqil/wireguard_flutter
- Current maintained repository: 4bhisheksharma/wireguard_flutter_pro
- Maintainer portfolio: abhishek-sharma.com.np
Features #
- Initialize and manage a WireGuard interface lifecycle.
- Start and stop tunnels using WireGuard quick config content.
- Listen to tunnel stage changes as a Dart stream.
- Query current connection stage on demand.
- Generate key pairs on supported platforms.
Supported Platforms #
| Platform | Minimum |
|---|---|
| Android | SDK 21+ |
| iOS | 15.0+ |
| macOS | 12.0+ |
| Windows | 7+ |
| Linux | Any modern distro with WireGuard tools |
Installation #
flutter pub add wireguard_flutter_pro
Import the package:
import 'package:wireguard_flutter_pro/wireguard_flutter_pro.dart';
Quick Start #
import 'package:flutter/foundation.dart';
import 'package:wireguard_flutter_pro/wireguard_flutter_pro.dart';
final wireguard = WireGuardFlutter.instance;
const String conf = '''[Interface]
PrivateKey = <client-private-key>
Address = 10.8.0.4/32
DNS = 1.1.1.1
[Peer]
PublicKey = <server-public-key>
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Endpoint = <server-host>:51820
''';
Future<void> setupAndConnect() async {
await wireguard.initialize(interfaceName: 'wg0');
wireguard.vpnStageSnapshot.listen((stage) {
debugPrint('VPN stage: $stage');
});
await wireguard.startVpn(
serverAddress: '<server-host>:51820',
wgQuickConfig: conf,
providerBundleIdentifier: 'com.example.app.WGExtension',
);
}
Future<void> disconnect() async {
await wireguard.stopVpn();
}
For WireGuard config format details, see wg-quick documentation.
API Summary #
initialize({required String interfaceName})startVpn({required String serverAddress, required String wgQuickConfig, required String providerBundleIdentifier})stopVpn()refreshStage()stage()vpnStageSnapshotgenerateKeyPair()
VPN Stages #
Available enum states:
connectingconnecteddisconnectingdisconnectedwaitingConnectionauthenticatingreconnectnoConnectionpreparingdeniedexiting
Platform Setup #
Android #
- Works with both
FlutterActivityandFlutterFragmentActivityhosts. - VPN permission is requested with an ActivityResultListener flow.
- Ensure the activity remains attached while calling
initializeorstartVpn.
iOS and macOS #
Apple platforms require a Packet Tunnel Network Extension.
Required setup:
- Add a packet tunnel extension target (for example,
WGExtension). - Set deployment target to iOS 15.0+ and macOS 12.0+ where applicable.
- Add entitlements in app and extension:
com.apple.developer.networking.networkextension = packet-tunnel-providercom.apple.security.application-groups = <your-app-group>
- Pass
providerBundleIdentifieras your extension bundle id.
If this setup is invalid, startVpn returns a FlutterError.
Windows #
- Run as Administrator to create and manipulate tunnels.
- During debug, open an elevated terminal before running
flutter run.
Linux #
Install dependencies:
sudo apt install wireguard wireguard-tools openresolv
Notes:
- The system may prompt for your sudo password when the tunnel is manipulated.
- Do not launch your app as root (
sudo flutter run), because it can break the expected tunnel flow.
FAQ and Troubleshooting #
Linux: resolvconf: command not found #
Install openresolv or remove DNS from your WireGuard config.
iOS/macOS: tunnel does not start #
Verify:
- Packet tunnel extension target exists.
- Extension bundle id matches
providerBundleIdentifier. - Network Extension and App Group entitlements are present in both targets.
Contributing #
Contributions are welcome. Please read CONTRIBUTING.md before opening pull requests.
License #
This project is released under the MIT License. See LICENSE.
"WireGuard" is a registered trademark of Jason A. Donenfeld.