About v2rayV — Android V2Ray Client That Finds Working Servers
v2rayV is a V2Ray and Xray client for Android that picks the server for you. You give it subscription links, or use the lists it ships with, and one press of the power button fetches them, throws out what cannot carry traffic, measures what is left against your own connection, and connects on the first server that is fast enough.
It is a fork of v2rayNG by 2dust. The cores, the protocols and the tunnel are upstream and unchanged. This fork adds Auto Mode, a fallback ladder for fetching lists on blocked networks, Iran mode, and a dashboard as the home screen.
The download is the signed APK from the project’s own GitHub release, version 2.5.0. It costs nothing, and the source is GPL-3.0.
The problem it is built around
A public subscription link hands you a few hundred servers. Most of them are dead. Some are alive but slower than the connection you already have. A normal client lists all of them and leaves you tapping through one at a time, watching each one fail.
One run on a real device went like this: 76 subscription links merged into 609 imported candidates, 39 of those carried traffic through a tunnel, and 4 were kept. The line measured 3.89 MB/s and the first accepted server delivered 3.0 MB/s.
How a server gets accepted
The bar is relative. A server passes when it delivers at least 70% of what your bare connection delivers. A fixed target fails everyone on a slow line and settles for far too little on a fast one.
Both numbers come from the same probe, and it is deliberately a single stream. The two figures get divided by each other, so they have to be the same kind of measurement. Measure the line the textbook way, with 4 to 8 parallel streams, and almost nothing would ever reach 70%.
A few other choices come from measuring rather than guessing:
- TCP reachability removes hosts but never ranks them. On a real pool, ranking by lowest tcping passed 2.1% of servers, against 7.5% for a random draw. The quickest hosts to answer are often CDN edges sitting in front of dead proxies.
- Speed tests run one at a time. Two downloads sharing one radio measure the radio, not the servers.
- Candidates are ordered by what the config says, protocol first and then country, with randomness inside each tier so a run explores instead of re-testing yesterday’s winners. VLESS with Reality or XTLS-Vision goes first and WireGuard last, following 2026 reporting on Iranian DPI.
- Sources earn their turn. Source health uses Thompson sampling, so links that keep producing good servers are tried more often without starving a new one.
Online in seconds, better in a minute
Measuring properly takes about a minute on the first run, and nobody who just pressed a button wants to spend that minute offline. So the first server proved to carry a real request connects straight away. The run keeps going, and once something has actually been measured it swaps in the better server. The provisional pick is in the speed test too, so often it just keeps its place.
The winners go into a reserve of ten. Every press after the first draws on that reserve, which is why it is instant.
Since 2.5.0 the app also looks after the reserve between runs. Every few hours it sends a small check to each saved server, a few kilobytes rather than a download, and refreshes once they have stopped answering. That check runs while the VPN is connected as well. The full refresh can use a few hundred megabytes, so it waits for Wi-Fi.
When the list itself is blocked
Fetching a subscription is often the first thing a censored network breaks. The app walks a ladder and reports which rung worked:
- Direct, from
raw.githubusercontent.com. - One mirror, only if you switched mirrors on and picked one.
- A proxy discovered from a bundled list.
- A snapshot of the lists packed inside the APK.
Mirrors are off by default. Asking a mirror for a subscription list tells whoever runs it that your address wanted one, and where this app is most useful that is not a harmless fact. You pick one under Auto Mode, Settings, Mirrors, and only that one is ever contacted.
The last rung means a first run on an already-blocked network still has something to work with. Every successful fetch is also saved on the phone, so after one good run you carry yesterday’s list instead of the one from the build date.
The honest status of this part: the fallback path compiles and is unit-tested, but the project’s README says it has not yet been exercised on a network that really blocks GitHub.
Iran mode
Iran mode turns the app around. Instead of getting you out of Iran, it connects you into it. It exists for Iranians abroad whose bank, insurer or tax office refuses a request from a foreign address.
With it on, only servers measured exiting inside Iran are kept, and the list is not topped up with fast servers from anywhere else. Configs that carry traffic unencrypted or switch off certificate checks are refused outright, because this traffic is somebody’s banking. Iranian sites stop bypassing the tunnel while an Iranian server carries the connection, and your own routing rules come back when you switch the mode off.
In 2.5.0 the liveness test in this mode asks the server to reach Iran, with a six-second limit. Earlier builds timed it against foreign hosts, which through an Iranian exit meant leaving the country over the throttled link, so good servers failed. Expect it to be slower than a normal connection, and expect few public servers to qualify. In the project’s default bundle of 2,000 configs, 33 pointed into Iranian address space and 12 of those passed the security bar. A server of your own works better.
What it does not send
No analytics, no telemetry, no crash reporting, no advertising ID, no account. About, then What this app sends, lists every host the app contacts and why. Android auto-backup is switched off, because for this app the backed-up data would be your subscription URLs and your server list.
The servers are a different matter. Public configs are run by whoever published them, so assume the operator of a free server can see your traffic, and use end-to-end encryption for anything that matters.
Which file to download
The release carries five APKs. Most phones made since about 2018 want arm64-v8a. If you are not sure, take universal: it is larger, about 70 MB against 32 MB, and runs on any supported CPU. The x86 and x86_64 builds are for emulators and x86 devices.
It installs next to v2rayNG rather than over it. The package name is com.v2rayv.app, so it keeps its own data and its own icon. Android 7.0 or newer.
When to use something else
If you have a paid provider with a handful of servers you already trust, Auto Mode has little to do, and upstream v2rayNG is more widely tested. The same goes if you prefer choosing servers by hand. And it is Android only. The desktop client where Auto Mode started is a separate project, v2rayN-Pro-Max.
Key capabilities
Judged against your own line
A server passes at 70% of what your bare connection delivers. Both numbers come from the same single-stream probe, because they are divided by each other. A fixed MB/s target would fail every slow line and undersell every fast one.
Connected in seconds, better in a minute
The first server proved to carry a real request connects immediately. The run keeps measuring, one server at a time, and swaps in a faster one if it finds it. Winners fill a reserve of ten, so the next press is instant.
Tested one at a time
Speed tests are serialised, since two downloads on one radio measure the radio. TCP reachability only removes dead hosts and never ranks them: ranking by lowest tcping passed 2.1% of a real pool, a random draw 7.5%.
A ladder for blocked networks
Lists are fetched directly, then from one mirror you chose, then through a discovered proxy, then from a snapshot inside the APK. Mirrors stay off until you switch them on. This path is unit-tested but not yet proven on a network that blocks GitHub.
Iran mode
For Iranians abroad whose bank refuses a foreign address. Keeps only servers measured exiting inside Iran, refuses unencrypted and certificate-skipping configs, and stops Iranian sites bypassing the tunnel. Off until you turn it on.
Looks after itself
Since 2.5.0 a small check goes to each saved server every few hours, including while the VPN is on, and a refresh starts once they stop answering. The full refresh waits for Wi-Fi so it does not use your mobile data.
Questions & Answers
Is this a VPN service?
No. It is a client. It does not sell, run or rent servers. It connects to servers other people publish in subscription lists, or to one of your own.
How is it different from v2rayNG?
It is v2rayNG plus Auto Mode, the fallback ladder for fetching lists, Iran mode and the dashboard. The cores, protocols and tunnel underneath are upstream and unchanged. If you are happy choosing servers by hand, upstream is the better pick: it is more widely tested.
Will it replace my v2rayNG?
No. Its package name is com.v2rayv.app, so it installs alongside, with its own data and icon.
Do I need my own subscription?
No. It ships with the v2ray-config lists, which are rebuilt every day. Your own links are added on top under Auto Mode → Sources.
Why does the first connection take about a minute?
It measures your line, then tests servers one at a time over the live tunnel. Running those tests in sequence is what makes the numbers mean anything. You are connected on a working server within seconds while that happens, and every press after the first uses the reserve of ten, so it is instant.
Does it work in Iran, China or Russia?
The protocol ordering and the fallback ladder are built for those networks. But the censored-network path is written and unit-tested, and not yet proven on a network that genuinely blocks GitHub. The project lists that as its top open item.
Why do DOWNLOAD and UPLOAD sometimes show zero?
The counters only count traffic that goes through the tunnel. Anything a routing rule sends direct is left out, so with a ruleset that bypasses local sites you can see zero while those sites load.
Does the app collect anything?
No analytics, telemetry, crash reporting, advertising ID or account. About → What this app sends lists every host it talks to and why, and all of it can be checked with a packet capture.
Is it safe to use free public servers?
Treat them as untrusted. Whoever runs a public server can see what passes through it unencrypted. Use HTTPS and end-to-end encrypted apps for anything that matters, or add a server you control.
How do I get updates?
New builds are published on the GitHub releases page and install over the top, since each release is signed with the same key. The app also has a notice slot that can show an update prompt.
Why does the download come from GitHub?
Because that is where the project publishes its signed builds. The link here points straight at the release file, so what you install is exactly what was released, not a copy.
Tutorials
Pick the right APK
Most phones made since about 2018 want arm64-v8a. If you are not sure, take universal: about 70 MB instead of 32 MB, and it runs on any supported CPU. armeabi-v7a is for older 32-bit phones, x86 and x86_64 for emulators and x86 devices.
With a phone connected over USB you can ask it directly:
adb shell getprop ro.product.cpu.abi
Install
Download the file on the phone and open it. Android asks once whether your browser or file manager may install apps; allow it. The app appears as v2rayV, next to any v2rayNG you already have. From a computer:
adb install v2rayV-2.5.0-arm64-v8a.apk
If you already run an earlier v2rayV, 2.5.0 is signed with the same key and installs as an ordinary update.
First connection
Open the app and press the power button. Android asks for VPN permission the first time. While the search runs the button turns violet, carries a stop icon, and its ring sweeps; a seven-step timeline shows which stage it is on. The first server that carries a real request connects within seconds. The run carries on for about a minute and may move you to a faster server.
When it finishes, the run names where its time went, for example line 8.1s · fetch 7.6s · probe 19.8s. Press power again during a search to stop it.
Add your own subscriptions
You do not need one: the app ships with the v2ray-config lists, rebuilt daily. To add yours, open Auto Mode → Sources. Your links are merged with the bundled ones, never swapped in for them.
Turn on Iran mode
Open Auto Mode and use the switch at the top of the screen, or tap the IR chip in the country list. Both do the same thing. It stays off until you turn it on.
Switch on a mirror (optional)
Only worth doing if raw.githubusercontent.com is blocked where you are. Auto Mode → Settings → Mirrors, then pick one. Only the mirror you pick is contacted.
Build it yourself
Requires JDK 21, Android SDK platform 37 with build-tools 37.0.0, and NDK 29.
git clone --recurse-submodules https://github.com/morpheusadam/v2rayV.git
cd v2rayV/V2rayNG
./gradlew assemblePlaystoreDebug -PABI_FILTERS=arm64-v8a
Two pieces are not in the repository: libv2ray.aar from the AndroidLibXrayLite release matching the pinned submodule, placed in V2rayNG/app/libs/, and the hev-socks5-tunnel native libraries, built with compile-hevtun.sh or compile-hevtun.ps1. The README walks through both.
Support
What you get
The signed APK from release v2.5.0 in five builds, and the complete source under GPL-3.0. You can read it, build it and change it. If you distribute a modified version, the licence requires you to publish your source as well.
What support is
If the app does not do what this page or the README says, that is a bug. Open an issue on GitHub with your Android version, your phone model, which APK you installed, and the timing line from the end of a run (line … · fetch … · probe …). That line shows which stage was slow and which fetch route worked, which is most of what is needed to find a fault.
What support is not
This is a free app and there is no SLA or promised response time. No servers come with it, and nobody can promise that any public server works today, or will tomorrow. Whether running a VPN is allowed where you are is for you to check.
General V2Ray or Xray configuration questions that have nothing to do with Auto Mode are better asked in the upstream v2rayNG and Xray-core communities.
Before reporting
Check the phone's clock. VMess and VLESS reject handshakes when the time is a few minutes off, which looks exactly like hundreds of dead servers; the app detects this and names it, so read the message it shows. If you installed a 2.4.0 file with -fdroid- in its name, uninstall it: that build sits beside the normal one and never updates.


