For a vmess:// or vless:// link, use “Import from clipboard.” For a subscription URL provided by your service, add a subscription group and update it. This guide is for first-time v2rayN and v2rayNG users. It covers link formats, where to import them, what updates change, and how to troubleshoot failures. Identify what you have before choosing an action: a subscription webpage is not a node, and a single-node link is not a subscription.
First, know the difference: a share link is a configuration snapshot; a subscription URL is an update source
A single-node share link packages the server address, port, authentication details, and transport settings into one text string. The client parses it and saves a node locally. It reflects the configuration at the time it was exported. If the server later changes its domain, port, or credentials, the saved entry will not update automatically just because you imported the link earlier.
A subscription URL, on the other hand, lets the client retrieve a set of configurations and usually starts with HTTPS. When you update it, the client fetches the response and parses supported formats into nodes. A subscription may contain one node or many. The number of nodes does not define a subscription; the ability to fetch the configuration again is the key difference.
Subscription group: keep configurations up to date
RecommendedIf your provider offers a subscription, save it as a separate group. You can update the group later instead of copying each node again. This is recommended for ongoing use; it does not mean subscriptions are inherently safer than single nodes.
Best for: ongoing use, multiple nodes, or frequent server-side changes
Single-node link: import one configuration quickly
Import a complete link in one step—handy for a quick test or troubleshooting a specific configuration. If its settings change, import it again or edit it to match the server details.
Best for: quick tests, a self-hosted single node, or sharing one specific node
How to tell: check how the provider describes the link
An HTTPS prefix alone does not make a URL a subscription. Login pages, purchase pages, and subscription endpoints can all use HTTPS. Use the link explicitly labeled as a subscription URL and make sure its format works with your client.
vmess:// format: Base64 encoding is not encryption
A common VMess share-link format consists of vmess:// followed by Base64-encoded JSON. The example below shows the decoded structure; it is not an importable share link or a complete core configuration. Export tools may use different conventions, so use a compatible link generated by your provider whenever possible.
{
"v": "2",
"ps": "Example node",
"add": "node.example.com",
"port": "443",
"id": "7d9d2f80-52a1-4c8e-9c76-5c0d52dd7441",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "node.example.com",
"path": "/proxy",
"tls": "tls",
"sni": "node.example.com"
}
v: The2here is a version marker used in a common share-link format—not the client version or a declaration of the VMess protocol version.add,port, andid: These specify the server address, server port, and user ID, respectively. All three must match the server configuration.net,host, andpath: This example uses WebSocket. The Host and path are part of the transport settings and must not be removed or changed arbitrarily.tlsandsni: These describe TLS and the server name. WebSocket Host and TLS SNI are separate fields. Even if their values match, they are not interchangeable.aid: The example uses0, a common value for modern VMess AEAD. Don’t follow outdated guides and increase it arbitrarily.
vless:// format: query parameters are part of the configuration
VLESS share links typically use a URI format: the user ID comes before @, followed by the server, port, query parameters, and a node label. The link below illustrates the fields only. The domain and credentials are examples, so it cannot be used to connect.
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=node.example.com&path=%2Fproxy&sni=node.example.com#Example-WS
encryption=none does not mean the entire connection lacks transport protection. It describes this VLESS setting; the example separately specifies security=tls. type=ws means WebSocket, and path=%2Fproxy decodes to /proxy. The label after the hash, Example-WS, is just a remark and does not determine the server address.
- Keep every query parameter when copying the link, especially
security,type,sni, and the transport path. - Don’t treat
&displayed by a chat app as a valid parameter separator. The raw URI should use a regular&. - If you see
flowor REALITY-related parameters, preserve the provider’s original values. Don’t apply the WebSocket example in this guide. - A correctly formatted UUID only looks like a valid UUID. It does not prove that the credentials work or that the server is reachable.
Import from clipboard: desktop and Android instructions
Before importing, copy the entire link on a single line. Don’t include explanatory text, quotation marks, or ellipses from a chat message. Interface labels may vary by version; the steps below refer to common Chinese-language interfaces. If the wording differs, look for the equivalent command that mentions the clipboard and importing.
- v2rayN desktop: Copy the link, return to the main window, then choose “Servers” → “Import bulk URLs from clipboard.” Some versions show “Import from clipboard” instead; you can also use
Ctrl+Vif supported. Check the import count and confirm the new entry appears in the list. - v2rayNG for Android: Copy the link, then tap “+” in the top-right corner of the main screen → “Import from clipboard.” If Android asks for clipboard access, verify the source and allow access for this operation.
- Check the node settings: Open the new entry for editing and review the server, port, transport, and TLS settings. Verify the parameters before testing the connection; a successful import does not mean the connection works.
- Start the proxy: Select a node and start it. In v2rayN, configure the system proxy or another traffic-routing mode for your use case. The first time you start v2rayNG, you’ll usually need to approve Android’s VPN permission prompt.
VMess and VLESS are protocol names; v2rayN and v2rayNG are client names. They are not interchangeable. v2rayNG uses the Xray core, while v2flyNG uses the v2fly core. Similar client names do not guarantee support for the same protocol and transport combinations. Check that the required server features are supported by the core you’re using.
Add a subscription: save the URL, then update it
Subscription management usually involves two steps: save the source and fetch its contents. If you save a subscription URL but don’t update it, the group may remain empty. Subscription links often contain tokens, and the query string is part of the authentication details. Don’t remove everything after the question mark to “clean up” the URL.
- v2rayN: Go to “Subscription groups” → “Subscription group settings,” add a group, enter a name and the subscription URL, then save. Return to “Subscription groups” and choose the appropriate update command. Whether to fetch through the proxy depends on your current network.
- v2rayNG: Open “Subscription group settings” from the top-right menu, add a subscription, and save it. Then return to the main screen and select “Update subscription.” Menu locations may change between versions; the important distinction is between editing a subscription and actually updating it.
- Check the result: Review the update status, group, and number of added nodes. A URL opening in a browser does not guarantee that its response is a subscription format your client can parse.
- Keep updates organized: Create separate groups for different sources. Back up important manual configurations before updating, and don’t assume that local changes such as renaming a node or changing its port will survive the next update.
| What to check | Single-node share link | Subscription URL |
|---|---|---|
| Typical prefix | vmess://、vless:// | https://; verify what it’s for |
| What to do | Import from clipboard | Save as a subscription group, then update |
| When the source changes | Import again or edit manually | Fetch it again; changes depend on the subscription response |
| Common failure points | Truncated link, corrupted encoding, or unsupported parameters | Network timeout, expired token, or incompatible response format |
Using multiple devices: sharing a subscription does not sync every setting
You can add the same subscription URL on each device allowed by your provider’s terms, but each client saves and updates it independently. Updating on Windows does not trigger an update on Android. Routing rules, system proxy settings, per-app proxy settings, and the currently selected node are not automatically matched just because both clients use the same subscription.
Setup: share the node source, manage traffic settings separately
Desktop: v2rayN
- Create a separate subscription group for each service provider.
- After updating, check that your selected node is still available.
- Configure the system proxy and routing rules separately.
Android: v2rayNG
- Add the same subscription URL, if your provider allows it.
- Update it on this device and confirm the VPN permission.
- Check per-app proxy settings and background restrictions separately.
Subscriptions provide node configurations; they do not sync routing, permissions, or runtime status between devices. Whether both node lists match also depends on update times and client compatibility.
To send a temporary node to another device, share that node’s link or QR code instead of exposing the entire subscription. A QR code is just another way to encode text: import a single-node link as a node, or follow the subscription-management steps if it contains a subscription URL.
Troubleshooting: distinguish parsing errors from network failures
Why does the client say the link contains no valid configuration?
First, make sure the link starts with a complete vmess:// or vless:// prefix. Check for ellipses, full-width punctuation, and extra quotation marks. Copy the original link again using the button on the source page. If you copied an HTTPS subscription URL, add it through a subscription group instead of repeatedly trying to import it as a single node.
The subscription update succeeded, but no nodes appeared. Why?
Check whether the response is a login page, an expiration notice, or a configuration format your client does not support. Ask your provider which subscription output format to use, then check whether a group filter is hiding the nodes. A completed request only means the fetch finished; it does not guarantee the response contains a valid set of nodes.
A subscription update timed out. Should I enable “Update through proxy”?
If your current network cannot reach the subscription endpoint directly but you have a working proxy, enable updates through the proxy and try again. If every existing node is down, using one of them to fetch the subscription may still time out. In that case, test a direct connection again or switch to a working network rather than toggling the same setting repeatedly.
The node imported, but connecting fails with a TLS or authentication error. What should I check?
Check the server address, port, user ID, transport, and SNI in that order, and make sure the device clock is accurate. The example uses port 443; use the port specified by your server. Disabling certificate verification is not a routine fix. First check that the domain, certificate, and server configuration match.
I accidentally posted a subscription link in a public group. Is deleting the message enough?
Deleting the message cannot revoke a token that someone may already have copied. Reset the subscription URL in your provider’s management page, rotate node credentials if needed, and update the saved URL on each device. For troubleshooting screenshots, show only the error and non-sensitive fields—never the full URL, user ID, or QR code.
The decision process is simple: first identify whether you have a node link or a subscription, then confirm the import or update succeeded, and finally check the connection and traffic routing. Keeping these steps separate prevents mistakes like changing protocols to fix a copying issue or repeatedly importing a node when the system proxy is simply off.