Getting started About 12 min read

VLESS REALITY Setup in v2rayNG: A Beginner’s Guide

One wrong Public Key, Short ID, SNI, or fingerprint value and the profile just won’t connect. Here’s how to fill in every REALITY field correctly, step by step.

Understand VLESS REALITY before you start

VLESS REALITY is a combination of a VLESS proxy protocol and the REALITY transport security mechanism. In v2rayNG, it is not a separate app or a single switch that can make an incomplete profile work. The client must receive a matching set of values from the server operator, and several fields are linked mathematically or logically. If even one important value is copied incorrectly, the profile may appear in the list but fail during the handshake.

This guide focuses on manual configuration in v2rayNG on Android. The exact labels can vary slightly between app versions, but the concepts remain the same. You will need the server address, server port, UUID, flow setting if required, transport type, SNI or server name, public key, short ID, and fingerprint. Do not invent these values. A REALITY profile is normally generated as a matching server-and-client pair, so a value found in a random example is not a substitute for the value supplied for your own server.

Before editing anything, make sure your phone has a stable internet connection and that automatic date and time are enabled. TLS-based handshakes are sensitive to large clock differences. Also update v2rayNG from a trusted source if your installed version is very old, because outdated cores may not understand newer transport parameters or may display fewer profile fields.

Collect the required profile values

A typical VLESS REALITY profile contains more information than a basic address-and-password connection. Ask the provider or server administrator for a complete share link, QR code, or clearly documented set of fields. A normal profile may include a host name, port, UUID, encryption value, flow, network type, security mode, server name, public key, short ID, and fingerprint. If the provider supplies a vless:// link, importing that link is usually safer than typing every field manually.

Pay attention to the difference between a server address and an SNI value. The server address is where v2rayNG opens the network connection. The server name, often shown as SNI or serverName, is used during the TLS-style handshake and may be a different host name. Some providers intentionally use an address that is not identical to the server name. Do not replace one with the other simply because they look similar.

The UUID is also easy to damage when copied. It contains hexadecimal characters and hyphens, and a missing character makes authentication fail. The public key and short ID are equally sensitive. A public key is not the same thing as a private key, and a short ID is not the server port. Keep the original message or share link available until you have tested the connection.

  • Server address: the destination host or IP address.
  • Port: the listening port exposed by the server.
  • UUID: the VLESS user identifier.
  • Flow: commonly supplied only when the server requires a specific XTLS flow.
  • Transport: usually TCP for a standard REALITY profile, unless the provider states otherwise.
  • Server name: the SNI name used by the REALITY handshake.
  • Public key: the server’s REALITY public key.
  • Short ID: the hexadecimal identifier accepted by the server.
  • Fingerprint: the client-side browser fingerprint requested by the profile.

Create a new profile in v2rayNG

Open v2rayNG and use the add button to create a new VLESS profile. If you have a QR code, choose the scan option and review the imported result before saving. If you have a share link, use the import-from-clipboard option when available. Manual entry is useful for learning and for repairing one field, but it creates more opportunities for invisible spaces, wrong punctuation, and accidental substitutions.

When creating the profile manually, select VLESS as the protocol. Enter the server address and port exactly as provided. Enter the UUID in the user section. The encryption field for VLESS is commonly shown as none; this does not mean that the complete connection has no security. Authentication and transport security are handled by the VLESS and REALITY settings, so changing this value to a random word will usually break compatibility.

Give the profile a clear name, such as the provider name and location. This does not affect the connection, but it helps you distinguish profiles when testing several nodes. Save only after reviewing every field. If v2rayNG offers a profile duplication option, duplicate a known-good profile before experimenting with advanced settings. That gives you a baseline to return to instead of editing the only copy.

Enter the VLESS and transport fields

Start with the general VLESS fields, then move to transport and security. This order makes troubleshooting easier because you can compare each section with the provider’s instructions. For the network or type field, choose the transport explicitly stated by the profile. A common VLESS REALITY setup uses tcp, but you should not assume every server uses the same arrangement. If the link specifies another transport, follow the link rather than copying a typical example.

