Cross-platform VPN client built with Qt 6 and Xray core.
Official Demo: https://jingoo.biz
The GitHub repository provides a basic feature version, with the open-source edition updated once every six months and the commercial edition receiving weekly bug fixes. We do not offer free customization or update services. This project is intended as a technical reference for developers who have the ability to build, modify, and use it themselves — it is a form of technical exchange.
Open-source does not mean free. We do offer official customization services — you provide detailed requirements, and we quote accordingly. Pricing starts at $500 USD and will not be low, so please consider your budget.
For details, visit our online build service (commercial edition, with better protocol support and UI customization).
- Telegram Channel: @OpineWorkPublish
- Telegram Group: @OpineWorkOfficial
- Cross-platform: Android, iOS, macOS, Windows, Linux
- Modern UI: Smooth user interface built with Qt 6 QML
- Multi-protocol: Based on Xray core, supports VMess, VLESS, Trojan, Shadowsocks, etc.
- Multi-language: Supports 8 languages (English, Chinese, Vietnamese, Khmer, Burmese, Russian, Persian, etc.)
- White-labeling: Supports brand customization and multi-tenant deployment
| Protocol | Open Source | Commercial |
|---|---|---|
| VMess | ✅ | ✅ |
| VLESS | ✅ | ✅ |
| VLESS+Reality | ✅ | |
| Trojan | ✅ | ✅ |
| Shadowsocks | ✅ | ✅ |
| WireGuard | ❌ | ✅ |
| SOCKS | ❌ | ✅ |
| HTTP | ❌ | ✅ |
| Hysteria | ❌ | ✅ |
| Hysteria2 | ❌ | ✅ |
| TUIC | ❌ Not supported by core | ❌ Not supported by core |
| IPv6 | ❌ | ✅ |
- Notice
- Features
- Protocol Support
- Screenshots
- Quick Start
- Platform Support
- Platform Distribution
- Documentation
- Language Support
- Tech Stack
- Build Options
- Development
- Subscription Format
- License Verification
- Compliance
- License
- Qt: 6.10.0+ (recommended 6.10.0 or higher)
- CMake: 3.21+
- Compiler:
- macOS/iOS: Xcode 15+
- Android: NDK 27.2+
- Windows: MinGW 13+ (included with Qt)
- Linux: GCC 11+ or Clang 14+
# 1. Fork this repository to your GitHub account
# 2. Clone your fork
git clone https://github.com/YOUR_USERNAME/JinGo.git
cd JinGo
# 3. Create your white-label config
cp -r white-labeling/1 white-labeling/YOUR_BRAND
# 4. Edit white-labeling/YOUR_BRAND/bundle_config.json
{
"panel_url": "https://your-api-server.com",
"app_name": "YourApp",
"support_email": "support@your-domain.com",
...
}
# 5. Replace app icons in white-labeling/YOUR_BRAND/icons/All build scripts are in scripts/build/:
# Android APK
./scripts/build/build-android.sh --release --abi arm64-v8a
# macOS App (Universal Binary: arm64 + x86_64)
./scripts/build/build-macos.sh --release
# iOS App (requires Apple Developer Team ID)
./scripts/build/build-ios.sh --release --team-id YOUR_TEAM_ID
# Linux
./scripts/build/build-linux.sh --release
# Windows (PowerShell)
./scripts/build/build-windows.sh./scripts/build/build-macos.sh --release --brand YOUR_BRAND
./scripts/build/build-android.sh --release --brand YOUR_BRAND
./scripts/build/build-ios.sh --release --brand YOUR_BRAND --team-id YOUR_TEAM_ID| Platform | Output | Location |
|---|---|---|
| Android | APK | release/jingo-*-android.apk |
| macOS | DMG | release/jingo-*-macos.dmg |
| iOS | IPA | release/jingo-*-ios.ipa |
| Windows | EXE/MSI | release/jingo-*-windows.exe |
| Linux | tar.gz | release/jingo-*-linux.tar.gz |
| Platform | Architecture | Minimum Version | Status |
|---|---|---|---|
| Android | arm64-v8a, armeabi-v7a, x86_64 | API 28 (Android 9) | ✅ |
| iOS | arm64 | iOS 15.0 | ✅ |
| macOS | arm64, x86_64 | macOS 12.0 | ✅ |
| Windows | x64 | Windows 10 | ✅ |
| Linux | x64 | Ubuntu 20.04+ | ✅ |
| Platform | Format | Signing | Installer |
|---|---|---|---|
| Android | .apk |
Keystore (apksigner) | Direct install / Google Play |
| iOS | .ipa |
Apple Developer Certificate | TestFlight / App Store / Sideload |
| macOS | .dmg |
Developer ID (optional) | Drag-to-Applications |
| Windows | .exe |
No code signing (UAC manifest) | NSIS installer |
| Linux | .tar.gz / .deb / .rpm |
None | CPack |
| Feature | Android | iOS | macOS | Windows | Linux |
|---|---|---|---|---|---|
| TUN Mode | VpnService | Network Extension | Root (direct TUN) | WinTUN | TUN device |
| Local Proxy (SOCKS/HTTP) | Yes | No (sandbox) | Yes | Yes | Yes |
| System-wide VPN | Yes | Yes | Yes | Yes | Yes |
| Split Tunneling | Yes | Limited | Yes | Yes | Yes |
iOS requires code signing for all distribution methods. The app uses Network Extension (PacketTunnelProvider) which requires special entitlements.
Required Apple Developer Resources:
| Resource | Description |
|---|---|
| Developer Certificate | Apple Development (debug) or Apple Distribution (release) |
| App ID | Main app + PacketTunnelProvider extension (2 App IDs) |
| Provisioning Profile | One for main app, one for extension |
| Entitlements | Network Extension, VPN API, App Groups, Keychain |
Distribution Methods:
| Method | Certificate | Profile Type | Notes |
|---|---|---|---|
| Development (USB) | Apple Development | Development | get-task-allow = true, max 100 devices |
| Ad Hoc | Apple Distribution | Ad Hoc | Max 100 registered devices |
| TestFlight | Apple Distribution | App Store | Up to 10,000 testers, Apple review required |
| App Store | Apple Distribution | App Store | Has third-party payment, not supported out-of-box, requires custom development |
| Enterprise | Enterprise cert | In-House | $299/year program, no device limit |
Bundle ID Configuration:
Main App: <your.bundle.id>
Extension: <your.bundle.id>.PacketTunnelProvider
App Group: group.<your.bundle.id>
When using --bundle-id, the build script automatically derives the extension Bundle ID and App Group. Entitlements files in platform/ios/ may need manual update if the Team ID changes.
Build & Sign:
# Development build (auto-sign + install to device)
./scripts/build/build-ios.sh --debug --bundle-id com.example.vpn --team-id YOUR_TEAM_ID --install
# Release build (unsigned .app, sign separately)
./scripts/build/build-ios.sh --release --bundle-id com.example.vpn --skip-sign
# Sign and create IPA
./scripts/signing/post_build_ios.shNote: The Network Extension entitlement (
com.apple.developer.networking.networkextension) requires explicit approval from Apple. You must enable this capability in your App ID configuration on the Apple Developer Portal.
macOS does not use Network Extension. Instead, it runs the JinGoCore helper with setuid root to directly create and manage the TUN device.
# Build DMG
./scripts/build/build-macos.sh --release --dmg
# Signed (Developer ID, optional)
./scripts/build/build-macos.sh --release --dmg --sign --team-id YOUR_TEAM_IDNote: The macOS JinGoCore helper requires setuid root to operate the TUN device, which is configured automatically during installation. Code signing is optional but recommended for distribution (avoids Gatekeeper warnings).
Android uses standard VpnService API. No special signing requirements beyond a release keystore.
# Debug APK (auto-signed)
./scripts/build/build-android.sh --debug
# Release APK (signed with keystore)
./scripts/build/build-android.sh --release --sign
# Multi-ABI build
./scripts/build/build-android.sh --release --abi allWindows uses WinTUN driver for TUN mode. The installer requires Administrator privileges.
# Build + package
./scripts/build/build-windows.sh
# Output: release/jingo-*-windows-setup.exe (NSIS installer)- iOS sandbox restriction: iOS does not support local SOCKS/HTTP proxy mode. All traffic goes through the TUN device via Network Extension.
- iOS entitlements: Changing the Bundle ID requires updating
platform/ios/JinGo.entitlementsandplatform/ios/PacketTunnelProvider.entitlementswith the correctapplication-identifierandcom.apple.security.application-groups. - macOS notarization: For distribution outside the App Store, macOS apps should be notarized with
xcrun notarytoolto avoid Gatekeeper warnings. - Android multi-ABI: Use
--abi allto build for arm64-v8a, armeabi-v7a, and x86_64 in a single APK. - White-label Bundle ID: Each white-label brand can specify its own Bundle ID in
bundle_config.json. The OneDev CI reads this and passes it via--bundle-idto the build script.
- Architecture
- Build Guide
- Development Guide
- White-labeling
- Troubleshooting
- Platform Guide
- Panel Extension
| Language | Code | Status |
|---|---|---|
| English | en_US | ✅ |
| Simplified Chinese | zh_CN | ✅ |
| Traditional Chinese | zh_TW | ✅ |
| Vietnamese | vi_VN | ✅ |
| Khmer | km_KH | ✅ |
| Burmese | my_MM | ✅ |
| Russian | ru_RU | ✅ |
| Persian | fa_IR | ✅ |
- UI Framework: Qt 6.10.0+ (QML/Quick)
- VPN Core: Xray-core (via SuperRay wrapper)
- Network: Qt Network + OpenSSL
- Storage: SQLite (Qt SQL)
- Secure Storage:
- macOS/iOS: Keychain
- Android: EncryptedSharedPreferences
- Windows: DPAPI
- Linux: libsecret
| Option | Default | Description |
|---|---|---|
USE_JINDO_LIB |
ON | Use JinDoCore static library |
JINDO_ROOT |
../JinDo |
JinDo project path |
CMAKE_BUILD_TYPE |
Debug | Build type (Debug/Release) |
# Common options
--clean # Clean build directory
--release # Release mode
--debug # Debug mode
# Android specific
--abi <ABI> # Architecture (arm64-v8a/armeabi-v7a/x86_64/all)
--sign # Sign APK
# macOS specific
--sign # Enable code signing (requires Team ID)
--team-id ID # Apple Development Team ID
# iOS specific (signing required)
--team-id ID # Apple Development Team ID (required)
# Linux specific
--deploy # Deploy Qt dependencies
--package # Create installation package- C++17 standard
- Qt coding conventions
- Use
clang-formatfor formatting
# Enable verbose logging
QT_LOGGING_RULES="*.debug=true" ./JinGo
# Android logcat
adb logcat -s JinGo:V SuperRay-JNI:VThe default subscription format is sing-box (JSON). The application requests flag=sing-box when fetching subscription data from the panel, which returns a standard JSON configuration that is more reliable to parse across all platforms.
Clash (YAML) format is also supported as a fallback when the server returns YAML content.
Official release builds (from CI/CD) have license verification enabled (JINDO_ENABLE_LICENSE_CHECK=ON). These builds validate the application license at runtime with restrictions.
For the open-source version, you should build locally using the build scripts. Local builds have license verification disabled by default.
Note: GitHub Actions CI is not supported. Please use local build scripts or the project's OneDev CI/CD for automated builds.
This software is designed to protect user privacy and secure network communications. It is strictly prohibited to use this software for:
- Circumventing government network regulations or censorship
- Any activities that violate local laws and regulations
- Unauthorized access to restricted networks or services
Users must comply with all applicable laws and regulations of their country or region. The developers assume no liability for any misuse of this software.
MIT License
Version: 1.0.0 Qt Version: 6.10.0+ Last Updated: 2026-02






