Files
chuan 096e70fe54 feat: add a zero-install web UI for easy over an extracted engine
- extract the headless search out of `easy` into an engine that
  measures the baseline, resolves the target, and drives the
  producer/consumer loop, so the CLI and web share one search
- make `State` fully observable — structured discovery feed, run phase,
  baseline/target, and final outcome — and render the same snapshots two
  ways: the in-place terminal panel and an SSE stream
- serve a small embedded page (HTML/JS/Pico baked in via include_str!)
  on a hand-rolled hyper service: POST /api/run runs one search at a
  time, GET /api/events streams live snapshots as JSON until it settles
- open the UI on a bare invocation (double-clicked binary); `web` with
  --host/--port/--no-open controls it explicitly
- bump to 0.2.0
2026-06-26 10:51:23 +08:00

36 lines
1.0 KiB
TOML

[package]
name = "fast-xray"
version = "0.2.0"
edition = "2024"
rust-version = "1.85"
description = "Fast Cloudflare IP optimizer for CDN-fronted Xray/VLESS nodes."
[dependencies]
anyhow = "1"
bytes = "1"
clap = { version = "4", features = ["derive"] }
console = "0.15"
futures = "0.3"
http-body-util = "0.1"
hyper = { version = "1", features = ["http1", "server"] }
hyper-util = { version = "0.1", features = ["tokio"] }
indicatif = "0.17"
ipnet = "2"
rand = "0.8"
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
rustls = { version = "0.23", default-features = false, features = ["ring", "std", "tls12", "logging"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["io-util", "macros", "net", "rt-multi-thread", "time"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring", "tls12", "logging"] }
tokio-tungstenite = "0.24"
url = "2"
uuid = "1"
webpki-roots = "0.26"
[profile.release]
opt-level = 3
lto = "thin"
codegen-units = 1
strip = true