mcp-xray-pilot 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +502 -0
  3. package/data/docs/_index.json +533 -0
  4. package/data/docs/basic__api.md +148 -0
  5. package/data/docs/basic__dns.md +366 -0
  6. package/data/docs/basic__fakedns.md +202 -0
  7. package/data/docs/basic__geodata.md +64 -0
  8. package/data/docs/basic__inbound.md +159 -0
  9. package/data/docs/basic__index.md +136 -0
  10. package/data/docs/basic__log.md +67 -0
  11. package/data/docs/basic__metrics.md +262 -0
  12. package/data/docs/basic__observatory.md +115 -0
  13. package/data/docs/basic__outbound.md +164 -0
  14. package/data/docs/basic__policy.md +140 -0
  15. package/data/docs/basic__reverse.md +268 -0
  16. package/data/docs/basic__routing.md +474 -0
  17. package/data/docs/basic__stats.md +61 -0
  18. package/data/docs/basic__transport.md +1283 -0
  19. package/data/docs/features__features_browser_dialer.md +61 -0
  20. package/data/docs/features__features_env.md +66 -0
  21. package/data/docs/features__features_fallback.md +110 -0
  22. package/data/docs/features__features_index.md +17 -0
  23. package/data/docs/features__features_multiple.md +144 -0
  24. package/data/docs/features__features_xtls.md +13 -0
  25. package/data/docs/inbounds__inbounds_dokodemo.md +11 -0
  26. package/data/docs/inbounds__inbounds_http.md +80 -0
  27. package/data/docs/inbounds__inbounds_hysteria.md +60 -0
  28. package/data/docs/inbounds__inbounds_index.md +22 -0
  29. package/data/docs/inbounds__inbounds_shadowsocks.md +118 -0
  30. package/data/docs/inbounds__inbounds_socks.md +87 -0
  31. package/data/docs/inbounds__inbounds_trojan.md +78 -0
  32. package/data/docs/inbounds__inbounds_tun.md +47 -0
  33. package/data/docs/inbounds__inbounds_tunnel.md +86 -0
  34. package/data/docs/inbounds__inbounds_vless.md +135 -0
  35. package/data/docs/inbounds__inbounds_vmess.md +95 -0
  36. package/data/docs/inbounds__inbounds_wireguard.md +78 -0
  37. package/data/docs/outbounds__outbounds_blackhole.md +42 -0
  38. package/data/docs/outbounds__outbounds_dns.md +97 -0
  39. package/data/docs/outbounds__outbounds_freedom.md +170 -0
  40. package/data/docs/outbounds__outbounds_http.md +70 -0
  41. package/data/docs/outbounds__outbounds_hysteria.md +39 -0
  42. package/data/docs/outbounds__outbounds_index.md +24 -0
  43. package/data/docs/outbounds__outbounds_loopback.md +65 -0
  44. package/data/docs/outbounds__outbounds_shadowsocks.md +105 -0
  45. package/data/docs/outbounds__outbounds_socks.md +58 -0
  46. package/data/docs/outbounds__outbounds_trojan.md +49 -0
  47. package/data/docs/outbounds__outbounds_vless.md +122 -0
  48. package/data/docs/outbounds__outbounds_vmess.md +76 -0
  49. package/data/docs/outbounds__outbounds_wireguard.md +141 -0
  50. package/data/docs/transports__transports_grpc.md +137 -0
  51. package/data/docs/transports__transports_h2.md +11 -0
  52. package/data/docs/transports__transports_http.md +11 -0
  53. package/data/docs/transports__transports_httpupgrade.md +61 -0
  54. package/data/docs/transports__transports_hysteria.md +110 -0
  55. package/data/docs/transports__transports_index.md +19 -0
  56. package/data/docs/transports__transports_mkcp.md +125 -0
  57. package/data/docs/transports__transports_quic.md +11 -0
  58. package/data/docs/transports__transports_raw.md +156 -0
  59. package/data/docs/transports__transports_splithttp.md +11 -0
  60. package/data/docs/transports__transports_tcp.md +11 -0
  61. package/data/docs/transports__transports_websocket.md +75 -0
  62. package/data/docs/transports__transports_xhttp.md +11 -0
  63. package/dist/data/compatibility.js +170 -0
  64. package/dist/data/compatibility.js.map +1 -0
  65. package/dist/data/geocatalogue.js +191 -0
  66. package/dist/data/geocatalogue.js.map +1 -0
  67. package/dist/docs.js +339 -0
  68. package/dist/docs.js.map +1 -0
  69. package/dist/handlers.js +217 -0
  70. package/dist/handlers.js.map +1 -0
  71. package/dist/index.js +66 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/lint.js +737 -0
  74. package/dist/lint.js.map +1 -0
  75. package/dist/schemas/protocols/blackhole.js +16 -0
  76. package/dist/schemas/protocols/blackhole.js.map +1 -0
  77. package/dist/schemas/protocols/common.js +32 -0
  78. package/dist/schemas/protocols/common.js.map +1 -0
  79. package/dist/schemas/protocols/dns.js +14 -0
  80. package/dist/schemas/protocols/dns.js.map +1 -0
  81. package/dist/schemas/protocols/dokodemo.js +17 -0
  82. package/dist/schemas/protocols/dokodemo.js.map +1 -0
  83. package/dist/schemas/protocols/freedom.js +45 -0
  84. package/dist/schemas/protocols/freedom.js.map +1 -0
  85. package/dist/schemas/protocols/http.js +38 -0
  86. package/dist/schemas/protocols/http.js.map +1 -0
  87. package/dist/schemas/protocols/hysteria.js +51 -0
  88. package/dist/schemas/protocols/hysteria.js.map +1 -0
  89. package/dist/schemas/protocols/index.js +50 -0
  90. package/dist/schemas/protocols/index.js.map +1 -0
  91. package/dist/schemas/protocols/loopback.js +11 -0
  92. package/dist/schemas/protocols/loopback.js.map +1 -0
  93. package/dist/schemas/protocols/shadowsocks.js +60 -0
  94. package/dist/schemas/protocols/shadowsocks.js.map +1 -0
  95. package/dist/schemas/protocols/socks.js +42 -0
  96. package/dist/schemas/protocols/socks.js.map +1 -0
  97. package/dist/schemas/protocols/trojan.js +34 -0
  98. package/dist/schemas/protocols/trojan.js.map +1 -0
  99. package/dist/schemas/protocols/tun.js +19 -0
  100. package/dist/schemas/protocols/tun.js.map +1 -0
  101. package/dist/schemas/protocols/vless.js +44 -0
  102. package/dist/schemas/protocols/vless.js.map +1 -0
  103. package/dist/schemas/protocols/vmess.js +48 -0
  104. package/dist/schemas/protocols/vmess.js.map +1 -0
  105. package/dist/schemas/protocols/wireguard.js +34 -0
  106. package/dist/schemas/protocols/wireguard.js.map +1 -0
  107. package/dist/schemas/security/index.js +16 -0
  108. package/dist/schemas/security/index.js.map +1 -0
  109. package/dist/schemas/security/reality.js +35 -0
  110. package/dist/schemas/security/reality.js.map +1 -0
  111. package/dist/schemas/security/tls.js +46 -0
  112. package/dist/schemas/security/tls.js.map +1 -0
  113. package/dist/schemas/security/xtls.js +17 -0
  114. package/dist/schemas/security/xtls.js.map +1 -0
  115. package/dist/schemas/transports/grpc.js +18 -0
  116. package/dist/schemas/transports/grpc.js.map +1 -0
  117. package/dist/schemas/transports/httpupgrade.js +14 -0
  118. package/dist/schemas/transports/httpupgrade.js.map +1 -0
  119. package/dist/schemas/transports/hysteria.js +25 -0
  120. package/dist/schemas/transports/hysteria.js.map +1 -0
  121. package/dist/schemas/transports/index.js +32 -0
  122. package/dist/schemas/transports/index.js.map +1 -0
  123. package/dist/schemas/transports/mkcp.js +34 -0
  124. package/dist/schemas/transports/mkcp.js.map +1 -0
  125. package/dist/schemas/transports/raw.js +19 -0
  126. package/dist/schemas/transports/raw.js.map +1 -0
  127. package/dist/schemas/transports/websocket.js +15 -0
  128. package/dist/schemas/transports/websocket.js.map +1 -0
  129. package/dist/schemas/transports/xhttp.js +34 -0
  130. package/dist/schemas/transports/xhttp.js.map +1 -0
  131. package/dist/search.js +78 -0
  132. package/dist/search.js.map +1 -0
  133. package/dist/state.js +87 -0
  134. package/dist/state.js.map +1 -0
  135. package/dist/tools.js +274 -0
  136. package/dist/tools.js.map +1 -0
  137. package/dist/tools_impl/diff.js +55 -0
  138. package/dist/tools_impl/diff.js.map +1 -0
  139. package/dist/tools_impl/github.js +416 -0
  140. package/dist/tools_impl/github.js.map +1 -0
  141. package/dist/tools_impl/merge.js +181 -0
  142. package/dist/tools_impl/merge.js.map +1 -0
  143. package/dist/tools_impl/refresh.js +46 -0
  144. package/dist/tools_impl/refresh.js.map +1 -0
  145. package/dist/tools_impl/suggest.js +169 -0
  146. package/dist/tools_impl/suggest.js.map +1 -0
  147. package/dist/types.js +10 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils.js +81 -0
  150. package/dist/utils.js.map +1 -0
  151. package/dist/validate.js +408 -0
  152. package/dist/validate.js.map +1 -0
  153. package/package.json +62 -0
