How to Import Subscription Links: v2rayN and v2rayNG Locations, Update Methods, and Format Requirements

A client-by-client guide to subscription import locations in v2rayN and v2rayNG, including subscription groups, manual and automatic updates, supported formats, and troubleshooting an empty node list.

At a glance

This guide is for users who already have a subscription address but are unsure where to paste it or why no nodes appear after importing. It explains the menu paths, grouping options, update actions, and format limits in v2rayN and v2rayNG, then provides a step-by-step troubleshooting path from network requests to core configuration.

First, distinguish subscription links, share links, and configuration files

A subscription link is usually a web address beginning with https://. When the client requests it, the server returns a set of node records. On the next update, the client requests the same address again and refreshes the associated subscription group with the new results. It is not a node itself, nor is it the final configuration passed to the core after the client starts.

vmess://, vless://, trojan://, and ss:// are individual share links. Each link generally describes one outbound node, including the server address, port, authentication details, transport method, and options such as TLS and REALITY. Add them through an entry such as “Import batch URLs from clipboard” rather than pasting them into the subscription address field.

Native JSON is closer to a core configuration. It may define inbounds, outbounds, DNS, routing rules, and logging options at the same time, with a structure different from an aggregated subscription. Use an endpoint as a subscription only when the subscription provider explicitly offers compatible output for v2rayN or v2rayNG. A web console URL, login-page URL, or ordinary JSON file downloaded locally cannot be used directly as a subscription.

3 types
Subscriptions, share links, and native configurations
200
Common HTTP status for a healthy endpoint
10808
Common local SOCKS port for v2rayN
60 minutes
Example desktop auto-update interval
Input Typical opening or structure Use this entry point Update behavior
Aggregated subscription An https:// address returning multiple node records Subscription group settings Can be fetched repeatedly to refresh the list
Individual share link vmess://vless://trojan://ss:// Import from clipboard Does not automatically follow server-side changes
Native JSON Contains inbounds, outbounds, or routing fields Import as a custom configuration or load it through the core Usually maintained by the user
Web page URL Opens a login, plan, or management page Cannot be imported directly The client receives only HTML text

v2rayN: Add a subscription group and run the first update

The layouts differ between v2rayN 6.x and 7.x, but the subscription workflow is the same: create a subscription group, save the address, and update that group manually. Saving the address alone does not write nodes to the main list, so “the address was added but the list is empty” often means the first update was skipped.

In the common desktop interface, go to “Subscription groups” → “Subscription group settings,” click the add button, and enter an alias and subscription address. Name aliases by purpose or source, such as “Daily routes” or “Test group,” instead of using a long URL as the name. Put separate addresses in separate groups so an update failure can be traced to its source quickly.

  1. Copy the complete address

    Copy the complete https:// address from the client configuration section provided by the subscription service, and make sure the beginning, query parameters, and final characters are all present.

  2. Create a subscription group

    Open v2rayN, go to “Subscription groups” → “Subscription group settings” → “Add,” then enter a note and the subscription address.

  3. Save the settings

    Make sure the group is enabled, then save it. If the interface offers an automatic update interval, start with 60 minutes; after the first manual update succeeds, adjust it as needed.

  4. Update the current group

    Return to the main interface and choose “Subscription groups” → “Update current subscription.” To refresh every source at once, choose “Update all subscriptions.”

  5. Select an active node

    When the nodes appear, double-click the target entry or use the context menu to set it as the active server. Then enable “System proxy” or turn on TUN mode if needed.

For the first update, use a direct connection if possible. If the current network cannot reach the subscription endpoint but the client already has a working node, use “Update through proxy” from the menu. This changes only the network path used for the subscription request; it does not modify the VMess, VLESS, Trojan, or Shadowsocks parameters.

Automatic updates work well when the address remains valid and the node list changes frequently. The option is usually under “Subscription groups” → “Subscription group settings” → select a group → “Auto-update interval (minutes).” Setting 60 means trying once per hour, but actual execution still depends on the client running, sleep state, and network connection. Missed runs are not all replayed after shutdown.

