A cross-platform GUI for gonc P2P transfer (Windows, macOS, Linux, Android).
26
stars
193
commits
Java
primary language
Aug 23, 2026
updated
Point-to-point secure file transfer and VPN tunneling for desktop and Android.
Gonc helps two devices find each other with a shared passphrase. On the same LAN, peers can quickly discover each other and connect directly over the local network. Across different networks, Gonc uses NAT traversal and hole punching to establish a peer-to-peer direct connection. No account, no cloud upload, no file size gate. Gonc also includes a VPN mode for building an encrypted tunnel between your own devices.

gonc -p2p <passphrase> -linkagent on many
device architectures, then connect remotely from the desktop or Android VPN
client.Download the latest build from GitHub Releases.
Release packages are named like:
| Platform | Package |
|---|---|
| Windows x64 | gonc-gui-<version>-windows-amd64.zip |
| Windows arm64 | gonc-gui-<version>-windows-arm64.zip |
| Android arm64 | gonc-gui-<version>-android-arm64.apk |
On Windows, keep gonc-gui.exe and wintun.dll in the same folder when using
VPN features.
The signaling server is only used to help both peers meet. It cannot see the passphrase and cannot decrypt the exchanged network information.
If both peers are behind restrictive IPv4 NATs, NAT traversal may fail. In that case, use a SOCKS5 proxy server as a relay path.
If both peers have IPv6 connectivity, direct P2P connection is usually the easiest case.
For IPv4, NAT traversal behavior depends on the NAT type on each side:
| Type | NAT type | P2P traversal difficulty |
|---|---|---|
| 1 | Full Cone NAT | Easiest |
| 2 | Restricted Cone NAT | Easy |
| 3 | Port Restricted Cone NAT | Medium |
| 4 | Symmetric NAT | Hardest |
Gonc's expected IPv4 traversal support:
| Peer A NAT | Peer B NAT | Expected result |
|---|---|---|
| Type 1 | Type 1, 2, 3, or 4 | Works with TCP and UDP |
| Type 2 | Type 2, 3, or 4 | Works with TCP and UDP |
| Type 3 | Type 3 or 4 | Works with UDP |
| Type 4 | Type 4 | Does not work directly; connect through a user-provided SOCKS5 proxy server that supports UDP ASSOCIATE |
Desktop send-content capabilities:
| Content source | Windows desktop | macOS/Linux desktop |
|---|---|---|
| File | Supported | Supported |
| Folder | Supported | Supported |
| Authored text | Supported | Supported |
| Clipboard text | Supported | Supported |
| Native clipboard files | Supported | Unsupported; the app shows an explicit unsupported message when no readable clipboard text is available |
| Native clipboard image | Supported (saved as a generated PNG) | Unsupported; the app shows an explicit unsupported message when no readable clipboard text is available |
The single Add button opens a four-option picker for File, Folder, Text, and Clipboard. Files and folders can also be added by drag and drop. Each list row has its own remove control, and Clear all empties the whole list. Changes made while a send session is running are synchronized with the receiver, including an empty list after the receiver refreshes.
Resume mode validates local blocks with a BLAKE3 manifest before reusing them. For interrupted downloads, Gonc resumes from the last verified complete block instead of blindly trusting the local file size.
After a received file exists as a readable regular file and its size matches the current remote listing, the receive list marks it as locally available. This is a convenience check, not a content-integrity guarantee. On desktop, the row's locate button reveals the file in Explorer, Finder, or the platform file manager; Gonc does not open received files directly on desktop.
On Android, locally available files can be opened, opened with another app, shared, or inspected from the current receive session. These actions are not saved as download history across app launches. Opening an APK hands it to Android's package installer, which controls unknown-source authorization and installation confirmation; Gonc does not install packages silently.
Gonc can also run a VPN tunnel between devices. Deploying the server is meant to be simple: on a remote device, run:
gonc -p2p <passphrase> -linkagent
Then connect to it from the desktop or Android VPN client.
linkagent endpoint and can expose this device as the
traffic exit.gonc arguments.On Windows, VPN client mode may request administrator permission so it can configure routes and DNS protection.
Public servers used for STUN and signaling:
STUN:
tcp://turn.cloudflare.com:80
udp://turn.cloudflare.com:53
udp://stun.l.google.com:19302
stun.gonc.cc:3478
global.turn.twilio.com:3478
stun.nextcloud.com:443
MQTT:
tcp://broker.hivemq.com:1883
tcp://broker.emqx.io:1883
tcp://test.mosquitto.org:1883
tcp://mqtt.gonc.cc:1883
Gonc uses Microsoft Edge WebView2 through Wails. If the app does not open, install or repair the Microsoft Edge WebView2 Runtime.
Android may restrict long-running background work. Allow Gonc to ignore battery optimization or set the app battery mode to unrestricted.
The desktop app is built with Wails and embeds the gonetcat Go engine. The
Android app uses a gomobile-generated mobilegonc.aar built from the sibling
gonetcat checkout.
Rebuild the Android Go bridge after changing ..\gonetcat:
android\update-mobilegonc-aar.bat
Create release packages:
release.bat
gonc-gui/
app.go Wails backend methods exposed to the frontend
frontend/ Desktop React UI
internal/goncrunner/ Embedded gonc session runner
internal/httpdownload/ Desktop HTTP receive downloader
android/ Android app
android/update-mobilegonc-aar.bat
Rebuild Android mobilegonc.aar from ../gonetcat
See LICENSE.
193 commits
Java
51.9%
Go
23.9%
TypeScript
17.8%
CSS
2.2%
NSIS
1.1%
A cross-platform GUI for gonc P2P transfer (Windows, macOS, Linux, Android).
26
stars
193
commits
Java
primary language
Aug 23, 2026
updated
Point-to-point secure file transfer and VPN tunneling for desktop and Android.
Gonc helps two devices find each other with a shared passphrase. On the same LAN, peers can quickly discover each other and connect directly over the local network. Across different networks, Gonc uses NAT traversal and hole punching to establish a peer-to-peer direct connection. No account, no cloud upload, no file size gate. Gonc also includes a VPN mode for building an encrypted tunnel between your own devices.

