2026-06-27 · Platform Guides · About 12 minutes

V2Ray Multi-Device Configuration Sync: Comparing Subscription Links, QR Codes, and Exported Configs

How do you keep settings consistent across computers, phones, and tablets? Compare subscription links, QR migration, and config file export/import by use case, limitations, and steps.

Quick overview

For long-term maintenance across multiple devices, let v2rayN, v2rayNG, or v2flyNG share one subscription. Use a QR code for one or two nodes, and export configs only when custom routing, DNS, or local preferences must be preserved. This guide covers the steps, sync scope, port differences, and post-migration checks for all three methods.

Separate node syncing from client settings

“Multi-device configuration sync” usually covers two entirely different types of data. The first is server node data: address, port, user ID, VMess or VLESS parameters, TLS, REALITY, transport settings, and camouflage fields. The second is local client settings: system proxy, routing mode, DNS, log level, LAN listening, per-app proxying, and the automatic update interval. Subscription links mainly handle the first category; exported configs may cover part of the second.

Do not assume that “the node list is identical” means “the clients behave identically.” For example, desktop v2rayN commonly uses local SOCKS port 10808, while HTTP may use 10809. Android v2rayNG usually takes over traffic through the system VPN interface. Even when it offers a local SOCKS port, its scope is still different from the Windows system proxy. Copying desktop port numbers to Android does not reproduce the same traffic-routing behavior.

Centralized subscription updates

Recommended

Use one subscription source across devices so new, expired, and updated nodes can be retrieved together with a single refresh.

Best for: two or more devices used long term, with frequently changing nodes

One-way QR migration

Convert one VMess, VLESS, or other supported share link into a scannable code. Migration is fast, but the result does not update continuously.

Best for: temporarily copying one to three nodes or switching devices on site

Export and import configuration

Preserve nodes plus some routing, DNS, or app preferences. The file format is closely tied to the client that created it.

Best for: backups within the same client family and complex rule migration

Bottom line: identify what needs to sync before choosing how to transfer it

Use a subscription when only the nodes need to match; scan a QR code when transferring one node; handle config-file compatibility only when routing rules, DNS, and local parameters must also be preserved.

Option 1: Keep node lists aligned with one subscription

A subscription link is the lowest-maintenance option for multiple devices. The server gathers multiple share configs under one address, and each client periodically requests and parses the nodes. Desktop v2rayN and Android v2rayNG can save the same address independently, but each device still updates separately, selects its active node separately, and stores its own routing and system proxy state.

In v2rayN, go to “Subscription Group” → “Subscription Group Settings” to add a subscription. Enter an alias and the complete URL, save it, then select “Update all subscriptions (without proxy).” If the current network cannot reach the subscription source directly, connect to a working node first and then update through the proxy. Menu wording may vary slightly by version, but the sequence is the same: create a group, then update the nodes manually.

In v2rayNG, open the top-left menu, go to “Subscription Group Settings,” and tap the add button in the top right. Enter a note and the subscription URL. After saving, return to the main screen and choose “Update subscription” from the top-right menu. The node count should change after the update. If it remains at 0, first check whether the URL was truncated by a line break, whether the subscription group is enabled, and whether the current network can reach the address.

Recommended setup: one subscription on both clients

Desktop (v2rayN)
  • Run VLESS, VMess, and other nodes with the Xray core
  • Set the subscription update interval to 24 hours
  • Keep the local SOCKS port at 10808
  • Configure routing mode separately for desktop apps
Android (v2rayNG)
  • Save the same complete subscription URL
  • Select the active node again after updating
  • Enable per-app proxying as needed
  • Allow the system to keep the client running in the background

Keep the node source consistent on both clients, but configure routing, DNS, ports, and the currently selected node separately for each device.

Automatic updates should not run too frequently. When nodes change infrequently, update once every 24 hours; update manually when you need server-side changes immediately. For example, with 60 nodes and an approximately 80 KB response per subscription update, two devices updating once a day generate less than 5 MB of subscription data per month. The real concerns are whether old nodes remain after a failed update and whether the client accidentally removes manually added standalone nodes.