v2rayNG: Add a subscription on Android and refresh the configuration

v2rayNG uses the Xray core to process VMess, VLESS, Trojan, Shadowsocks, REALITY, and other configurations. Subscription management is under “Subscription group settings” in the side menu. The button location may differ between 1.10.x releases, appearing at the top right or bottom, but the three actions—add, save, and update—remain the same.

Open “Subscription group settings,” tap the plus sign, enter a note and address, and save. Return to the configuration list, then choose “Update subscription” or “Update current subscription group” from the top-right menu. The configurations returned by the server appear only after the update finishes. Tap a configuration to make it active, then use the main screen’s connect button to start the local VPN service.

Recommended setup: share one subscription source between desktop and Android

Desktop (v2rayN)
  • Create subscription groups by source
  • Set a 60-minute example update interval
  • Use the system proxy or TUN mode to route traffic
Android (v2rayNG)
  • Add the same subscription address
  • Refresh manually after opening the client
  • Configure per-app proxying as needed

Both clients request the same subscription endpoint, so node names and protocol parameters are usually consistent. Routing rules, the selected node, and local ports are still saved independently on each device.

Android limits background tasks based on battery and network conditions, so “automatic updates enabled” does not mean the client can fetch in the background at any time. A more reliable approach is to open the v2rayNG main screen and update manually before switching nodes or when the current node stops working. Afterward, check whether the result says success, timeout, parse failure, or empty content.

If the subscription is reachable only through an existing proxy, first connect to a working configuration. Then enable “Update through proxy,” or an equivalent option, in the subscription settings and fetch the list again. If no usable configuration remains, temporarily use a network that can reach the endpoint directly and perform one direct update.

  1. Open the side menu and go to “Subscription group settings.”
  2. Make sure the target group is enabled and that the address has no spaces or line breaks at either end.
  3. Return to the configuration list and choose “Update subscription.”
  4. After the update succeeds, select the target node and start the connection.
  5. To limit proxying to certain apps, go to “Settings” → “Per-app proxy” and choose whether to bypass or proxy selected apps only.

Subscription format requirements and compatibility limits

Common aggregated subscriptions return multiple share links encoded in Base64, though some return plain-text URIs arranged one per line. v2rayN and v2rayNG identify the response first, then parse its protocol records. Base64 is only an encoding method; it does not encrypt content or restore missing fields.

VMess records usually include an address, port, user ID, transport method, and TLS fields. VLESS may also include parameters such as flow, security, sni, fp, pbk, and sid. When using REALITY with XTLS Vision, both the client and core must recognize the relevant parameters; otherwise a node may import successfully but fail with a configuration error when started.

Response type Client behavior What to do
Base64-encoded aggregate Parses normally into multiple share links Save it directly as the subscription group address
Plain-text URI list Can generate nodes directly when compatible Make sure every line is a complete protocol URI
Single native JSON file May report an unsupported format or create only one item Use the matching custom configuration import method
HTML login page Parse failure, empty content, or no nodes Copy the client-specific subscription endpoint again
YAML for another client Cannot be parsed as VMess, VLESS, or other share links Select V2Ray or generic link output on the server
HTTP 401 or 403 Update fails or returns an empty response Check token validity, account status, and access restrictions

Redirects are another common compatibility boundary. A subscription address may first return 301 or 302 before redirecting to the actual content. Clients can generally follow standard redirects, but they cannot complete a redirect target that requires browser login, a CAPTCHA, or an extra Cookie. Return to the subscription service’s client configuration area and generate a dedicated address again.

Chinese characters, spaces, and special symbols in node names can also reveal encoding problems. The server should output UTF-8, and query parameters and remarks in share links must be URL-encoded correctly. If only a few nodes disappear, first check whether a line was wrapped unexpectedly, then verify that the protocol fields are complete instead of repeatedly deleting the entire subscription group.

Empty node list after import: troubleshoot in order