Leave the host and path fields empty unless the server configuration includes them. Host and path are frequently associated with HTTP or WebSocket transports, and adding invented values to a TCP profile can produce a connection that looks almost correct while never completing. Likewise, do not add a WebSocket path just because another node in your subscription uses one.

For security, choose reality when the profile is specifically a VLESS REALITY profile. The application may then reveal fields such as server name, public key, short ID, and fingerprint. These fields are not interchangeable:

  • Server name or SNI identifies the name used in the handshake. Copy its spelling, dots, and capitalization carefully.
  • Public key identifies the REALITY server-side key material. It is normally a long encoded string and must be pasted without spaces.
  • Short ID is usually a short hexadecimal string. Do not add a prefix such as 0x unless the instructions explicitly include one.
  • Fingerprint describes the client fingerprint presented by the core. Use the requested value, often a browser-like option, rather than choosing randomly.

If the profile includes a flow value such as xtls-rprx-vision, enter it exactly. If no flow is supplied, leave the field empty instead of guessing. A flow is part of the server’s expected behavior, not a performance mode that should be enabled on every VLESS connection.

Configure and save the profile step by step

Now perform one careful configuration pass. First open the VLESS profile editor and set the profile name, server address, port, UUID, and encryption. Next set the network type. Then open the security section, choose REALITY, and enter the server name, public key, short ID, and fingerprint. Finally review the flow value and any transport-specific options. Saving after each group is not required, but pausing between groups helps you notice when a field appears or changes.

Before connecting, compare the editor with the original share link or provider panel. Check the beginning and end of the UUID, public key, and short ID rather than relying on a quick visual glance. Confirm that the port has not been pasted into the server-name field, and confirm that the address does not contain a hidden space. If the app supports copying the generated profile or viewing its URI, compare the normalized result with the original source.

Use a single profile for the first test. Do not import ten profiles, enable automatic selection, and then try to identify the broken value. A controlled test has one node, one network, and one mode. After the profile connects reliably, you can add subscriptions, routing rules, or per-app selections without losing the original baseline.

  • Check the protocol is VLESS.
  • Check the address and port belong to the same server entry.
  • Check the UUID has no missing or extra character.
  • Check encryption is the value specified by the profile, commonly none.
  • Check the network type matches the share link.
  • Check security is REALITY, not ordinary TLS.
  • Check server name, public key, short ID, and fingerprint are copied from the same profile.
  • Check flow is empty or matches the server requirement.

Connect and test the Android VPN

Select the saved profile and start the connection. Android may display a VPN permission dialog the first time. Approve it only when you intentionally want v2rayNG to handle traffic. A successful app status does not always prove that every application is using the proxy, so test in stages. First confirm that v2rayNG reports a connected state. Then use its profile delay or connectivity test if available. Finally open a browser and visit a normal HTTPS page.

Android VPN mode may show a persistent system notification while the connection is active. That is expected. If you use per-app proxy, begin with all applications included or with the browser explicitly included. Exclusion rules can make a working node look broken when the test application is simply bypassing the VPN. Battery optimization can also stop background connections on some phones, so avoid changing battery settings until the basic connection has been proven.

Test on one network first, then try a second network such as mobile data or a trusted Wi-Fi connection. If the node works on mobile data but not on Wi-Fi, the issue may involve DNS, firewall rules, captive portal login, or network filtering. If it fails everywhere, return to the profile fields instead of repeatedly switching Android modes.

Do not judge success only by whether an IP address changed. A browser may use cached content, a particular app may be excluded, and local DNS behavior may differ from ordinary traffic. Check a fresh page, verify the v2rayNG connection state, and, if necessary, inspect the application log for the first meaningful error rather than the final cascade of messages.

Read the most common errors

