Skip to content

Releases: harodggg/xray-wasm

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 08:18
14ba709

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:0d591e78700df0997af16380641cbaa39189523a63fb4e38f09291a923534d67

同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。

客户端:本地 SOCKS5 → REALITY 隧道

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

服务端:REALITY 入站(k3s 用)

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm server \
  --listen 0.0.0.0:8443 \
  --private-key <xray x25519 的 PrivateKey> \
  --short-ids <hex> \
  --server-names <伪装域名> \
  --dest <同一个域名的 host:port> \
  --users <uuid>

全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。

互操作(四种组合都通)

客户端 服务端 结果
官方 Xray(v2rayN / 小火箭 / xray 二进制) 本工程 wasm 服务端 flow: "xtls-rprx-vision" 直接可用
本工程 wasm 客户端(默认,带 Vision) 官方 Xray 服务端
本工程 wasm 客户端(默认,带 Vision) 本工程 wasm 服务端
本工程 wasm 客户端 --no-flow 本工程 wasm 服务端

不认识的 flow 名仍会被明确拒绝,不会静默降级。
--no-flow(或 XT_NO_FLOW=1)只在「对端只认空 flow」时需要 ——
它同时关掉 flow 声明和客户端侧 Vision 分帧,两者必须同进同退
(只关一半会得到「连上了但数据是坏的」)。

客户端 ClientHello 指纹伪装(v0.7.0 新增)

客户端默认不再发那个「1 个 cipher、无 GREASE」的最小 ClientHello,而是按
profile 组装,默认 chrome:cipher 列表、扩展集合、GREASE 模式、
GREASE ECH、ALPS、默认 ALPN 都对齐官方 Xray fingerprint: chrome 的形状
(权威对照是仓库里一份真实抓到的官方 ClientHello)。

# 默认就是 chrome;要关掉伪装用 plain
--fingerprint chrome | plain        # 或 XT_FINGERPRINT
XT_CHECK=1 …                        # 自检里可见生效 profile 与 ALPN

判据是可计算的(全部在 CI 里常态化跑):JA4 与官方夹包全等
逐字段差分只剩已声明的偏差;另有「真机裸 TCP 探针」证明线上字节确实是
浏览器形状(chrome:16 cipher / 18 扩展 / 含 ECH 与 ALPS / ALPN h2+http/1.1)。

能力边界(请按这个理解,不要当成「完整 Chrome 指纹」):

  • 只对齐可观测字段。真 Chrome 会声明 X25519MLKEM768 并带上它 1216 字节的
    key_share,我们两者都不发 —— 声明了却不提供对应 key_share 会触发对端
    HelloRetryRequest(RFC 8446 §4.1.1),而本实现不支持 HRR,握手会直接失败
    (实测 5/5 命中)。
  • 因此纯 X25519 是真实的密码学降级:不具备抗「先存后解」的后量子性。
  • ECH 只是 GREASE 占位(不是真 ECH,也不能解密);形状等价于
    「PQ 尚未默认开启的 Chrome」,版本年代假设未验证。
  • 真 Chrome 的 JA3 每次连接都不同(扩展顺序被打乱),所以我们同样按连接
    随机化扩展顺序 —— 否则「JA3 恒定」本身就是一个真 Chrome 没有的跨连接标签。
  • 不改变 TLS 之外的特征(包长分布、时序、SNI、DNS),也不改证书链。
  • 细节与残余风险:docs/fingerprint-plan.mddocs/fingerprint-security.md

服务端 XTLS-Vision(v0.6.0 新增)

服务端现在双向实现了 XTLS-Vision 流控(解帧 + 组帧),官方客户端
flow: "xtls-rprx-vision" 经本服务端取真实网页拿到 HTTP 200:

[server] ts=… dir=in sni=www.cloudflare.com ver=26.3.27 target=example.com:443 \
         outcome=Forwarded dur_ms=1022 up_bytes=578 down_bytes=4894

两个关键语义(都写进了单测,改回去立刻变红):

  • 收到对端的 DIRECT 只切读侧,写侧必须继续组帧直到我们自己发终止帧;
  • DIRECT 帧的 padding 走完之前不能去读内层(否则会拿裸字节喂外层 TLS)。

服务端可观测性

一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):

[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
         ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
         dur_ms=1320 up_bytes=585 down_bytes=4867

配置自检(不监听,只打印生效配置并退出):

XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server

⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测 exit(2)/exit(42) 都得到 1)。
--check 的契约可观察到的只有 0 / 非 0;写成 == 2 的断言在宿主上过、
在 wasm 上必红。

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.7.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.7.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.7.0 server

部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.6.0...v0.7.0

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 12:29
bd06ef0

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:8466fd0d6084215c2cb2ddf653650b140c2268b607f8bc2e1972e07a76487956

同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。

客户端:本地 SOCKS5 → REALITY 隧道

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

