README.md
August 10, 2026 · View on GitHub
Veil
A V2Ray / Xray client for Android — Material 3, olcRTC tunnel, built for privacy.
Download latest APK · Obtainium · Screenshots · Features · Build · Migrate
Beta software. Veil is in early active development. Bugs, crashes, and breaking changes are expected. Use at your own risk, and please report any issues you run into.
Veil is a privacy-focused proxy client forked from v2rayNG. It keeps full compatibility with standard V2Ray/Xray protocols while adding an olcRTC transport layer that tunnels traffic via encrypted WebRTC data channels.
Screenshots (v0.3.0)
Home
Panel
Settings
Features
Protocols
VMess, VLESS, Shadowsocks, Trojan, SOCKS, WireGuard, Hysteria2
olcRTC tunnel
Encrypted TCP-over-WebRTC with pluggable carriers:
- Carriers: Jitsi, Telemost, WbStream
- Transports: DataChannel, VP8, SEI
Connection modes
- VPN — full-device TUN tunnel
- Proxy — SOCKS5 only, no TUN
- Hybrid — SOCKS5 + optional in-app TUN toggle
Subscriptions & Import
- Subscription management
- QR-code import / export
Routing & Privacy
- Per-app proxy
- Custom routing rules
- DNS settings
- GeoIP / Geosite support
Advanced
- Traffic fragmentation
- Multiplexing (mux)
- Split-tunneling
- Home-screen widget
Architecture
flowchart LR
T[App traffic] --> B[VPN / Proxy Service]
B --> C[Xray core]
C --> D{Profile}
D -->|olcRTC| F[SOCKS5 127.0.0.1]
F --> G[olcRTC Go transport]
G --> H[WebRTC DataChannel]
H --> I[SFU server]
I --> J[Remote olcRTC peer]
J --> K[Internet]
D -->|Standard| E[TCP / TLS handshake]
E --> M[Remote server]
M --> N[Internet]
Core integration
The Xray core and olcRTC transport are compiled into a single libv2ray.aar via gomobile:
| Go module | Package | Role |
|---|---|---|
github.com/2dust/AndroidLibXrayLite | libv2ray.* | Xray core (routing, protocols, DNS) |
olcrtc/mobile | mobile.* | olcRTC WebRTC transport (SOCKS5 server) |
Both modules are unmodified. They share one process (:RunSoLibV2RayDaemon) and communicate via loopback SOCKS5.
For standard protocols Xray connects directly to the remote server. For olcRTC profiles, Xray routes traffic through the local olcRTC SOCKS5 proxy which tunnels it via WebRTC.
Project Layout
.
├── veil/ # Android application (Gradle project)
│ └── app/
│ ├── src/main/java/com/v2ray/ang/core/OlcrtcManager.kt
│ ├── src/main/java/com/v2ray/ang/fmt/OlcrtcFmt.kt
│ ├── src/main/java/com/v2ray/ang/ui/OlcrtcActivity.kt
│ └── ...
├── olcrtc/ # git submodule — olcRTC Go transport
├── hev-socks5-tunnel/ # git submodule — native TUN tunnel
├── AndroidLibXrayLite/ # git submodule — Go sources for Xray core bindings
├── compile-hevtun.sh # builds the native libhev-socks5-tunnel libraries
├── compile-libv2ray.sh # builds the combined libv2ray.aar (Xray + olcRTC)
└── README.md
Building from Source
Requirements
| Tool | Version |
|---|---|
| JDK | 17+ |
| Android SDK | platforms;android-37, build-tools;37.0.0, platform-tools |
| Android NDK | Required for the native TUN tunnel |
| Go + gomobile | Go 1.26+; go install golang.org/x/mobile/cmd/gomobile@latest && gomobile init |
Steps
-
Clone (with all submodules)
git clone --recurse-submodules https://github.com/venterum/veil -
Build
hev-socks5-tunnelnative librariesexport NDK_HOME=$ANDROID_HOME/ndk/<ndk-version> bash compile-hevtun.sh cp -r libs veil/app/ -
Build the combined
libv2ray.aar(Xray core + olcRTC in one AAR)export ANDROID_HOME=/path/to/android-sdk export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/<ndk-version> bash compile-libv2ray.shThe resulting AAR contains:
libv2ray.*— Xray core bindings fromAndroidLibXrayLitemobile.*— olcRTC Go transport via gomobilelibgojni.so— native Go binary for all ABIs (arm64-v8a,armeabi-v7a,x86,x86_64)geoip.dat,geosite.dat— routing rule assets
-
Build the APK
echo "sdk.dir=$ANDROID_HOME" > veil/local.properties cd veil ./gradlew assembleDebugAPK outputs:
veil/app/build/outputs/apk/debug/, split per ABI.
Migrating from v2rayNG
Veil is a fork of v2rayNG and shares its config format, so migration is seamless (available since v2rayNG 2.0.x):
- Open v2rayNG → side drawer → Backup & Restore → Backup config → Local
- Transfer the saved config files to this device
- Open Veil → side drawer → Backup & Restore → Restore config → Local, select the file
Standard protocol profiles (VMess, VLESS, Shadowsocks, Trojan, SOCKS, WireGuard, Hysteria2), subscriptions, and settings are fully compatible. olcRTC-specific profiles only work in Veil.
Full documentation (EN / RU) is available in the docs directory.
Legal Notice
Read before using this software.
This software is provided for lawful use only. By downloading, installing, or using Veil you agree to the following:
-
Laws governing the use of VPN clients, proxy tools, and privacy software vary significantly by country and region. It is solely your responsibility to ensure your use of this software complies with all applicable local, national, and international laws and regulations.
-
Using Veil to connect to third-party VPN/proxy servers does not make the author responsible for the policies, practices, or legal status of those services. You remain solely responsible for your choice of servers and the traffic you route through them.
I do not endorse or encourage any illegal activity. Use responsibly.
Credits
| Project | Author | Role |
|---|---|---|
| v2rayNG | 2dust | Upstream project this fork is based on |
| Xray-core / v2ray-core | XTLS / v2fly | Core proxy engine |
| hev-socks5-tunnel | heiher | Native TUN→SOCKS5 tunnel |
| olcRTC | openlibrecommunity | WebRTC-based encrypted transport |
| Google Sans / Google Sans Flex | Typeface (SIL OFL 1.1) |
License
This project is licensed under the GNU General Public License v3.0. See LICENSE for the full text.