Today SingLinkLabs, the team behind SingLinkVPN, published the source code of the first-generation prototype of the SingLinkVPN app on GitHub under the Apache-2.0 license. It is a consumer-style VPN app for Windows, macOS, Android and iOS, built from one codebase on the newly open-sourced SingLink Protocol.

It is released together with the protocol itself — see the SingLink Protocol is now open source. Together they show how an open VPN protocol and a complete client fit together, from the connect button down to the encrypted packets.

Repository: SingLinkLabs / singlink-vpn-app · Status: first-generation prototype · License: Apache-2.0 · Built with: Flutter (Dart) for the interface, Go for the core

This is not the app you download from our website

The official SingLinkVPN apps that you download from our website and app stores are separate products. They run on our production protocols, including SingLink 2.0, and their core source code is not part of this release. Nothing changes for existing users.

The prototype is a reference client for the open SingLink Protocol. It connects only to servers that speak that protocol, and it has no account sign-in: you add servers yourself by pasting a server link or importing one from the clipboard. It is not published in any app store.

What the app does

  • One-tap connect and disconnect with a large round button that shows three states: not connected, connecting and connected.

  • Protection status ("Not protected" or "Protected") and a connection timer.

  • Your IP: after connecting, the app shows the exit IP address that websites see.

  • Choose location: servers are listed with country flags, with "Quick connect (auto)" at the top. Switching location while connected reconnects automatically.

  • Honest latency: only measured values are shown. Servers that have not been measured show "—" instead of an invented number.

  • Live speed: download and upload speed, plus the data used in the current session.

  • Clear error messages that say what to do next, with the technical details one tap away.

  • Light and dark mode, following the system setting.

Two connection modes

On phones, a device-wide VPN. Android uses the system VpnService and iOS uses a Network Extension. All apps' traffic goes through the tunnel, and DNS lookups also happen inside it.

On computers, system proxy mode. When you connect, the app sets the system proxy, and it restores your previous settings when you disconnect or quit. If the app is force-closed while connected, it restores them the next time it starts. Browsers and most apps follow the system proxy; a few programs that ignore proxy settings do not. A packet-level VPN for desktop (a Network Extension on macOS, Wintun on Windows) is the planned next step.

How it is built

  • One Flutter codebase produces all four apps, with the same interface on every platform. The interface is in English.

  • A Go core contains the SingLink Protocol and is compiled into a native library for each platform, which the app calls directly.

  • On phones, the core adds the gVisor user-space network stack from Google (Apache-2.0), which turns the whole device's traffic into SingLink connections.

  • Written from scratch. Apart from the blank template that Flutter generates for a new project, all code is new. No code, icons or images were taken from other VPN apps.

Where each platform stands

  • macOS 13 or later (Apple silicon): system proxy mode. Built and tested with a real connection.

  • Android 7 or later: device-wide VPN. The APK is built and was tested with a real connection on the Android emulator.

  • iOS 15 or later: device-wide VPN. It builds and runs in the iOS simulator; the simulator cannot create a VPN tunnel, and running it on a real iPhone requires an Apple Developer account.

  • Windows 10 and 11 (x64): system proxy mode. The core library is built; the app itself has to be compiled on Windows, and the repository includes a GitHub Actions workflow that does this.

Honest limits

  • It is a prototype. It is meant for developers, researchers and anyone who wants to see how the pieces work, not as a replacement for the official apps.

  • Distribution needs extra steps. A public Mac release needs Apple signing and notarization, a real iPhone needs an Apple Developer account, and Android builds are signed with a test key.

  • macOS support currently means macOS 13 or later on Apple silicon (M-series) Macs.

  • Desktop uses system proxy mode, so programs that ignore proxy settings are not covered yet.

  • The protocol underneath is a draft. It has had an internal security review but no third-party audit yet, and it has not been field-tested in mainland China.

  • Server names are shown as the server sends them. Name servers in English for a fully English interface.

Build it and get involved

The README in the repository explains how to build the core and the app for each platform. The protocol core lives in its own repository, SingLinkLabs / singlink-protocol.

Questions, bug reports and pull requests are welcome on GitHub. Please report security vulnerabilities privately rather than in a public issue — the process is described in SECURITY.md in the protocol repository.

License and trademarks

The code is licensed under Apache-2.0: you may use, modify and redistribute it, including commercially, under the terms of the license. The names "SingLink" and "SingLinkVPN", their Chinese names and the logo are trademarks of SingLinkLabs, and the license does not grant permission to use them. Forks must use their own name and icon. The app includes the gVisor network stack, which is also licensed under Apache-2.0.

Further reading