服务端:REALITY 入站(k3s 用)

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm server \
  --listen 0.0.0.0:8443 \
  --private-key <xray x25519 的 PrivateKey> \
  --short-ids <hex> \
  --server-names <伪装域名> \
  --dest <同一个域名的 host:port> \
  --users <uuid>

全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。

互操作(四种组合都通)

客户端 服务端 结果
官方 Xray(v2rayN / 小火箭 / xray 二进制) 本工程 wasm 服务端 flow: "xtls-rprx-vision" 直接可用
本工程 wasm 客户端(默认,带 Vision) 官方 Xray 服务端
本工程 wasm 客户端(默认,带 Vision) 本工程 wasm 服务端
本工程 wasm 客户端 --no-flow 本工程 wasm 服务端

不认识的 flow 名仍会被明确拒绝,不会静默降级。
--no-flow(或 XT_NO_FLOW=1)只在「对端只认空 flow」时需要 ——
它同时关掉 flow 声明和客户端侧 Vision 分帧,两者必须同进同退
(只关一半会得到「连上了但数据是坏的」)。

服务端 XTLS-Vision(本版新增)

服务端现在双向实现了 XTLS-Vision 流控(解帧 + 组帧),官方客户端
flow: "xtls-rprx-vision" 经本服务端取真实网页拿到 HTTP 200:

[server] ts=… dir=in sni=www.cloudflare.com ver=26.3.27 target=example.com:443 \
         outcome=Forwarded dur_ms=1022 up_bytes=578 down_bytes=4894

两个关键语义(都写进了单测,改回去立刻变红):

  • 收到对端的 DIRECT 只切读侧,写侧必须继续组帧直到我们自己发终止帧;
  • DIRECT 帧的 padding 走完之前不能去读内层(否则会拿裸字节喂外层 TLS)。

服务端可观测性

一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):

[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
         ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
         dur_ms=1320 up_bytes=585 down_bytes=4867

配置自检(不监听,只打印生效配置并退出):

XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server

⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测 exit(2)/exit(42) 都得到 1)。
--check 的契约可观察到的只有 0 / 非 0;写成 == 2 的断言在宿主上过、
在 wasm 上必红。

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.6.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.6.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.6.0 server

部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.5.2...v0.6.0

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 15 Sep 17:23

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:aa6cd6650cf936b9f13a5a07987d8651e418a380a210b1221c05499fe6df2292

同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。

客户端:本地 SOCKS5 → REALITY 隧道

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

服务端:REALITY 入站(k3s 用)

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm server \
  --listen 0.0.0.0:8443 \
  --private-key <xray x25519 的 PrivateKey> \
  --short-ids <hex> \
  --server-names <伪装域名> \
  --dest <同一个域名的 host:port> \
  --users <uuid>

全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。

互操作(哪两端、要不要 --no-flow

客户端 服务端 结果
官方 Xray(v2rayN / 小火箭 / xray 二进制) 本工程 wasm 服务端 ✅ 配置里 flow 必须留空
本工程 wasm 客户端(默认) 官方 Xray 服务端
本工程 wasm 客户端 --no-flow 本工程 wasm 服务端
本工程 wasm 客户端(默认带 Vision) 本工程 wasm 服务端 ❌ 被明确拒绝,不静默降级

--no-flow(或 XT_NO_FLOW=1)同时关掉 flow 声明和客户端侧 Vision 分帧。
只关一半会得到「连上了但数据是坏的」—— 两者必须同进同退。

服务端侧 XTLS-Vision 尚未实现:带非空 flow 的请求会被明确拒绝
reason 里会写清客户端该怎么改。

服务端可观测性

一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):

[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
         ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
         dur_ms=1320 up_bytes=585 down_bytes=4867

配置自检(不监听,只打印生效配置并退出):

XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server

⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测 exit(2)/exit(42) 都得到 1)。
--check 的契约可观察到的只有 0 / 非 0;写成 == 2 的断言在宿主上过、
在 wasm 上必红。

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.5.2
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.5.2
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.5.2 server

部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.5.1...v0.5.2

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 15 Sep 15:11

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:2c8550c6aaccd79e78ed1b2e1ec2c66391695e360ee5db7160a064d5ab8c93f0

同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。

客户端:本地 SOCKS5 → REALITY 隧道

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

服务端:REALITY 入站(k3s 用)

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm server \
  --listen 0.0.0.0:8443 \
  --private-key <xray x25519 的 PrivateKey> \
  --short-ids <hex> \
  --server-names <伪装域名> \
  --dest <同一个域名的 host:port> \
  --users <uuid>

全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。

