Release Notes
Added
- Bilingual UI (English/Persian) with full RTL. Header language toggle
(persisted, html[dir/lang] applied pre-paint), Vazirmatn webfont,
logical-property sweep, LTR-isolated data tokens. Pro panel fully
translated (~120 keys).
- Beginner mode upgrades: candidates-to-test knob alongside find-target,
copy → share-sheet → .txt export fallback chain, honest stop-overshoot
hint ("a few extra working IPs may land after the target").
- Pro mode additions: ranges list-file import (server-grammar
validated, bare IPs classified per mode), AmneziaWG noise editor over the
pasted wgconf (plain INI or awg:// base64 URI round-trip, Off/Light/
Heavy presets, constraint validation per the 2026-08-23 research), and
Skip-to-Phase-2 — cancels phase 1 mid-scan and verifies the banked
candidates via phase2_only, with a low-yield suggestion badge.
- WARP verify mode completes a full WireGuard session. Verify probes
now finish the cryptographic handshake under the user's keypair AND push
an encrypted DNS query through the tunnel, passing only on a data reply —
shape-only replies cannot tell a dummy-key handshake from a real one.
Discovery stays shape-only; verified scans badge their results.
- Client-side validator module (
ui/src/lib/validators.ts) mirroring
the server grammar: inline field errors gate both scan start and profile
save; pasted endpoint/CIDR lists normalize on blur (blank and duplicate
lines dropped); the ranges importer classifies with the same rules.
- Results-table UX: tri-state
aria-sort headers, 44 px touch targets,
bulk-copy live region, skeleton rows, filtered/true-empty states, and a
render cap for very large scans.
- Grammar fixture (
tests/fixtures/grammar-cases.json) pinning
CIDR/endpoint/SNI parsing for the server tests and the UI mirror.
Fixed
- UI phase-2 starts were rejected (422). The form sent lowercase
fragment presets (off) while the API contract is Off/Light/… —
every UI-initiated phase-2 scan failed before it began. The form now maps
to the wire form (saved profiles keep loading) and fragment errors route
to the fragment field.
- Pasting a wgconf now auto-enables real-keypair verification (previously
only the file-import path did), so verify-mode scans are never silently
run with the dummy key.
- Mode flip no longer wipes restored port selections on hydration or
cross-mode profile loads; each import button targets its own field;
failed stop/cancel requests surface in the UI; ETAs humanize past 60 s.
Fixed
- SSE
/api/events no longer closes idle connections after replaying the
previous run's terminal: a browser EventSource held open between scans used
to reconnect-storm (connect -> replay -> close -> reconnect) and could miss
the next run entirely. A replayed terminal is now context only; the stream
ends on the next run's live terminal or an unrecoverable lag. Graceful
shutdown additionally bounds its wait (5 s grace) so deliberately-open idle
streams can never hang process exit.
Fixed
- Stale validation message. "Fix the highlighted fields to continue."
no longer lingers after the user corrects the field — the message clears
live while typing and stays cleared after Next.
- Forward tab clicks were silently swallowed until validation passed.
Tabs now navigate freely in both directions; validation errors paint on the
target step when it is shown.
- Mode switch kept the previous mode's default port (e.g. 2408 carried
into CDN mode). The wizard now shows an inline amber warning when a custom
port differs from the mode default and never silently rewrites custom
values; untouched defaults still auto-correct (443 ↔ 2408).
- Rate stat showed "0/s" when idle. The rate is now hidden whenever no
scan is running and appears only during a live scan.
- "URIs" download option was offered when nothing could be exported
(WARP mode without configs). The option is now disabled in that state.
- Heading hierarchy: "Generate WARP config (optional)" was an H4 under an H2
(skipped H3); it is now an H3.
Install cf-scanner 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/qmahyar/cf-scanner/releases/download/v0.7.0/cf-scanner-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/qmahyar/cf-scanner/releases/download/v0.7.0/cf-scanner-installer.ps1 | iex"
Download cf-scanner 0.7.0