# tsnet_flutter Embed [Tailscale's tsnet](https://pkg.go.dev/tailscale.com/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 ```dart 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](https://login.tailscale.com/admin/settings/keys)) ## Building from source The pre-built xcframework is included in the package. To rebuild from Go source: ```bash # Prerequisites: Go 1.23+, Xcode ./build_go.sh ``` ## License BSD-3-Clause. See [LICENSE](LICENSE).