When the list is empty, first confirm that the request succeeded, then determine whether the response can be parsed, and only afterward inspect node parameters. Reinstalling the client rarely fixes an endpoint that returns a login page, an expired token, or an incompatible format.

First, check the client’s update message or logs. A connection timeout, DNS resolution failure, or refused connection indicates a network-request problem. If the update reports success but adds zero nodes, focus on the response format and group filters. A URI parse error usually points to encoding, line breaks, or invalid protocol fields.

Why is the list still empty after saving the address?

Saving only creates the subscription group. v2rayN also requires “Subscription groups” → “Update current subscription,” while v2rayNG requires returning to the configuration list and choosing “Update subscription.”

Why does updating the subscription always time out?

Check that the system time and network are correct, then try a direct update. If a working node is available, connect through it and enable “Update through proxy.” Also check whether local port 10808 is occupied by another program.

Why does it report success but add no nodes?

Check that the displayed subscription group is the intended one, and verify that the endpoint did not return blank content, an HTML page, or an incompatible format. If old nodes were replaced by new records with the same names, the added count may also show zero.

Why does a node import successfully but fail immediately when connecting?

Open the core log and check the server domain, remote port, user ID, TLS, SNI, transport method, and REALITY parameters in order. A successful import does not mean the remote service is currently reachable.

Why do two devices show different node counts?

Confirm that both devices use exactly the same address and subscription group, then update manually on each device. Compare client versions, core support ranges, and any enabled node filters.

  1. Check the group

    Make sure you are viewing the subscription group just added, that it is enabled, and that the client is not showing only other groups.

  2. Check the request

    Use the logs to distinguish a timeout, DNS failure, HTTP 401, 403, 404, or server error, rather than mistaking a network problem for a format problem.

  3. Confirm the response

    Check that the endpoint returns a node list instead of a login page, announcement page, or empty text. Never expose the complete subscription address in a public environment.

  4. Validate the format

    Make sure the content contains complete VMess, VLESS, Trojan, or Shadowsocks records and was not truncated or split by a chat app.

  5. Review the core log

    If nodes appear but cannot connect, restart the core and review its logs, focusing on port conflicts, missing fields, DNS errors, and handshake failures.

  6. Create a new group

    Only after confirming that both the address and response are normal, create a test group and import it again to rule out filters or stale state in the old group.

If the same address updates successfully in v2rayN but produces an empty list in v2rayNG, compare the client versions and core support ranges, and check whether Android is restricting background network access, Private DNS, or per-app proxying. If only Android succeeds, inspect the desktop system proxy, DNS, certificate environment, and whether subscription updates are incorrectly routed through an expired proxy.

Once the subscription is restored, select a node and test connectivity before re-enabling automatic updates and complex routing rules. Keep one variable changed at a time: do not modify the subscription address, core type, DNS, TUN mode, and routing simultaneously, or the source of log errors will be difficult to identify.

Everyday update and multi-subscription management tips

For long-term use, group names, update intervals, and failure handling matter more than a one-time import. Create one group per source and use short names that explain the purpose. Do not merge multiple sources into one manually assembled text file; when one source fails, it becomes difficult to tell which section returned invalid content.

In v2rayN, set automatic updates according to how often the list changes. If nodes rarely change, updating every 1440 minutes is enough; for timely synchronization, use 60 to 360 minutes. Overly short intervals create redundant requests and cannot fix an unavailable server. v2rayNG is better suited to manual refreshes before connecting or when a node has problems.

When using v2rayN and v2rayNG together, both can save the same subscription address, but local preferences are not synchronized. The desktop system proxy mode, Android per-app proxying, active node, and routing rules must each be configured separately. A subscription synchronizes the node list, not the complete client state.

If Android needs the v2fly core instead of the Xray core, choose v2flyNG. The import workflow remains the same: add the subscription address, update the list, select a node, and start the connection. For features such as REALITY and XTLS Vision, first confirm that the selected client and core support the required protocol fields; node names alone are not enough to determine compatibility.

Get the client packages Windows, macOS, Android, Linux