Desktop Clients · JSON Configuration Reference

V2Ray Toolbox v2rayN Downloads & Configuration Guide

From choosing a client to importing a subscription, learn how to read real fields for routing and DNS and understand the scope of GUI settings versus config.json.

  • VMess
  • VLESS
  • Trojan
  • REALITY

Client downloads

Choose a package for your operating system

Use v2rayN on desktop and start with v2rayNG on Android. Check your operating system and processor architecture before opening the matching download section.

The client stores subscriptions, organizes server configurations, and starts the core; the installer itself does not provide a remote connection service. Import a subscription URL or a single configuration link by following the setup guide. When switching devices, compatible connection settings may carry over, but check local ports, system proxy settings, and app permissions again on the new device.

Windows

Recommended: v2rayN

Choose between the desktop edition and the classic WPF edition in the download section. The desktop edition uses a cross-platform interface, making it a good fit if you want a similar workflow across desktop operating systems. The WPF edition retains the classic desktop interface and may suit users who are already familiar with it. Settings may appear in different places, but the guide's field descriptions apply to both.

Before installing, check your system type under Settings → System → About. After the first launch, check the local listening ports in Parameters, then configure the system proxy. Don't let two clients manage the same system proxy or listen on the same port. Otherwise, apps may send requests to the wrong configuration even if the subscription imported successfully.

Go to downloads Windows client

macOS

v2rayN

Check the chip listed under About This Mac and choose the Apple Silicon or Intel package. The chip determines the app architecture; it has nothing to do with whether your subscription uses VMess, VLESS, or Trojan. After installation, open the client to check its configuration directory and status, then import your existing connection settings.

Whether a desktop app uses the proxy depends on whether it follows the system proxy settings. A browser working normally doesn't mean terminal programs use the same route. To troubleshoot, first test with an app that follows the system proxy, then check proxy options in the other apps. If the system reports an installation permission issue, read the specific reason instead of disabling security settings across the board.

Go to downloads macOS client

Android

Recommended: v2rayNG

v2rayNG uses the Xray core. If you need a V2Fly-based core, consider v2flyNG. Most recent phones use the arm64 architecture; if you're unsure, check the universal build details. Protocol support depends on each client's core. Similar names don't mean every configuration is interchangeable.

The first time you connect, the system asks you to approve the VPN connection permission. This lets the client handle network requests from your device; it doesn't indicate whether the remote server is available. If the connection often drops when the screen locks, check battery optimization and background activity restrictions. Also make sure no other app is using the VPN connection. Check subscription content, connection permissions, and background settings separately to avoid reinstalling the app without addressing the cause.

Go to downloads Android client

Linux

v2rayN

Choose deb or rpm according to your distribution's package manager, then select x64 or arm64. The distribution and processor architecture are separate requirements: devices using deb packages may still need different builds. The download page lists the available options. Check your system details before installing to avoid mistaking an architecture mismatch for an app failure.

Desktop system proxy settings usually apply only to apps that follow them; they don't automatically set environment variables for every program. Start by keeping the listener on a loopback address and testing the connection in a desktop browser. If other programs need a proxy, configure the correct protocol and port in each one. If the service won't start, check the logs for port conflicts, permission issues, or configuration errors before widening the listening address.

Go to downloads Linux client

Browse all clients → To compare cores and workflows, read the client guide.

JSON Configuration Explorer

Find settings by JSON key

Inbounds accept requests, routing selects a path, and outbounds handle connections. See how tags link the three, then configure DNS and policies.

These are partial configuration examples, not complete files for connecting to a remote service. They use a common V2Ray configuration structure; check the core you're actually running for protocol-specific or extended fields. The final label shown in the window represents the default routing intent; it is not a new top-level JSON field here.

inbounds: entry points for local apps

Inbounds define the address and port where the core accepts requests, along with the proxy protocol to use. Local apps typically connect through a loopback address to keep the proxy port off your local network. This example listens on separate ports for SOCKS and HTTP, so apps must use the matching protocol. Port numbers aren't fixed standards; use the values configured in your client. Unlike the system proxy setting, an inbound doesn't tell your browser to use a proxy. Both sides must be configured correctly for requests to reach the core.

{
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": { "auth": "noauth", "udp": true }
    },
    {
      "tag": "http-in",
      "listen": "127.0.0.1",
      "port": 10809,
      "protocol": "http",
      "settings": {}
    }
  ]
}

Read the full JSON configuration manual →

Quick Start Preview

Import subscriptions, set proxy mode, and verify connections

