github.com/vernette/warpscout
v0.14.0
#3063 most downloaded on Go modules
vernette/warpscout
What this package is like to depend on
Last release 11 days ago
13 Aug 2026
Ships on a steady schedule
a new release about every 9 days
Some releases are documented
notes for 10 of 21 stable releases
Nothing withdrawn
no release was ever pulled
1 months old
23 releases · first in 2026
23 releases in the last 12 months
see the full history below
Release timeline
23 releases · Jul 2026 to Aug 2026Releases
latest 23-
v0.14.013 Aug 2026Release notes
Open source →The live TUI now knows the terminal size and says more while a scan runs.
- the feed and the node panel are sized to the terminal window, and no longer
push the header and the finished phases off screen fgives the feed the whole window,nexpands the node panel past its cap- the progress bar carries working/torn/node counts and elapsed time; a finished
phase says how long it took - the feed and the node panel go once the run is done, the console tables and
the report already repeat them - plain (non-TTY) output prints scan progress instead of going quiet for minutes
Commits
- feat: print scan progress in plain output mode (
deb82ac) - fix: put the elapsed time after the bar counters (
a27ba70) - perf: insert into the live feed instead of resorting it (
1ea0796) - feat: show elapsed time on the bar and the phase lines (
0d9503e) - feat: show working, torn and node counts next to the bar (
3560411) - fix: drop the node panel with the feed, the report prints Nodes too (
efb319b) - fix: drop the live feed once the console tables repeat it (
09b8bb2) - fix: keep the feed at 12 rows unless f expands it (
ecb1904) - feat: add f and n to expand the live feed and the node panel (
7be820e) - feat: size the live scan feed to the terminal window (
68d2035) - feat: show every region and node found so far during the scan (
9cb078b)
- the feed and the node panel are sized to the terminal window, and no longer
-
v0.13.413 Aug 2026Release notes
Open source →ENDPOINT PINGwas wrong on any host without unprivileged ICMP sockets:
the raw socket sees every reply on the host, and the matcher only checked
the sequence number, so a parallel scan mixed endpoints' replies together.
Measured on OpenWrt: a Frankfurt endpoint 41ms away reported 6-32ms and a
2ms one reported 0.09ms. Now the source address has to match too.- the latest-version check caches its answer in the temp dir instead of
~/.cache, which on OpenWrt is the flash overlay.
Commits
-
v0.13.313 Aug 2026Release notes
Open source →Six bug fixes, four of them reported and two of them fixed by @v14d4n.
scan -conf FILEnow exits non-zero when the config cannot be written,
instead of printing the failure and exiting 0 (#6)-bestand-conf -are rejected as a pair: both write a machine-readable
artifact to stdout, and together they produced a config no client can
import (#7)-n 0and-n -1are a usage error instead of silently scanning every
address of every pool (#8)registerno longer treats an unreadable or malformed account file as an
absent one, so a rotation cannot turn into a fresh registration that
overwrites it --freshstill replaces it deliberately (#5)- the per-subnet table sorts subnets with no endpoint below working ones,
where a synthetic 0% loss used to float them to the top (#9) - a failed
masque-h2scan says the network blocks MASQUE instead of
suggesting-gen-i1, which does not apply to it (#10)
Commits
- fix: return the no-endpoint failure from printBest instead of exiting inside it (
3eea39c) - fix: stop register from overwriting an account file it could not read (closes #5) (
b2903f2) - fix: reject -best together with -conf - instead of mixing them on stdout (closes #7) (
1daaacc) - fix: sort the picks table by status before loss (closes #9) (
9f6ebae) - fix: tell a failed masque-h2 scan the same thing as masque (closes #10) (
85f193a) - fix: reject a nonpositive -sample instead of widening the scan (
a78d29a) - fix: fail the scan when a requested -conf cannot be written (
430a8a1) - ci: refetch the annotated tag before reading its body (
6be5efb)
New Contributors
Full Changelog: v0.13.2...v0.13.3
-
v0.13.3-0.20260811161703-6be5efba91b811 Aug 2026 pre-releaseNothing published for this version
-
v0.13.211 Aug 2026Release notes
Open source →Fixed a full scan being OOM-killed on small hosts, and cut what the
scan spends on CPU and on waiting.- the Go runtime is capped at 32MiB, so
scan -fno longer gets
OOM-killed on a ~1 GB VPS - every wg/awg tunnel now uses the batch-1 bind: same results, 11x
less CPU on a full scan (304s -> 28s) - phase 1 probes addresses in parallel - on a network where nothing
answers, its worst case drops from ~22 minutes to 3m39s - the host ping burst goes out at once: an endpoint that ignores ICMP
costs one -timeout instead of three - the handshake poll backs off from 2ms instead of ticking at a flat
50ms, so a live endpoint is confirmed in ~7ms instead of ~51ms
Commits
- perf: back off the handshake poll instead of a flat 50ms tick (
a346aa5) - perf: resolve the meta address without a global lock (
6557ecf) - perf: send the host ping burst at once and match replies by sequence (
b414d42) - perf: probe phase 1 addresses in parallel instead of one at a time (
9e1c446) - perf: give every wg tunnel the batch-1 bind, not conn.NewDefaultBind (
58c7551) - fix: cap the Go runtime at 32MiB so a full scan is not OOM-killed (
6668e26) - ci: lead the release notes with the annotated tag body (
b71edc5) - ci: leave docs commits out of the release notes (
899590c)
- the Go runtime is capped at 32MiB, so
-
v0.13.111 Aug 2026Release notes
Open source →Android has no
/etc/resolv.conf, the only file Go's own resolver reads, so
every lookup failed withconnection refusedandregisterhad nothing left
to try - not the direct API call, not the relay, not the tunnel fallback.
warpscout now reads Termux's ownresolv.conf, falling back to 8.8.8.8.Commits
- fix: resolve DNS on Android, where there is no /etc/resolv.conf (
77e70f4)
- fix: resolve DNS on Android, where there is no /etc/resolv.conf (
-
v0.13.011 Aug 2026Release notes
Open source →Android is a release target now, and every command tells you when a new
release is out.android/arm64in the release matrix, cross-built with no NDK;install.sh
detects Termux and installs into$PREFIX/bin- every command but
versionchecks GitHub for a newer release first, cached
for 6h registergrew a relay fallback (direct -> relay -> WARP tunnel), so it
works on a network that blocks the Cloudflare API-port Npins one port for the whole scan - the only way to compare ports,
since a normal run mixes them across endpoints- the
socksexit row no longer says the country twice
Commits
- refactor: keep the version cache as a single file in the cache dir (
620fce4) - feat: check for a new release on startup (
c882667) - docs: mention the registration relay in both READMEs (
a203ca1) - feat: add a relay fallback to register (
e39e5a4) - feat: print the macOS quarantine hint in install.sh (
220dd06) - docs: mention the Android build in both READMEs (
d2f5390) - feat: detect Termux in install.sh and install into $PREFIX/bin (
f68b50e) - ci: build android/arm64 in the release matrix (
61e6a32) - fix: strip the path termux-exec injects into argv on Android (
558e6f8) - docs: mention censorcheck alongside ipregion in the socks section (
84e03ef) - docs: cover masque as a third protocol and refresh the account file layout (
ece832a) - fix: stop repeating the country in the socks exit row (
52dc225) - docs: reflow the markdown tables in both READMEs (
9569909) - docs: document -port in both READMEs (
0684de2) - feat: add -port to pin one port for the whole scan (
8930cbc) - ci: skip the test run for workflow-only changes (
0b8e3c3) - ci: skip the test run for the release and docker workflows (
4997d3f) - ci: keep only the commit list and New Contributors in release notes (
dc88f38)
-
v0.12.1-0.20260809160256-0b8e3c3bb87309 Aug 2026 pre-releaseNothing published for this version
-
v0.12.009 Aug 2026Release notes
Open source →Commits
- docs: document the exclude filters in both READMEs (
4cb718a) - feat: add -exclude-node and -exclude-country (
f0b0878) - feat: give the console table a row per node, not just per subnet (
8fcd9bd) - feat: name the chained mihomo proxies after their place in the chain (
3c86a5f) - docs: document the two-interface -through config in both READMEs (
916c51b) - feat: write both tunnels of the chain into the native -through config (
adf4998) - docs: document the chained mihomo config in both READMEs (
6df3ba0) - feat: render the whole chain in the mihomo config under -through (
eb02781) - docs: document socks in both READMEs (
0621fe0) - feat: add socks to serve one endpoint as a local SOCKS5 proxy (
a142752) - docs: document scan -through in both READMEs (
50251ce) - feat: add scan -through to nest one WARP tunnel inside another (
290aa1f) - feat: carry both address families inside the WireGuard tunnel (
e2e0361) - feat: keep the WARP device's own IPv4 and IPv6 from registration (
bdce03d) - docs: document the wider MASQUE v6 pools in both READMEs (
57adc0c) - feat: add the second MASQUE v6 block, 103:: and 104:: (thanks @t-e-s-tweb) (
6d3b891) - docs: drop -jt, justify 8MiB (
4b63d49) - docs: document GOMEMLIMIT for OOM kills in both READMEs (
9381c18)
New Contributors
Full Changelog: v0.11.1...v0.12.0
- docs: document the exclude filters in both READMEs (
-
v0.11.108 Aug 2026Release notes
Open source → -
v0.11.008 Aug 2026Release notes
Open source →Commits
- ci: skip the test workflow on doc-only changes (
e102a95) - docs: document find-sni -p in both READMEs (
12e3bbe) - feat: let find-sni search an SNI for either MASQUE transport (
d30063d) - refactor: name the mihomo proxy after the protocol instead of the endpoint (
634115e) - docs: document masque-h2 in both READMEs (
83c9410) - feat: add -p masque-h2, CONNECT-IP over TCP with real endpoint pools (closes #3) (
4281051)
Full Changelog: v0.10.0...v0.11.0
- ci: skip the test workflow on doc-only changes (
-
v0.10.006 Aug 2026Release notes
Open source →Commits
- docs: document -speed in both READMEs (
f53a3af) - feat: add -speed to measure endpoint throughput after the scan (
2a03132) - refactor: extract nodePicks and the feed capping helpers for reuse (
8dafee7) - refactor: hoist the bubbletea program out of runScanUI into runWithUI (
7303a35) - docs: document find-sni in both READMEs (
0dc8c3f) - feat: add find-sni to search a MASQUE SNI that gets through (
5c7aa92) - perf: bound the stalled MASQUE dial with quic-go's idle timeout (
3ac583c) - docs: add a release downloads badge to both READMEs (
4bc8231) - docs: document install.sh and the version command in both READMEs (
42e3abe) - feat: add install.sh for Linux, macOS and OpenWrt (
5e30e8d) - feat: add a version command, with the tag injected at build time (
35c4ea2)
Full Changelog: v0.9.0...v0.10.0
- docs: document -speed in both READMEs (
-
v0.9.006 Aug 2026Nothing published for this version
-
v0.8.104 Aug 2026Nothing published for this version
-
v0.8.003 Aug 2026Nothing published for this version
-
v0.7.030 Jul 2026Nothing published for this version
-
v0.6.027 Jul 2026Nothing published for this version
-
v0.5.027 Jul 2026Nothing published for this version
-
v0.4.025 Jul 2026Nothing published for this version
-
v0.3.023 Jul 2026Nothing published for this version
-
v0.2.121 Jul 2026Nothing published for this version
-
v0.2.021 Jul 2026Nothing published for this version
-
v0.1.021 Jul 2026Nothing published for this version