Option 2: Use QR codes to migrate a small number of nodes

A QR code is useful for sending the current node to a nearby device, not for long-term synchronization. v2rayN can generate a QR code for a selected server, and v2rayNG can import it by scanning. The code usually contains one share link with the protocol, server address, port, and transport parameters; it does not include an automatic subscription update mechanism.

In practice, select the target node in the v2rayN server list and use its QR display function. On Android, open v2rayNG, tap the add entry in the top right, and choose “Scan QR code.” Do not connect immediately after scanning. Expand the configuration first and check the address, port, user ID, transport, TLS security type, SNI, or serverName field one by one.

  1. Keep the number under control: Migrate one node at a time and immediately change its note after importing, such as “Office route - QR - 0627,” to avoid confusing it with a node of the same name from the subscription.
  2. Verify the protocol: VMess and VLESS use different identity fields and encryption semantics. Matching server addresses alone is not enough.
  3. Verify the transport: For WebSocket, check the path and Host. For gRPC, check serviceName. For REALITY, also check serverName, publicKey, and shortId.
  4. Test before finishing: Run a connection test, then open a webpage to verify DNS and routing. Do not rely only on the latency shown by the client.

QR codes have limited capacity, so complex JSON configs, long certificate contents, or complete configurations with many rules are not suitable for direct encoding. Even when scanning succeeds, the client may recognize only standard fields in the node link and ignore the source client’s routing groups, split DNS, and local listening settings. A QR code is therefore best treated as a one-time node copying tool.

Bottom line: review the fields after scanning

A correct address and port do not mean the configuration is complete. For a VLESS + REALITY node, check at least serverName, publicKey, shortId, flow, and fingerprint fields. For a WebSocket node, check at least path and Host.

Option 3: Preserve complex settings with an exported config file

Exported configs are useful for backing up the same type of client or preserving manually written routing and DNS rules. They are not a universal sync format. v2rayN application settings, subscription group data, and core runtime config may be stored in separate files; the node list exported by v2rayNG is not the same as a package that can directly overwrite desktop settings. Before importing across clients, determine whether the file is a “client database,” a “collection of share links,” or a “core JSON configuration.”

Core JSON usually contains sections such as inbounds, outbounds, routing, and dns. It precisely describes how the Xray or v2fly core handles traffic, but the client interface may not be able to turn every manually written field back into an editable form. Importing a desktop-generated core config directly into Android may also bring in listening addresses and ports intended only for desktop use.

{
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "udp": true
      }
    }
  ],
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "direct"
      }
    ]
  }
}

The listening address 127.0.0.1 above accepts connections only from the local machine, making it suitable for a desktop local proxy. Providing a proxy to LAN devices requires separate handling of the listening policy and firewall rules. When Android takes over traffic through the system VPN, this inbound configuration cannot simply be treated as an equivalent setting. Keep the original backup when migrating files, and never overwrite a configuration that still works.

Data item Subscription link QR code Config export
Node address and protocol parameters Supports batch updates Usually one at a time Depends on the export format
Custom routing rules Usually not synced Not synced Can be preserved in core JSON
Local port Independent on each device Independent on each device May be included; adjust after import
Ongoing update capability Yes No No
Cross-client compatibility High Depends on the share format Low

How to combine v2rayN, v2rayNG, and v2flyNG

Use v2rayN on desktop to manage subscriptions, the system proxy, and routing. On Android, use v2rayNG when you need the Xray core or newer VLESS and REALITY configurations. When nodes mainly use VMess and other configurations supported by the v2fly core, v2flyNG is also an option. All three can read standard subscriptions or share links generated by the server, but client-specific settings should not be overwritten directly across apps.

If the same subscription provides VMess, VLESS, and different transport combinations, filter by protocol or note after updating, then choose a node the current client can run correctly. Do not assume that identical node names mean identical parameters on both devices; the server may return different subscription content for different User-Agents or convert formats based on client capabilities.

