V2Ray Core Won’t Start? Diagnose Config Errors in v2rayN Logs

Use the logs to diagnose V2Ray startup failures, from port conflicts and invalid JSON to unknown fields and missing rule files.

At a glance

A running v2rayN window doesn’t mean its proxy core is running. This guide is for desktop users whose core exits on startup, keeps restarting, or fails to open a local proxy port. Start with a complete startup log, then check ports, JSON syntax, core compatibility, and rule files. Verify the fix by confirming the local listener and sending a test request—not by repeatedly switching servers.

1. Tell a Core Startup Failure from a Connection Failure

v2rayN is the client interface; V2Ray and Xray are the cores that parse configs, open listeners, and handle proxy traffic. Seeing servers in the interface only means the client has loaded its own data. If the core exits, the local proxy endpoint may disappear too. Changing system proxy settings or repeatedly testing latency won’t fix an error that occurs during startup.

Check the most recent startup entry in the log area at the bottom of the main window. If the log panel is collapsed, expand it first; panel names can vary by version. Note the startup time, core name and version, first error, and exit message. Keep the full lines containing failed, error, file paths, or port numbers—not just the final “startup failed” message.

Build config Read config Load rules Open listener Handle requests

This sequence helps identify the failure stage; it doesn’t mean every core follows exactly the same internal order. Errors reading the config, loading rule files, or binding a listener should be resolved before investigating remote connectivity. If the core keeps running and the port is listening, but requests fail with i/o timeout or a handshake error, check the server address, network, transport, or security settings instead.

2. Port Conflicts: Find the Process Before Changing the Listener

Port conflicts often occur when an old core is still running, the client is open more than once, or another local service uses the same listening port. We’ll use 127.0.0.1:10808 as an example; these numbers may not match your installation. Check the actual local listening port under Settings → Parameter Settings, then substitute it in the commands.

10808
Example: current local proxy port
10818
Example: a new port confirmed to be free
127.0.0.1
Loopback address for local access only

Error: bind: address already in use

Cause: Another listener is using the target address and port. Check whether the error refers to TCP or UDP.

Fix: Identify the process using the port and close any duplicate instance normally. Or switch to a confirmed free port, and update any apps configured to use a fixed proxy port.

Error: Only one usage of each socket address

Cause: This is a common Windows socket binding error. The full line usually includes the listening address.

Fix: Check which process owns the listener at that address. Don’t change a different inbound port that isn’t mentioned in the error.

Run the following query in Windows PowerShell. OwningProcess is the process ID; the second command shows its name and, if accessible, its path. If the first command returns nothing, it only means no matching TCP listener was found at that moment—it doesn’t rule out a UDP conflict or a reserved port.

Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
  Select-Object LocalAddress, LocalPort, OwningProcess

Get-NetTCPConnection -LocalPort 10808 -State Listen -ErrorAction SilentlyContinue |
  ForEach-Object { Get-Process -Id $_.OwningProcess } |
  Select-Object Id, ProcessName, Path

Get-NetUDPEndpoint -LocalPort 10808 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress, LocalPort, OwningProcess

Check ownership before ending a process

Only stop a process after confirming it’s a leftover core or duplicate instance. If another service owns the port, change the client’s port instead. If the error is about access permissions rather than an address conflict, investigate reserved ports and security policies; don’t terminate system processes blindly.

3. JSON Errors: Separate Invalid Syntax from Unsupported Fields

If a custom config causes an immediate startup failure, first check whether the JSON parses, then confirm the core supports its fields. Syntax errors include trailing commas, missing quotes, and unmatched brackets. Compatibility errors can occur even in perfectly valid JSON. Handle these issues in order; don’t assume every config error means the subscription is invalid.

Error: invalid character

Cause: The parser found an unexpected character. Common causes include a trailing comma, curly quotes, or saving a web page as a config file.

Fix: Inspect the text around the error. If the file starts with an HTML tag, download the correct config again instead of trying to fix the page character by character.

Error: unexpected EOF

Cause: The parser reached the end of the file before the expected content was complete. The config may have been copied incompletely or truncated.

Fix: Compare the file with the original and restore any missing content. Don’t just add a closing bracket to hide earlier damage.

Strict JSON doesn’t allow a trailing comma after the last item in an object. The example below is a valid syntax snippet, not a complete core config. To check a custom file, use a local editor so you don’t have to upload a file containing server credentials to an online formatter.

{
  "log": {
    "loglevel": "warning"
  }
}
  1. Back up the original custom config and keep the path and line and column details from the error. Some errors provide only a character position, so check the surrounding text too.
  2. For a regular server entry, v2rayN builds the config from its settings. Go back to the server editor and fix the relevant fields; don’t just edit the temporary runtime file.
  3. For a complete custom config, fix the original file and reload it. Restart once, then review only that startup’s log.
  4. If startup still fails after the syntax is valid, check the protocol, transport, security settings, and rule files. A config that parses isn’t necessarily runnable.

4. Unknown Protocols and Fields: Check Which Core Actually Starts