A timeout usually means that the phone cannot establish a usable connection to the server address and port. Check the address, port, mobile or Wi-Fi access, and whether the server is online. A timeout is different from an authentication failure: changing the UUID will not repair a blocked port, and changing the port will not repair a wrong UUID.

An error that mentions a handshake, REALITY, public key, short ID, or server name points toward the security section. Compare the public key and short ID with the exact profile source. Confirm the server name is entered in the correct field and that security is set to REALITY. A profile can fail even when the address is reachable if these values do not match the server’s configuration.

Authentication errors usually suggest a wrong UUID, an expired user, or a mismatch between the selected protocol and the server entry. Recopy the UUID instead of manually correcting one character. If the provider gave you several VLESS links, make sure the UUID belongs to the same address and port as the selected node.

If v2rayNG connects but applications have no access, check Android VPN permission, per-app rules, routing mode, DNS settings, and other VPN applications. Two VPN or proxy tools running together can compete for the same system interface. Stop the other tool, disconnect and reconnect v2rayNG, then test again with one browser included in the proxy list.

Avoid configuration mistakes that look harmless

One common mistake is changing several fields at once after a failed test. That removes the evidence you need. Change one value only when you have a specific reason, save the profile, and test again. If the result becomes worse, restore the previous value. Keeping a screenshot of the original settings can save time when a long public key or UUID has been overwritten.

Another mistake is copying settings from a different protocol. A VLESS REALITY profile should not automatically receive a WebSocket path, HTTP host, TLS certificate option, or Trojan password from another node. Similar words in the editor do not mean the fields are compatible. Only fill fields that are present in the supplied profile.

Some users also change the fingerprint repeatedly because it sounds like a privacy or speed option. It is better to treat it as a compatibility parameter. Use the value recommended by the server administrator. If the server has been configured for one expected fingerprint, random experimentation creates noise without proving anything.

Finally, do not share a complete profile publicly. A UUID may represent an active user account, while the address, port, public key, and short ID can reveal server information. When asking for help, remove or mask sensitive values and describe the error, Android version, v2rayNG version, and whether the failure occurs on Wi-Fi, mobile data, or both.

Keep a working baseline for future changes

Once the profile works, export or back it up through v2rayNG if you understand where the backup is stored, and keep the original share link in a safe place. Record the app version, the date of the last successful test, and whether the profile works on Wi-Fi and mobile data. This information makes future troubleshooting much faster when a server changes or an application update alters the interface.

Only add advanced routing, custom DNS, per-app rules, or subscription groups after the direct profile works. Change one category at a time. For example, first verify the node with default routing, then configure per-app access, and only afterward adjust DNS if you have a clear reason. A simple working baseline separates server problems from local Android configuration problems.

When the provider publishes a replacement link or announces a key rotation, import the new profile as a separate entry instead of overwriting the known-good one immediately. Test the new entry, compare its fields, and remove the old profile only after the replacement works. This approach is especially useful for REALITY configurations because a changed public key, short ID, server name, or user credential can invalidate the entire handshake.

Know when to rebuild instead of endlessly editing

Rebuild the profile when the source link has changed, several fields were edited without a record, or the app was upgraded and the profile now contains unfamiliar transport settings. Delete or disable the questionable copy, import the newest official link or QR code, and compare the imported fields with the provider’s instructions. Rebuilding is often safer than trying to repair a profile that has accumulated guesses.

A clean rebuild should still be tested methodically: connect with only the new profile, approve the Android VPN request, test the connection state, open a browser, and then test a second network. If the fresh profile fails in the same way, the cause is more likely to be server availability, account status, network access, or an incompatibility between the server core and the v2rayNG version.

The main lesson is simple: VLESS REALITY is reliable when its values are treated as one coordinated configuration. In v2rayNG, enter the supplied fields in order, avoid borrowing parameters from unrelated nodes, verify the Android VPN path, and use the first useful log message to guide the next change. That process is more dependable than repeatedly toggling security options or reinstalling the application.