tsnet_flutter 0.1.0
tsnet_flutter: ^0.1.0 copied to clipboard
Embed Tailscale's tsnet in Flutter apps. Provides a userspace WireGuard tunnel with a localhost TCP proxy — no VPN entitlement needed on iOS.
tsnet_flutter #
Embed Tailscale's tsnet in Flutter apps. Provides a userspace WireGuard tunnel with a localhost TCP proxy — no VPN entitlement needed on iOS.
How it works #
Flutter (Dart) → MethodChannel → Swift Plugin → Go static library (tsnet)
↓
WireGuard tunnel (userspace)
↓
Remote device (100.x.x.x)
The Go layer runs a local TCP proxy: your app connects to localhost:PORT, and traffic is forwarded through a WireGuard tunnel to the target device's Tailscale IP. Flutter doesn't know about Tailscale — it just sees a localhost port.
Usage #
import 'package:tsnet_flutter/tsnet_flutter.dart';
final tsnet = TsnetFlutter();
// Join the Tailnet
await tsnet.start(authKey: 'tskey-auth-...');
// Create a local proxy to the remote device
final localPort = await tsnet.startProxy('100.64.0.5', port: 5050);
// Connect your client to the proxy
yourClient.connect('127.0.0.1', port: localPort);
// Clean up
await tsnet.stopProxy();
await tsnet.stop();
Platform support #
| Platform | Status |
|---|---|
| iOS | Supported (arm64 device + simulator) |
| Android | Planned |
Requirements #
- iOS 14.0+
- Tailscale auth key (generate at login.tailscale.com)
Building from source #
The pre-built xcframework is included in the package. To rebuild from Go source:
# Prerequisites: Go 1.23+, Xcode
./build_go.sh
License #
BSD-3-Clause. See LICENSE.