The v2rayN, V2Ray, and Xray versions are separate things. Updating the client interface doesn’t update every core file it uses, and having a newer core on disk doesn’t mean it was selected for this startup. Check the core name and version in the startup log, then confirm it supports the features the server requires. Use the reported version; don’t infer it from the installer’s name.

Error: unknown field

Cause: The current config loader doesn’t recognize the field. The version may differ, the field may be nested incorrectly, or the config may use another format. Some loaders may also ignore unknown fields without reporting an error.

Fix: Use the field name in the log to check its place in the config hierarchy. Adjust the config to the format supported by the actual core; don’t assume the connection settings are complete just because removing the field clears the error.

Error: unknown config id

Cause: The config builder can’t find a registered type for the given ID. It may refer to a protocol or transport name; check the specific identifier in the surrounding error chain.

Fix: Check the spelling and confirm the feature is supported. If the config requires a feature from another core, use a compatible core and config rather than simply changing the name.

CheckWhat to verifyAvoid this fix
VMess / VLESSProtocol type, identity settings, and support in the current coreChanging only the protocol name while keeping the rest of the config
Transport configTransport type, its settings object, and field hierarchyPasting fields directly from a different config format
Security settingsRequired TLS or REALITY parameters and core supportDisabling security just to bypass the error
Runtime coreCore name and version shown in the startup logAssuming a feature must work based on the client version alone

In particular, distinguish the VLESS protocol from REALITY security settings: they are separate options. A core that supports VLESS doesn’t necessarily support every transport and security feature in a given config. Keep the server’s requirements intact and choose a compatible core. Removing security fields at random may turn a startup error into a handshake failure.

5. Missing Rule Files: Check the Path, File Type, and Permissions

A missing or unreadable external resource referenced by routing rules can also prevent startup. V2Ray and Xray configs commonly use geoip.dat and geosite.dat for IP and domain categorization. Other cores may use different rule formats, so don’t mix them by simply renaming file extensions. Use the actual path and resource type shown in the error.

Error: failed to open file

Cause: The referenced resource can’t be opened. The following errors usually identify the file and explain whether it’s missing or access is denied.

Fix: Check the full path, confirm the file exists and is readable by the current user, then restore the matching rule file using the client’s resource update option.

Error: failed to load geosite

Cause: The domain categorization resource failed to load. The file may be missing or damaged, or the rules may refer to a category that isn’t in the current resource.

Fix: Read the underlying error. Restore the resource if the file is missing; if a category is missing, check that the rule syntax matches the resource version.

6. Change One Thing at a Time; Verify the Listener and Requests

Save the current config and logs before troubleshooting, then change one thing at a time. A useful order is port binding, JSON syntax, protocol fields, and rule files. But if the log clearly identifies a missing file, fix that directly rather than mechanically going through every step. Keep a record of each change and its result; otherwise, updating the subscription, switching cores, and changing routing at once makes it hard to identify the cause.

  1. Start with the basics: Turn off TUN and temporarily disable custom rules you don’t need. Select one fully configured server and keep the regular local proxy listener enabled.
  2. Restart once: Read the log from this startup’s timestamp and confirm the core doesn’t exit immediately. Note the actual core name and version.
  3. Check the local listener: Use the command above to check the actual port and confirm it belongs to the core from this run, not another client instance.
  4. Send a request explicitly through the proxy: If the port provides SOCKS, use the command below to test it. Then check the request log to see whether the failure is at DNS resolution, connection, or handshake.
  5. Restore features one at a time: Re-enable routing rules first, then TUN. Check the log after each change to pinpoint where the failure returns.
curl.exe --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 20 --head https://example.com/

This Windows example sets a 10-second connection timeout and a 20-second total timeout. Replace the SOCKS port with the one you actually use. socks5h sends the destination hostname to the proxy for resolution; if your local listener only supports HTTP proxying, use the appropriate proxy type instead. An HTTP response confirms that this request received a response, not that every site is reachable. A request timeout alone doesn’t mean the core failed to start.

Conclusion: Verify Startup and Proxy Connectivity Separately

If the core keeps running and the correct process opens a listener, startup has succeeded. If requests still time out or fail during the handshake, use the request log to investigate the remote connection instead of repeatedly reinstalling the client.

7. Common Questions About Log Troubleshooting

The last line only says “process exited.” Where should I look?

Look earlier in the same startup log for the first specific error, and keep the related errors that follow. The exit message is usually just the result; actionable details are often in an earlier port number, field name, or file path.

Will running v2rayN as an administrator fix it?

Not as a general fix. A regular loopback proxy listener usually doesn’t require administrator privileges, though TUN or certain network operations may need additional permissions. Turn off TUN and compare. Elevated privileges won’t fix invalid JSON or an unsupported protocol.

The subscription updated successfully. Why won’t the core start?

A successful update means the subscription was retrieved and processed; it doesn’t guarantee the resulting runtime config is compatible. Select a fully configured server, check the active core, and review global routing settings. A global rule error can affect multiple servers.

What should I include when asking for help with logs?

Include the OS and client versions, actual core version, steps to reproduce, and the complete error chain from one startup. Hide subscription URLs, credentials, private keys, and other sensitive data. Keep local ports, error field names, and sanitized directory paths where possible.

Download v2rayN