@@ -0,0 +1,105 @@
1
+ ---
2
+ url: https://xtls.github.io/en/config/outbounds/shadowsocks.html
3
+ source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/outbounds/shadowsocks.md
4
+ title: Shadowsocks
5
+ category: outbounds
6
+ slug: outbounds/shadowsocks
7
+ fetched_at: 2026-05-04T18:42:57.244Z
8
+ ---
9
+ # Shadowsocks
10
+
11
+ The [Shadowsocks](https://en.wikipedia.org/wiki/Shadowsocks) protocol, compatible with most other version implementations.
12
+
13
+ Current compatibility is as follows:
14
+
15
+ - Supports TCP and UDP packet forwarding, where UDP can be optionally disabled;
16
+ - Recommended encryption methods:
17
+ - 2022-blake3-aes-128-gcm
18
+ - 2022-blake3-aes-256-gcm
19
+ - 2022-blake3-chacha20-poly1305
20
+ - Other encryption methods:
21
+ - aes-256-gcm
22
+ - aes-128-gcm
23
+ - chacha20-poly1305 (or chacha20-ietf-poly1305)
24
+ - xchacha20-poly1305 (or xchacha20-ietf-poly1305)
25
+ - none (or plain)
26
+
27
+ The Shadowsocks 2022 new protocol format improves performance and includes complete replay protection, resolving the following security issues of the old protocol:
28
+
29
+ - [Severe vulnerabilities in the design of Shadowsocks AEAD encryption, unable to guarantee communication reliability](https://github.com/shadowsocks/shadowsocks-org/issues/183)
30
+ - The false positive rate of the original TCP replay filter increases over time
31
+ - No UDP replay protection
32
+ - TCP behavior that can be used for active probing
33
+
34
+ ::: danger
35
+ Under the "none" encryption method, traffic will be transmitted in plain text. To ensure security, do not use it on public networks.
36
+ :::
37
+
38
+ ## OutboundConfigurationObject
39
+
40
+ ```json
41
+ {
42
+ "email": "love@xray.com",
43
+ "address": "127.0.0.1",
44
+ "port": 1234,
45
+ "method": "Encryption Method",
46
+ "password": "Password",
47
+ "uot": true,
48
+ "UoTVersion": 2,
49
+ "level": 0
50
+ }
51
+ ```
52
+
53
+ > `email`: string
54
+
55
+ Email address, optional, used to identify the user.
56
+
57
+ > `address`: address
58
+
59
+ Shadowsocks server address. Supports IPv4, IPv6, and domain names. Required.
60
+
61
+ > `port`: number
62
+
63
+ Shadowsocks server port. Required.
64
+
65
+ > `method`: string
66
+
67
+ Shadowsocks encryption method. Required.
68
+
69
+ > `password`: string
70
+
71
+ Shadowsocks authentication password. Required.
72
+
73
+ > `uot`: bool
74
+
75
+ Enable `udp over tcp`.
76
+
77
+ > `UoTVersion`: number
78
+
79
+ Implementation version of `UDP over TCP`.
80
+
81
+ Current optional values: `1`, `2`.
82
+
83
+ - Shadowsocks 2022
84
+
85
+ Uses a pre-shared key similar to WireGuard as the password.
86
+
87
+ Use `openssl rand -base64 <length>` to generate a key compatible with shadowsocks-rust. The length depends on the encryption method used.
88
+
89
+ | Encryption Method | Key Length |
90
+ | ----------------------------- | ---------: |
91
+ | 2022-blake3-aes-128-gcm | 16 |
92
+ | 2022-blake3-aes-256-gcm | 32 |
93
+ | 2022-blake3-chacha20-poly1305 | 32 |
94
+
95
+ In the Go implementation, 32-byte keys always work.
96
+
97
+ - Other encryption methods
98
+
99
+ Any string. There is no limit on password length, but short passwords are more likely to be cracked. It is recommended to use passwords of 16 characters or longer.
100
+
101
+ > `level`: number
102
+
103
+ User level. The connection will use the [local policy](../policy.md#levelpolicyobject) corresponding to this user level.
104
+
105
+ The value of `level` corresponds to the `level` value in [policy](../policy.md#policyobject). If not specified, the default is 0.
@@ -0,0 +1,58 @@
1
+ ---
2
+ url: https://xtls.github.io/en/config/outbounds/socks.html
3
+ source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/outbounds/socks.md
4
+ title: Socks
5
+ category: outbounds
6
+ slug: outbounds/socks
7
+ fetched_at: 2026-05-04T18:42:57.742Z
8
+ ---
9
+ # Socks
10
+
11
+ Standard Socks protocol implementation, compatible with Socks 5.
12
+
13
+ ::: danger
14
+ **The Socks protocol does not encrypt transmission and is not suitable for transmission over the public internet.**
15
+ :::
16
+
17
+ ## OutboundConfigurationObject
18
+
19
+ ```json
20
+ {
21
+ "address": "127.0.0.1",
22
+ "port": 1234,
23
+ "user": "test user",
24
+ "pass": "test pass",
25
+ "level": 0,
26
+ "email": "love@xray.com"
27
+ }
28
+ ```
29
+
30
+ > `address`: address
31
+
32
+ Server address. Required.
33
+
34
+ ::: tip
35
+ Only connections to Socks 5 servers are supported.
36
+ :::
37
+
38
+ > `port`: number
39
+
40
+ Server port. Required.
41
+
42
+ > `user`: string
43
+
44
+ Username, string type. Required if the remote server requires authentication; otherwise, do not include this item.
45
+
46
+ > `pass`: string
47
+
48
+ Password, string type. Required if the remote server requires authentication; otherwise, do not include this item.
49
+
50
+ > `level`: number
51
+
52
+ User level. The connection will use the [local policy](../policy.md#levelpolicyobject) corresponding to this user level. Optional if the remote server requires authentication; otherwise, do not include this item.
53
+
54
+ The value of `userLevel` corresponds to the value of `level` in [policy](../policy.md#policyobject). If not specified, the default is 0.
55
+
56
+ > `email`: string
57
+
58
+ Email address, used to identify the user. Optional if the remote server requires authentication; otherwise, do not include this item.
@@ -0,0 +1,49 @@
1
+ ---
2
+ url: https://xtls.github.io/en/config/outbounds/trojan.html
3
+ source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/outbounds/trojan.md
4
+ title: Trojan
5
+ category: outbounds
6
+ slug: outbounds/trojan
7
+ fetched_at: 2026-05-04T18:42:58.256Z
8
+ ---
9
+ # Trojan
10
+
11
+ [Trojan](https://trojan-gfw.github.io/trojan/protocol) protocol.
12
+
13
+ ::: danger
14
+ Trojan is designed to work over a correctly configured encrypted TLS tunnel.
15
+ :::
16
+
17
+ ## OutboundConfigurationObject
18
+
19
+ ```json
20
+ {
21
+ "address": "127.0.0.1",
22
+ "port": 1234,
23
+ "password": "password",
24
+ "email": "love@xray.com",
25
+ "level": 0
26
+ }
27
+ ```
28
+
29
+ > `address`: address
30
+
31
+ Server address. Supports IPv4, IPv6, and domain names. Required.
32
+
33
+ > `port`: number
34
+
35
+ Server port. Usually the same as the port the server is listening on.
36
+
37
+ > `password`: string
38
+
39
+ Password. Required, any string.
40
+
41
+ > `email`: string
42
+
43
+ Email address. Optional, used to identify the user.
44
+
45
+ > `level`: number
46
+
47
+ User level. Connections will use the [Local Policy](../policy.md#levelpolicyobject) corresponding to this user level.
48
+
49
+ The value of `level` corresponds to the value of `level` in [policy](../policy.md#policyobject). If not specified, it defaults to 0.
@@ -0,0 +1,122 @@
1
+ ---
2
+ url: https://xtls.github.io/en/config/outbounds/vless.html
3
+ source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/outbounds/vless.md
4
+ title: VLESS (XTLS Vision Seed)
5
+ category: outbounds
6
+ slug: outbounds/vless
7
+ fetched_at: 2026-05-04T18:42:58.784Z
8
+ ---
9
+ # VLESS (XTLS Vision Seed)
10
+
11
+ VLESS is a stateless lightweight transport protocol. It consists of inbound and outbound parts and can serve as a bridge between the Xray client and server.
12
+
13
+ Unlike [VMess](./vmess.md), VLESS does not depend on system time. The authentication method is also UUID.
14
+
15
+ ## OutboundConfigurationObject
16
+
17
+ ```json
18
+ {
19
+ "address": "example.com",
20
+ "port": 443,
21
+ "id": "5783a3e7-e373-51cd-8642-c83782b807c5",
22
+ "encryption": "none",
23
+ "flow": "xtls-rprx-vision",
24
+ "level": 0,
25
+ "reverse": {}
26
+ }
27
+ ```
28
+
29
+ > `address`: address
30
+
31
+ Server address, points to the server. Supports domain names, IPv4, and IPv6.
32
+
33
+ > `port`: number
34
+
35
+ Server port, usually the same as the port the server is listening on.
36
+
37
+ > `id`: string
38
+
39
+ User ID for VLESS. It can be any string less than 30 bytes, or a valid UUID.
40
+ A custom string and its mapped UUID are equivalent. This means you can identify the same user in the configuration file by writing the ID in either way:
41
+
42
+ - Write `"id": "我爱🍉老师1314"`,
43
+ - Or write `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (This UUID is the UUID mapping of `我爱🍉老师1314`)
44
+
45
+ The mapping standard is described in [VLESS UUID Mapping Standard: Mapping Custom Strings to UUIDv5](https://github.com/XTLS/Xray-core/issues/158).
46
+
47
+ You can use the command `xray uuid -i "custom string"` to generate the UUID mapped from a custom string, or use the command `xray uuid` to generate a random UUID.
48
+
49
+ > `encryption`: "none"
50
+
51
+ [VLESS Encryption](https://github.com/XTLS/Xray-core/pull/5067) settings. Cannot be left empty; to disable, explicitly set to `"none"`.
52
+
53
+ It is recommended for most users to use `./xray vlessenc` to automatically generate this field to ensure no errors in writing. The detailed configuration below is recommended only for advanced users.
54
+
55
+ Its format is a detailed configuration string of fields connected by `.`. For example: `mlkem768x25519plus.native.0rtt.100-111-1111.75-0-111.50-0-3333.ptjHQxBQxTJ9MWr2cd5qWIflBSACHOevTauCQwa_71U`. This document will refer to the separate parts separated by dots as "blocks".
56
+
57
+ - **The 1st block** is the handshake method. Currently, there is only `mlkem768x25519plus`. Requires consistency between server and client.
58
+ - **The 2nd block** is the encryption method. Options are `native`/`xorpub`/`random`, corresponding to: raw format packet / raw format + obfuscated public key part / fully random numbers (similar to VMESS/Shadowsocks). Requires consistency between server and client.
59
+ - **The 3rd block** is session resumption. Choosing `0rtt` will follow the server settings to attempt to use previously generated tickets to skip the handshake for fast connection (can be manually disabled by the server). Choosing `1rtt` will force a 1-RTT handshake process. The meaning here differs from the server setting; see VLESS Inbound `decryption` settings for details.
60
+
61
+ Following blocks are **padding**. After the connection is established, the client sends some garbage data to obfuscate length characteristics. It does not need to be the same as the server (the corresponding part in the inbound is the padding sent from the server to the client). It is a variable-length part with the format `padding.delay.padding` + `(.delay.padding)` × n (multiple padding blocks can be inserted, requiring a delay block between two padding blocks). For example, you can write a very long `padding.delay.padding.delay.padding.delay.padding.delay.padding.delay.padding`.
62
+
63
+ - `padding` format is `probability-min-max`. E.g., `100-111-1111` means 100% probability to send a padding of length 111~1111.
64
+ - `delay` format is also `probability-min-max`. E.g., `75-0-111` means 75% probability to wait 0~111 milliseconds.
65
+
66
+ The first padding block has special requirements: probability must be 100% and minimum length greater than 0. If no padding exists, the core automatically uses `100-111-1111.75-0-111.50-0-3333` as the padding setting.
67
+
68
+ **The last block** will be recognized by the core as the parameter used to authenticate the server. It can be generated by `./xray x25519` (using the Password part) or `./xray mlkem768` (using the Client part). It must correspond to the server. `mlkem768` belongs to post-quantum algorithms, preventing (future) client parameter leaks from allowing quantum computers to crack the private key and impersonate the server. This parameter is only used for verification; the handshake process is post-quantum secure regardless, and existing encrypted data cannot be decrypted by future quantum computers.
69
+
70
+ > `flow`: string
71
+
72
+ Flow control mode, used to select the XTLS algorithm.
73
+
74
+ Currently, the following flow control modes are available in the outbound protocol:
75
+
76
+ - **No `flow` or empty string**: Use standard TLS proxy.
77
+ - **`xtls-rprx-vision`**: Use XTLS, including inner handshake random padding. Will intercept UDP traffic targeting port 443 (QUIC) to force browsers to use standard HTTPS, increasing traffic that can be Spliced.
78
+ - **`xtls-rprx-vision-udp443`**: Same as `xtls-rprx-vision`, but does not intercept UDP 443. Used when a program forces the use of QUIC and would fail to work if intercepted.
79
+
80
+ XTLS is available only in the following combinations:
81
+
82
+ - **TCP+TLS/Reality**: In this case, if transmitting TLS 1.3, the core will attempt to Splice encrypted data at the bottom layer. If successful, it saves all core IO overhead.
83
+ - **VLESS Encryption**: No underlying transport restrictions. If the underlying transport is not TCP, it only attempts to penetrate Encryption, saving Encryption overhead. If it is TCP, it will still attempt to perform Splice.
84
+
85
+ ::: tip About Splice
86
+ Splice is a function provided by the Linux Kernel. The system kernel forwards TCP directly, no longer passing through Xray's memory, greatly reducing data copying and CPU context switching.
87
+
88
+ When using Vision mode, Splice is automatically enabled if the following conditions are met:
89
+
90
+ - Linux environment.
91
+ - Inbound protocol is a pure TCP connection like `Dokodemo door`, `Socks`, `HTTP`, or other inbound protocols using XTLS.
92
+ - Outbound protocol is VLESS + XTLS.
93
+
94
+ When using Splice, the network speed display will lag and will only be counted after the connection is disconnected because the core cannot know the traffic situation while the kernel takes over the connection.
95
+ :::
96
+
97
+ > `level`: number
98
+
99
+ User level. The connection will use the [Local Policy](../policy.md#levelpolicyobject) corresponding to this user level.
100
+
101
+ The value of `level` corresponds to the value of `level` in [policy](../policy.md#policyobject). If not specified, it defaults to 0.
102
+
103
+ > `reverse`: struct
104
+
105
+ VLESS minimalist reverse proxy configuration. It functions the same as the core's built-in generic reverse proxy but is simpler to configure, and it preserves the real source IP information from the public-facing side.
106
+
107
+ The existence of this item indicates that this outbound can be used as a VLESS reverse proxy outbound, and it will automatically establish a connection to the server to register the reverse proxy tunnel.
108
+
109
+ Current syntax:
110
+
111
+ ```json
112
+ "reverse": {
113
+ "tag": "r-inbound",
114
+ "sniffing" : {}
115
+ }
116
+ ```
117
+
118
+ `tag` is the inbound proxy tag for this reverse proxy. When the server dispatches a reverse proxy request, it enters the routing system from the inbound using this tag, and the routing system routes it to the outbound you need.
119
+
120
+ The UUID used needs to be a UUID that is also configured with reverse on the server side (see VLESS Inbound for details).
121
+
122
+ `sniffing` see [sniffingObject](../inbound.md#sniffingobject), performs sniffing on requests entering through this reverse proxy.
@@ -0,0 +1,76 @@
1
+ ---
2
+ url: https://xtls.github.io/en/config/outbounds/vmess.html
3
+ source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/outbounds/vmess.md
4
+ title: VMess
5
+ category: outbounds
6
+ slug: outbounds/vmess
7
+ fetched_at: 2026-05-04T18:42:59.291Z
8
+ ---
9
+ # VMess
10
+
11
+ [VMess](../../development/protocols/vmess.md) is an encrypted transport protocol, usually serving as a bridge between the Xray client and server.
12
+
13
+ ::: danger
14
+ VMess depends on system time. Please ensure that the UTC time of the system running Xray is within 120 seconds of the actual time, independent of the time zone. On Linux systems, you can install the `ntp` service to automatically synchronize the system time.
15
+ :::
16
+
17
+ ## OutboundConfigurationObject
18
+
19
+ ```json
20
+ {
21
+ "address": "127.0.0.1",
22
+ "port": 37192,
23
+ "id": "5783a3e7-e373-51cd-8642-c83782b807c5",
24
+ "security": "auto",
25
+ "level": 0,
26
+ "experiments": ""
27
+ }
28
+ ```
29
+
30
+ > `address`: address
31
+
32
+ Server address, supports IP address or domain name.
33
+
34
+ > `port`: number
35
+
36
+ The port number the server is listening on. Required.
37
+
38
+ > `id`: string
39
+
40
+ VMess User ID. It can be any string less than 30 bytes or a valid UUID.
41
+
42
+ A custom string and its mapped UUID are equivalent. This means you can identify the same user in the configuration file like this:
43
+
44
+ - Write `"id": "我爱🍉老师1314"`,
45
+ - Or write `"id": "5783a3e7-e373-51cd-8642-c83782b807c5"` (This UUID is the UUID mapping of `我爱🍉老师1314`)
46
+
47
+ The mapping standard is described in [VLESS UUID Mapping Standard: Mapping Custom Strings to a UUIDv5](https://github.com/XTLS/Xray-core/issues/158).
48
+
49
+ You can use the command `xray uuid -i "custom string"` to generate the UUID mapped from the custom string. You can also use the command `xray uuid` to generate a random UUID.
50
+
51
+ > `level`: number
52
+
53
+ User level. The connection will use the [local policy](../policy.md#levelpolicyobject) corresponding to this user level.
54
+
55
+ The value of `level` corresponds to the value of `level` in [policy](../policy.md#policyobject). If not specified, the default is 0.
56
+
57
+ > `security`: "aes-128-gcm" | "chacha20-poly1305" | "auto" | "none" | "zero"
58
+
59
+ Encryption method. The client will use the configured encryption method to send data, and the server will automatically identify it without configuration.
60
+
61
+ - `"aes-128-gcm"`: Use AES-128-GCM algorithm.
62
+ - `"chacha20-poly1305"`: Use Chacha20-Poly1305 algorithm.
63
+ - `"auto"`: Default value. Automatically selected (uses aes-128-gcm encryption when the running framework is AMD64, ARM64, or s390x; uses Chacha20-Poly1305 encryption in other cases).
64
+ - `"none"`: No encryption, maintains the VMess message structure.
65
+ - `"zero"`: No encryption, direct stream copy (similar to VLESS).
66
+
67
+ It is not recommended to use `"none"` or `"zero"` pseudo-encryption methods without enabling TLS encryption and enforcing certificate verification. Regardless of the encryption method used, the VMess packet header is protected by encryption and authentication.
68
+
69
+ Note: `"auto"` only determines the AES hardware acceleration support status of the _client_. If the _server_ does not support AES hardware acceleration, you still need to manually set it to `chacha20-poly1305`. This is very important because Chacha20-Poly1305 takes about 48% more time than AES-128-GCM on platforms supporting AES acceleration, but on platforms _without_ AES acceleration, AES-128-GCM takes over 2000% more time than Chacha20-Poly1305.
70
+
71
+ > `experiments`: string
72
+
73
+ Enabled VMess protocol experimental features. (Features here are unstable and may be removed at any time). Multiple enabled experiments can be separated by the `|` character, such as `"AuthenticatedLength|NoTerminationSignal"`.
74
+
75
+ - `"AuthenticatedLength"`: Enable authenticated packet length experiment. This experiment requires both the client and server to enable it simultaneously and run the same version of the program.
76
+ - `"NoTerminationSignal"`: Enable not sending the disconnection signal. This feature is now enabled by default.
@@ -0,0 +1,141 @@
1
+ ---
2
+ url: https://xtls.github.io/en/config/outbounds/wireguard.html
3
+ source_url: https://raw.githubusercontent.com/XTLS/Xray-docs-next/main/docs/en/config/outbounds/wireguard.md
4
+ title: Wireguard
5
+ category: outbounds
6
+ slug: outbounds/wireguard
7
+ fetched_at: 2026-05-04T18:42:59.805Z
8
+ ---
9
+ # Wireguard
10
+
11
+ Standard Wireguard protocol implementation.
12
+
13
+ ::: danger
14
+ **The Wireguard protocol is not designed specifically for bypassing firewalls. If used at the outermost layer to cross the Great Firewall, distinctive characteristics may lead to the server being blocked.**
15
+ :::
16
+
17
+ ## OutboundConfigurationObject
18
+
19
+ ```json
20
+ {
21
+ "secretKey": "PRIVATE_KEY",
22
+ "address": [
23
+ // optional, default ["10.0.0.1", "fd59:7153:2388:b5fd:0000:0000:0000:0001"]
24
+ "IPv4_CIDR",
25
+ "IPv6_CIDR",
26
+ "and more..."
27
+ ],
28
+ "peers": [
29
+ {
30
+ "endpoint": "ENDPOINT_ADDR",
31
+ "publicKey": "PUBLIC_KEY"
32
+ }
33
+ ],
34
+ "noKernelTun": false,
35
+ "mtu": 1420, // optional, default 1420
36
+ "reserved": [1, 2, 3],
37
+ "workers": 2, // optional, default runtime.NumCPU()
38
+ "domainStrategy": "ForceIP"
39
+ }
40
+ ```
41
+
42
+ ::: tip
43
+ Currently, configuring `streamSettings` is not supported in the Wireguard protocol outbound.
44
+ :::
45
+
46
+ > `secretKey`: string
47
+
48
+ User private key. Required.
49
+
50
+ > `address`: string array
51
+
52
+ Wireguard will start a virtual network interface (tun) locally. Use one or more IP addresses; IPv6 is supported.
53
+
54
+ > `noKernelTun`: true | false
55
+
56
+ By default, the core detects if it is running on Linux and if the current user has `CAP_NET_ADMIN` permissions to decide whether to enable the system virtual network interface; otherwise, it uses gVisor. Using the system virtual interface offers relatively higher performance. Note that this is only for processing IP packets and has nothing to do with the wireguard kernel module.
57
+
58
+ This detection may not always be accurate. For example, some LXC virtualization environments may not have TUN permissions at all, causing the outbound to fail. Therefore, you can set this option to manually disable it.
59
+
60
+ When using the system virtual interface, it occupies IPv6 routing table number `10230`. Each additional Wireguard outbound will use subsequent routing tables sequentially; for example, the second one will use routing table `10231`, and so on.
61
+
62
+ Note that if a second Xray instance is started on the same machine, it will not assign the next routing table number but will continue trying to use routing table `10230`. Since it is already occupied by the first Xray instance, it will fail to connect. If absolutely needed, you must set this option to disable the system virtual interface.
63
+
64
+ > `mtu`: int
65
+
66
+ MTU size of the underlying Wireguard tun.
67
+
68
+ <details>
69
+ <summary>MTU Calculation Method</summary>
70
+
71
+ The structure of a Wireguard packet is as follows:
72
+
73
+ ```
74
+ - 20-byte IPv4 header or 40 byte IPv6 header
75
+ - 8-byte UDP header
76
+ - 4-byte type
77
+ - 4-byte key index
78
+ - 8-byte nonce
79
+ - N-byte encrypted data
80
+ - 16-byte authentication tag
81
+ ```
82
+
83
+ `N-byte encrypted data` is the MTU value we need. Depending on whether the endpoint is IPv4 or IPv6, the specific value can be 1440 (IPv4) or 1420 (IPv6). If in a special environment, subtract further (e.g., home broadband PPPoE requires an extra -8).
84
+
85
+ </details>
86
+
87
+ > `reserved` \[ number \]
88
+
89
+ Wireguard reserved bytes, fill as needed.
90
+
91
+ > `workers`: int
92
+
93
+ Number of threads used by Wireguard. Defaults to the number of system cores.
94
+
95
+ > `peers`: \[ [Peers](#peers) \]
96
+
97
+ List of Wireguard servers, where each item is a server configuration.
98
+
99
+ > `domainStrategy`: "ForceIPv6v4" | "ForceIPv6" | "ForceIPv4v6" | "ForceIPv4" | "ForceIP"
100
+
101
+ Controls the domain resolution strategy when the Wireguard server address is a domain name or the target address of the proxied traffic is a domain name.
102
+
103
+ Unlike most proxy protocols, Wireguard does not allow passing domain names as targets. Therefore, if the incoming target is a domain, it needs to be resolved to an IP address before transmission. This is handled by Xray's built-in DNS. The meaning of this field is the same as `domainStrategy` in `Freedom` outbound. The default value is `ForceIP`.
104
+
105
+ The `domainStrategy` of `Freedom` outbound includes options like `UseIP`, which are not provided here because Wireguard must obtain a usable IP and cannot perform the behavior of falling back to a domain name after `UseIP` resolution fails.<br>
106
+ Note: When applied to proxied traffic, this option is also constrained by the `address` option. For example, if you set `ForceIPv6v4` but no IPv6 address is set in `address`, even if the target domain has AAAA records, they will not be resolved/used.
107
+
108
+ ### Peers
109
+
110
+ ```json
111
+ {
112
+ "endpoint": "ENDPOINT_ADDR",
113
+ "publicKey": "PUBLIC_KEY",
114
+ "preSharedKey": "PRE_SHARED_KEY", // optional, default "0000000000000000000000000000000000000000000000000000000000000000"
115
+ "keepAlive": 0, // optional, default 0
116
+ "allowedIPs": ["0.0.0.0/0"] // optional, default ["0.0.0.0/0", "::/0"]
117
+ }
118
+ ```
119
+
120
+ > `endpoint`: address
121
+
122
+ Server address, required.
123
+
124
+ URL:Port format, e.g., `engage.cloudflareclient.com:2408`<br>
125
+ IP:Port format, e.g., `162.159.192.1:2408` or `[2606:4700:d0::a29f:c001]:2408`
126
+
127
+ > `publicKey`: string
128
+
129
+ Server public key, used for verification, required.
130
+
131
+ > `preSharedKey`: string
132
+
133
+ Additional symmetric encryption key.
134
+
135
+ > `keepAlive`: int
136
+
137
+ Heartbeat interval in seconds. Default is 0, meaning no heartbeat.
138
+
139
+ > `allowedIPs`: string array
140
+
141
+ Wireguard only allows traffic from specific source IPs.