互操作(哪两端、要不要 --no-flow

客户端 服务端 结果
官方 Xray(v2rayN / 小火箭 / xray 二进制) 本工程 wasm 服务端 ✅ 配置里 flow 必须留空
本工程 wasm 客户端(默认) 官方 Xray 服务端
本工程 wasm 客户端 --no-flow 本工程 wasm 服务端
本工程 wasm 客户端(默认带 Vision) 本工程 wasm 服务端 ❌ 被明确拒绝,不静默降级

--no-flow(或 XT_NO_FLOW=1)同时关掉 flow 声明和客户端侧 Vision 分帧。
只关一半会得到「连上了但数据是坏的」—— 两者必须同进同退。

服务端侧 XTLS-Vision 尚未实现:带非空 flow 的请求会被明确拒绝
reason 里会写清客户端该怎么改。

服务端可观测性

一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):

[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
         ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
         dur_ms=1320 up_bytes=585 down_bytes=4867

配置自检(不监听,只打印生效配置并退出):

XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server

⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测 exit(2)/exit(42) 都得到 1)。
--check 的契约可观察到的只有 0 / 非 0;写成 == 2 的断言在宿主上过、
在 wasm 上必红。

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.5.1
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.5.1
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.5.1 server

部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.5.0...v0.5.1

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 12:34

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:fb4a52bb4c4dd97c9aa0541969638b2029dc475d77b4c2ab48b7d7276fda3932

同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。

客户端:本地 SOCKS5 → REALITY 隧道

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

服务端:REALITY 入站(k3s 用)

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm server \
  --listen 0.0.0.0:8443 \
  --private-key <xray x25519 的 PrivateKey> \
  --short-ids <hex> \
  --server-names <伪装域名> \
  --dest <同一个域名的 host:port> \
  --users <uuid>

全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。

互操作(哪两端、要不要 --no-flow

客户端 服务端 结果
官方 Xray(v2rayN / 小火箭 / xray 二进制) 本工程 wasm 服务端 ✅ 配置里 flow 必须留空
本工程 wasm 客户端(默认) 官方 Xray 服务端
本工程 wasm 客户端 --no-flow 本工程 wasm 服务端
本工程 wasm 客户端(默认带 Vision) 本工程 wasm 服务端 ❌ 被明确拒绝,不静默降级

--no-flow(或 XT_NO_FLOW=1)同时关掉 flow 声明和客户端侧 Vision 分帧。
只关一半会得到「连上了但数据是坏的」—— 两者必须同进同退。

服务端侧 XTLS-Vision 尚未实现:带非空 flow 的请求会被明确拒绝
reason 里会写清客户端该怎么改。

服务端可观测性

一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):

[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
         ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
         dur_ms=1320 up_bytes=585 down_bytes=4867

配置自检(不监听,只打印生效配置并退出):

XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server

⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测 exit(2)/exit(42) 都得到 1)。
--check 的契约可观察到的只有 0 / 非 0;写成 == 2 的断言在宿主上过、
在 wasm 上必红。

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.5.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.5.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.5.0 server

部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 10:19

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:0bab8c0a41f8910c1eafaebb3586b1a1c61ed06362be4b8c43a178f7bd16f992

同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。

客户端:本地 SOCKS5 → REALITY 隧道

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

服务端:REALITY 入站(k3s 用)

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm server \
  --listen 0.0.0.0:8443 \
  --private-key <xray x25519 的 PrivateKey> \
  --short-ids <hex> \
  --server-names <伪装域名> \
  --dest <同一个域名的 host:port> \
  --users <uuid>

全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。

客户端 flow 必须留空:服务端侧 XTLS-Vision 尚未实现,
带非空 flow 的请求会被明确拒绝(不是静默降级)。

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.4.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.4.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.4.0 server

部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 07:14
049a369

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:c0f114e7d58797fa81b4ad9cc999f112d0786af7fa3b65c4678a56c959bfbbc0

直接运行 wasm 模块

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.3.0
ghcr.io/harodggg/xray-wasm:latest

部署清单与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 06:40
d08339e

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:0f7f6c41d50ee884ad9c990118f7f0a1b2f1695df6de79aed3de01b4c175782b

直接运行 wasm 模块

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.2.0
ghcr.io/harodggg/xray-wasm:latest

部署清单与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 03:13
f462ca7

产物

文件 说明
xt-wasm-cli.wasm wasm32-wasip2 模块(wasmtime 直接可跑)
xt-wasm-cli.wasm.sha256 上述文件的 SHA-256

wasm 模块 SHA-256:2017196b5aebf14877815e7c5a9f961e909768052116c1cd83a02bae5450d424

直接运行 wasm 模块

wasmtime run -C cache=n \
  -S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
  xt-wasm-cli.wasm \
  --server <ip:port> --pbk <公钥> --sid <shortId> \
  --sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080

四个 -S flag 缺一不可。尤其 inherit-network=y 缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y 是安全相关的:缺了它,凭据无法通过环境变量传入。

容器镜像(k8s)

ghcr.io/harodggg/xray-wasm:v0.1.0
ghcr.io/harodggg/xray-wasm:latest

部署清单与安全须知见仓库 deploy/k8s/

校验

sha256sum -c xt-wasm-cli.wasm.sha256

Full Changelog: https://github.com/harodggg/xray-wasm/commits/v0.1.0