gonc -p2p <passphrase> -linkagent on many
device architectures, then connect remotely from the desktop or Android VPN
client.Download the latest build from GitHub Releases.
Release packages are named like:
| Platform | Package |
|---|---|
| Windows x64 | gonc-gui-<version>-windows-amd64.zip |
| Windows arm64 | gonc-gui-<version>-windows-arm64.zip |
| Android arm64 | gonc-gui-<version>-android-arm64.apk |
On Windows, keep gonc-gui.exe and wintun.dll in the same folder when using
VPN features.
The signaling server is only used to help both peers meet. It cannot see the passphrase and cannot decrypt the exchanged network information.
If both peers are behind restrictive IPv4 NATs, NAT traversal may fail. In that case, use a SOCKS5 proxy server as a relay path.
If both peers have IPv6 connectivity, direct P2P connection is usually the easiest case.
For IPv4, NAT traversal behavior depends on the NAT type on each side:
| Type | NAT type | P2P traversal difficulty |
|---|---|---|
| 1 | Full Cone NAT | Easiest |
| 2 | Restricted Cone NAT | Easy |
| 3 | Port Restricted Cone NAT | Medium |
| 4 | Symmetric NAT | Hardest |
Gonc's expected IPv4 traversal support:
| Peer A NAT | Peer B NAT | Expected result |
|---|---|---|
| Type 1 | Type 1, 2, 3, or 4 | Works with TCP and UDP |
| Type 2 | Type 2, 3, or 4 | Works with TCP and UDP |
| Type 3 | Type 3 or 4 | Works with UDP |
| Type 4 | Type 4 | Does not work directly; connect through a user-provided SOCKS5 proxy server that supports UDP ASSOCIATE |
Desktop send-content capabilities:
| Content source | Windows desktop | macOS/Linux desktop |
|---|---|---|
| File | Supported | Supported |
| Folder | Supported | Supported |
| Authored text | Supported | Supported |
| Clipboard text | Supported | Supported |
| Native clipboard files | Supported | Unsupported; the app shows an explicit unsupported message when no readable clipboard text is available |
| Native clipboard image | Supported (saved as a generated PNG) | Unsupported; the app shows an explicit unsupported message when no readable clipboard text is available |
The single Add button opens a four-option picker for File, Folder, Text, and Clipboard. Files and folders can also be added by drag and drop. Each list row has its own remove control, and Clear all empties the whole list. Changes made while a send session is running are synchronized with the receiver, including an empty list after the receiver refreshes.
Resume mode validates local blocks with a BLAKE3 manifest before reusing them. For interrupted downloads, Gonc resumes from the last verified complete block instead of blindly trusting the local file size.
After a received file exists as a readable regular file and its size matches the current remote listing, the receive list marks it as locally available. This is a convenience check, not a content-integrity guarantee. On desktop, the row's locate button reveals the file in Explorer, Finder, or the platform file manager; Gonc does not open received files directly on desktop.
On Android, locally available files can be opened, opened with another app, shared, or inspected from the current receive session. These actions are not saved as download history across app launches. Opening an APK hands it to Android's package installer, which controls unknown-source authorization and installation confirmation; Gonc does not install packages silently.
Gonc can also run a VPN tunnel between devices. Deploying the server is meant to be simple: on a remote device, run:
gonc -p2p <passphrase> -linkagent
Then connect to it from the desktop or Android VPN client.
linkagent endpoint and can expose this device as the
traffic exit.gonc arguments.On Windows, VPN client mode may request administrator permission so it can configure routes and DNS protection.
Public servers used for STUN and signaling:
STUN:
tcp://turn.cloudflare.com:80
udp://turn.cloudflare.com:53
udp://stun.l.google.com:19302
stun.gonc.cc:3478
global.turn.twilio.com:3478
stun.nextcloud.com:443
MQTT:
tcp://broker.hivemq.com:1883
tcp://broker.emqx.io:1883
tcp://test.mosquitto.org:1883
tcp://mqtt.gonc.cc:1883
Gonc uses Microsoft Edge WebView2 through Wails. If the app does not open, install or repair the Microsoft Edge WebView2 Runtime.
Android may restrict long-running background work. Allow Gonc to ignore battery optimization or set the app battery mode to unrestricted.
The desktop app is built with Wails and embeds the gonetcat Go engine. The
Android app uses a gomobile-generated mobilegonc.aar built from the sibling
gonetcat checkout.
Rebuild the Android Go bridge after changing ..\gonetcat:
android\update-mobilegonc-aar.bat
Create release packages:
release.bat
gonc-gui/
app.go Wails backend methods exposed to the frontend
frontend/ Desktop React UI
internal/goncrunner/ Embedded gonc session runner
internal/httpdownload/ Desktop HTTP receive downloader
android/ Android app
android/update-mobilegonc-aar.bat
Rebuild Android mobilegonc.aar from ../gonetcat
See LICENSE.
193 commits
Java
51.9%
Go
23.9%
TypeScript
17.8%
CSS
2.2%
NSIS
1.1%