For people running V2Ray on both desktop and Android, this article compares three ways to move a configuration across devices: exporting share links, sharing one subscription URL on both ends, and running your own sync folder. Each comes with its steps and use cases, followed by the routing mode, per-app proxy, and local port settings to recheck after switching devices.
Three ways to move a configuration across devices, and their trade-offs
Before moving anything, be clear about what is actually being moved. The node list can be pulled again from a subscription, but local routing rules, the per-app proxy list, and DNS settings do not travel with a subscription and need separate handling. By the granularity of what gets moved, the common approaches fall into three groups.
Export share links
In v2rayN, right-click a node and export a vmess:// or vless:// link; v2rayNG imports it from the clipboard. One node at a time, with the parameters carried over as they are.
Best for: adding a node or two on the fly, testing nodes on a single device
Share one subscription URL
RecommendedEnter the same subscription link on both ends. After the server adds or removes nodes, each side updates once and the node sets stay identical, with no files passed between devices.
Best for: long-term use on desktop and Android, node lists that change often
Your own sync folder
Keep the config files in a LAN share or a sync folder you run yourself to move routing and DNS along with the nodes. It carries the most, and costs the most to maintain.
Best for: several desktop machines, moving rules together with nodes
The three approaches are not mutually exclusive. Most people end up keeping the node list in sync through a subscription URL and using share links for the occasional temporary node; only when routing rules and DNS settings also need to be reused across devices is it worth building a sync folder.
Approach 1: export share links and move nodes one by one
Right-click any node in the v2rayN node list to export a share link; the link text begins with one of the vmess://, vless://, trojan://, or ss:// protocol headers. The link packs every connection parameter of that node, and once you copy it to Android, v2rayNG imports it from the clipboard and produces a node with the same parameters as on desktop.
vmess:// Base64-encoded JSON with address, port, UUID, alterId, and transport
vless:// plaintext parameters with encryption=none, type, security (such as reality)
trojan:// password + SNI + transport parameters
ss:// Base64 fragment of the cipher and password + server address
A share link carries the connection parameters of a single node only: the group name inside the subscription, node ordering, and local routing and DNS settings are all left out. That makes it good for adding nodes point by point, not for moving a whole configuration.
Export on desktop
In the v2rayN node list, right-click the target node and choose "Export share link"; the link goes to the clipboard.
Pass the link along
Send the link to your phone: clipboard sync, a private chat window, or a LAN file transfer all work.
Import on Android
In v2rayNG, open the menu at the top right of the main screen → "Import config from clipboard"; the node shows up at the end of the list.
Check the parameters
Long-press the imported node to open its details and confirm the address, port, and UUID match the desktop exactly.
Test the single node
Select the node, connect, and open a test page to confirm the exit address has changed.
For a few nodes used temporarily, share links are the fastest route; once the list grows, exporting and importing one by one stops paying off, and it is time to switch to a subscription URL.
Share links contain a UUID or password, so avoid public channels when passing them along, and clear the chat history afterwards if you like.
Approach 2: use the same subscription URL on both ends
A subscription URL is a string generated on the server; a client fetches it and builds the node list automatically. Enter the same subscription URL in desktop v2rayN and Android v2rayNG and the node sets on both sides stay identical; after the server adds or removes nodes, each side runs Update subscription once and the lists match, with no files passed between devices. On Android, if you use v2flyNG (the v2fly core), the entry point and flow for importing a subscription are the same; only the core differs, so the range of compatible node parameters varies slightly.
A subscription covers nodes only; local listening ports are not part of the sync. v2rayN opens a SOCKS inbound on 10808 and an HTTP inbound on 10809 by default, and v2rayNG's default local SOCKS port is also 10808. After switching devices, if a program on the machine has a proxy address hard-coded to a particular port, align that setting by hand.
Three things in the subscription settings trip people up, and both ends deserve attention:
- Auto-update interval: v2rayNG lets you set an auto-update period under "Subscription settings", while v2rayN sets it in hours under "Subscription" → "Subscription settings". Turn it on at both ends so you don't keep using a stale list after nodes expire.
- Whether updates go through the proxy: when the subscription domain is blocked by the local network, "Update subscription (no proxy)" often gets through; conversely, when the subscription domain itself is only reachable through a proxy, the update has to go through the proxy. v2rayN's subscription menu offers both entries.
- Subscription group name: the two ends can use different names, since the group name is only a local label and affects neither node parameters nor update results.
Approach 3: run your own sync folder and move rules along with the nodes
When what needs to move is not just nodes but also routing rules, DNS settings, and the per-app proxy list, a subscription URL cannot help. That is when syncing the config files themselves makes sense: v2rayNG's menu at the top right of the main screen offers "Export config to clipboard", and the exported content covers nodes plus some local settings; on desktop, v2rayN keeps its configuration as guiNConfig.json in the program directory. Put files like these in a LAN share or a sync folder you run yourself and read them on each end as needed, and you save a great deal of manual entry.
The cost is a clear rise in maintenance effort. On Android, storage permissions mean you usually have to export manually and drop the file into the sync folder by hand, which is less automated than a subscription. The cores and config structures on the two ends also differ, so desktop guiNConfig.json cannot be fed straight to v2rayNG; what can be reused is mainly node parameters and rule text. Compared side by side, the three approaches differ mainly in what they move and how it gets updated.
| Approach | What it moves | Node updates | Rules and DNS | Main cost |
|---|---|---|---|---|
| Export share links | A single node | Manual | Not carried over | Repetitive work with many nodes |
| Share one subscription URL | The whole node list | Automatic | Not carried over | Depends on the server subscription being reachable |
| Your own sync folder | Config files | Depends on the file | Can be carried over | Both ends must maintain folder access |
The low-effort combination: sync nodes with a subscription, configure routing rules and the per-app proxy list separately on each end, then write the result down as a checklist you can follow whenever you switch devices.
Settings to recheck after switching devices
The node list follows the subscription; local settings do not. After moving from desktop to Android, go through the items below one by one, since defaults often differ from what you were used to on the other end.
Checklist: settings beyond the nodes
Desktop (v2rayN)
- "Settings" → "Parameter settings" to confirm the Core type
- The routing mode in the Routing menu
- Local ports 10808 (SOCKS), 10809 (HTTP)
- System proxy switch and launch at startup
Android (v2rayNG)
- Routing mode: Global / Bypass LAN and mainland China
- Per-app proxy: tick the apps that should go through the proxy
- Local SOCKS port defaults to 10808
- Launch at startup and the notification-bar quick toggle
A subscription only keeps nodes consistent; these four items are local settings and must be rechecked after switching devices.
The default differences between the two ends come down to four places, and they are the easiest to miss during a migration:
| Setting | v2rayN side | v2rayNG side | What to do after switching |
|---|---|---|---|
| Routing mode | Switch the routing method in the Routing menu | Routing mode presets include "Global" and "Bypass LAN and mainland China" | Pick again for your current network, don't just carry over old habits |
| Per-app proxy | No per-app selection; scope is decided by the system proxy or TUN | Tick apps one by one under "Per-app proxy" | The list does not sync with a subscription, so tick them again |
| Local port | 10808 / 10809 | Defaults to 10808 | Align any program with a hard-coded port number one by one |
| Launch at startup | Tick it in parameter settings | Turn it on separately in settings | Each end has its own switch; they don't affect each other |
Verification order after syncing
Don't start using the configuration right after moving it. Walk through the steps below and you head off most sync problems.
- Check the node count: the two lists should have the same number of entries. One or two missing usually means the subscription update didn't finish, so run "Update subscription" again.
- Filter out dead nodes: run a real-delay test and keep only the entries that connect.
- Confirm the proxy is working: connect, open a test page, and see whether the exit address has changed.
- Check the local port: point your browser proxy extension or command-line tool at 10808 on desktop and confirm the SOCKS inbound responds.
- Verify routing: visit a domain that should be direct and confirm it doesn't go out through the proxy.
Running two clients on the same machine makes them fight over 10808; change the local port to 10809 or another free port in one of them, then verify again.
A subscription URL carries identity information, so forwarding it to someone else hands over your nodes as well. When switching devices, generate a new subscription URL on the server rather than passing the old one around.