Start with a request path you can verify, then add routing rules. Keep a clear checkpoint at each step.

  1. Step 01 · Configuration source

    Create a subscription group and import connection settings

    In v2rayN, add an existing subscription URL under Subscription Groups, give the group a recognizable name, then update the subscription. For a single share link, use the client's clipboard import option instead of repeatedly treating it as a subscription URL. In v2rayNG, find the equivalent controls in subscription group settings and the main menu. The basic sequence is the same: save the source, fetch its contents, and check the import result.

    After importing, confirm that selectable configurations appear in the list and check that the protocol is what you expect. If the subscription returns an empty list, an invalid format, or an access error, fix the content retrieval issue before changing local routing. Subscriptions may contain credentials, so hide the full URL, user IDs, and authentication fields in troubleshooting screenshots. When reporting an issue, include the error type and steps taken instead.

    Select a configuration to use for the current connection. Seeing a configuration in the list doesn't mean it's enabled, and a successful update doesn't mean the remote server is reachable. Confirm separately that the content was imported and that the configuration is selected. This gives connection tests a clear target.

  2. Step 02 · Request entry point

    Check local ports and choose a system proxy mode

    On desktop, check the listening address and port under Parameters, then select “Set up system proxy automatically.” This sends requests from apps that follow the system proxy to the local client; the routing mode determines which outbound handles requests after they enter the core. These settings operate at different levels, so don't treat them as the same thing just because both have a “global” option. Changing routing won't make an app that ignores the system proxy start using one.

    For everyday traffic routing, start with a client preset and add custom rules after confirming the basic connection. If you use a browser proxy extension, match its protocol and port to the client to avoid conflicts with system settings. On Android, first approve the system connection permission, then check the apps covered by the routing settings and make sure your test app is included.

    If another proxy app is installed on your computer, quit it or assign the apps different ports. When a port is already in use, the interface may still show a configuration even though the core can't listen properly. Check the startup logs to find the cause rather than changing subscriptions.

  3. Step 03 · Verify each layer

    Open a webpage and check the route in the logs

    Once connected, use a browser to open a page you know is available. Check whether it resolves and loads, then review the client logs for connection errors. A single latency test reflects only its specific target and test method; it can't replace testing the actual app. If a page won't load, check in this order: app proxy settings → local listener → routing match → remote connection → DNS resolution. Avoid changing several settings at once.

    If only some sites fail, check their domain and IP routing rules. If all apps fail, start with core startup and the system proxy. For authentication or handshake errors, check the device clock and connection parameters. Logs may include destination domains and configuration IDs, so remove unrelated sensitive details before posting them publicly.

    After verifying the connection, note the working mode and port. Change only one type of setting at a time afterward. Before closing a desktop client, clear the system proxy if needed so apps don't keep sending requests to a local port that's no longer active. The full guide explains each checkpoint and the steps to follow.

Read the full guide →

Project V · V2Fly · Xray

GUI clients manage configuration.
Proxy cores handle connections.

Project V and the core ecosystem

Project V is an open-source ecosystem of network proxy tools, with V2Ray as one of its key components. The V2Fly community continues V2Ray's development and maintenance. Xray builds on related technologies and has developed its own protocol implementations and extensions. These projects share some configuration concepts, but they are not the same executable; core names aren't interchangeable labels.

When reading a configuration, first identify the core in use, then check which fields and protocol combinations it supports. For example, VLESS is a proxy protocol, while REALITY relates to connection security; they are not alternatives at the same level. A client recognizing a share link doesn't guarantee that the selected core supports every parameter in it. Check the generated configuration and startup results as well.

What each client is for

v2rayN, v2rayNG, and v2flyNG all make their source code available under open-source licenses. v2rayN targets desktop systems and brings subscriptions, server selection, routing, and system proxy settings together in a GUI. v2rayNG targets Android and uses the Xray core; v2flyNG offers an Android option based on the V2Fly core. Being open source describes the code and licensing, not a guarantee that all clients have the same features.

GUI clients organize settings and make them easier to manage; the core handles protocols and forwards connections. For interface issues, start with the client settings. For unsupported protocols or unknown fields, check what the core supports. Keeping these layers separate helps avoid mixing subscription formats, interface options, and core syntax, and explains why the same connection details may appear differently in different clients.

Open-source licenses and community maintenance

The V2Ray core from V2Fly and the Xray core use the MPL 2.0 license. Client projects have their own open-source licenses. Read each relevant license before distributing, modifying, or combining software; a core's license doesn't replace a client's license. For everyday use, check feature documentation, release notes, and compatibility with your device.

Community maintenance covers operating system compatibility, protocol support, and bug fixes; it doesn't mean every update requires changes to your existing configuration. When reading release notes, look for changes to defaults, removed fields, or import behavior. If your configuration is stable, keep a recoverable copy before testing new features. Bulk replacement of fields isn't a universal upgrade procedure.

Update the client, core, and subscription separately

Updating the client changes its GUI and configuration management features; updating the core changes protocol support; updating a subscription fetches new connection details from its provider. These may use different controls and follow different release schedules. A successful subscription update won't fix a local port conflict, and a client upgrade won't restore expired remote authentication credentials.

This manual is organized around settings and JSON keys, not a particular interface screenshot. Even if the interface changes, concepts such as listening addresses, outbound tags, routing conditions, and DNS servers can help you find the right settings. Go to the download page for installers, the JSON manual to understand parameter relationships, or the guide for a layered troubleshooting process when the client starts but can't connect.

Usage Guides & Troubleshooting

Node selection and subscription troubleshooting

From fields in the server list to request paths in your apps, troubleshoot each issue on its own instead of blaming one setting for everything.

Browse all articles →

v2rayN download