In a test subscription containing 48 nodes, both v2rayN and v2rayNG showed 48 nodes after updating, confirming that the node sets matched. However, after desktop routing was set to “bypass LAN” and Android was set to proxy only selected apps, the actual traffic paths differed substantially. This illustrates the key point: the subscription standardizes the entry point, while device policies should remain locally managed.

Post-migration verification and troubleshooting

After syncing, verify configuration completeness before investigating speed. Use a consistent five-step check: “count, fields, connection, routing, DNS.” This quickly distinguishes an unupdated subscription, missing node parameters, and different local client settings.

  1. Check the node count: If the source device shows 36 nodes, the target should show roughly 36 after updating. A count of 0 usually indicates a failed subscription request or parsing error.
  2. Spot-check three nodes: Verify the address, remote port, protocol, TLS, transport, and note for three nodes. Do not check only the first one.
  3. Establish a connection: Check the core log for timeouts, certificate name mismatches, target rejections, or port conflicts.
  4. Check local traffic capture: In v2rayN, confirm the system proxy mode. In v2rayNG, confirm system VPN authorization and the scope of per-app proxying.
  5. Verify DNS: If a connection works but domains do not open, check the DNS configuration and routing rules. Reaching an IP address does not prove that domain resolution works.

Speed tests are useful only as a screening reference. A single latency result of 85 ms does not mean webpages, video, or large files will all work reliably. Run three consecutive tests and watch for fluctuation. For example, results of 82, 310, and 96 ms indicate brief congestion; three results between 90 and 110 ms usually suggest better stability.

Why do two devices using the same subscription show different node counts?

Run a full manual update on both devices first, then check whether the subscription group is enabled. If one side has 42 nodes and the other has 38, review the update log for links that could not be parsed and confirm that both clients received the same complete URL.

What should I do if a subscription update times out?

Connect to an existing working node first, then choose to update the subscription through the proxy. Also confirm that the system clock is accurate. If there is still no response after three attempts lasting more than 15 seconds each, switch the local network and try again to distinguish a subscription-source problem from a network block.

Why does the connection drop immediately after importing a QR code?

Expand the node configuration and check the remote port, user ID, TLS, serverName, flow, publicKey, and shortId. Missing one key field in a REALITY or gRPC configuration can cause the handshake to fail immediately.

Why does importing a config say that port 10808 is already in use?

Exit the old proxy process, or go to “Settings” → “Parameter Settings” and change the local listening port, for example to 10818. After changing it, update the port in your browser or other manually configured proxy apps, then restart the connection.

The nodes match, so why can the computer open webpages while Android cannot?

Check v2rayNG’s system VPN authorization, per-app proxy list, and DNS settings. If only selected apps are proxied, the browser must be on the proxy list. After changing the scope, disconnect and reconnect once.

A sync strategy for long-term use

A stable multi-device setup does not require every toggle to match. A better approach is to separate configuration into three layers: the subscription layer standardizes node sources, the client layer stores platform-specific ports and traffic-capture methods, and the rules layer manages routing and DNS by device use case. This way, replacing a device requires restoring only the subscription and a small number of local settings.

Perform a manual review once a month: remove retired subscription groups, confirm that update URLs still work, delete duplicate QR-imported nodes, and export a working copy of any complex rules. Label exported files with the client name and date, such as v2rayN-routing-2026-06-27.json, to avoid accidentally importing them into another client months later.

Long-term maintenance: centralize nodes, store policies per client

Maintain centrally
  • Subscription URLs and group names
  • Node notes and protocol parameters
  • Expired and newly added nodes
  • Update every 24 hours
Device-specific
  • System proxy or system VPN status
  • Local listening ports such as 10808
  • Desktop routing and Android per-app proxying
  • DNS, LAN sharing, and background policies

The subscription keeps node sources consistent, while local settings adapt to the platform. Maintaining these separately minimizes accidental overwrites during migration.

The final choice is straightforward: use one subscription when more than two devices need ongoing updates; use a QR code to share a single node temporarily; use an exported file to back up complex rules between similar clients. The methods can be combined, but do not treat a QR code as a subscription or a client’s complete config file as a cross-platform standard.

View client packages