Changelog¶
All notable changes to this project are documented here.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
Each major version line is a different implementation:
- 3.x — Tauri 2 + Rust + Svelte 5 (current,
main) - 2.x — Wails 2 + Go + Svelte 5 (
wails-versionbranch) - 1.x — Original Python implementation (
python-legacybranch)
Unreleased¶
3.1.4 - 2026-04-27¶
Fixed¶
- Windows CLI printing two stray
System error 1376 has occurred. / The specified local group does not exist.blocks before the capture result. Thenet localgroup Npcapprobe used to detect non-admin Npcap installs now silences its stdout/stderr (and usesCREATE_NO_WINDOWso the GUI build doesn't flash a console window).
3.1.3 - 2026-04-27¶
Changed¶
- LLDP capture results now combine Port ID and Port Description when both are present (
"1/1/1 (Duty PC)"). Previously only the description was shown when both existed, which hid the actual port number.
Fixed¶
- Windows ARM64 release build failing in CI:
pnpm/action-setup@v6writes broken.cmd.EXEsymlinks onwindows-11-armrunners. Pinned both workflows back topnpm/action-setup@v4until the upstream regression is resolved.
3.1.2 - 2026-04-27¶
Fixed¶
- Windows binary refusing to launch when Npcap isn't installed. The OS dialog
wpcap.dll was not foundappeared before the privilege-warning banner had a chance to render and direct users to the Npcap download.wpcap.dllis now marked as a delay-loaded import viabuild.rs, and pcap calls are gated onnpcap_installedso the app launches cleanly and shows the Download Npcap link instead.
Fixed¶
- Linux ARM64 release build failing with
xdg-open binary not found—ubuntu-24.04-armrunners ship a more minimal package set thanubuntu-latestand don't includexdg-utilsby default. Added it to the apt install step.
3.1.0 - 2026-04-26¶
Added¶
- Linux ARM64 release artifacts:
_arm64.deb,_aarch64.AppImage,.aarch64.rpm. - Windows ARM64 release artifact:
_arm64-setup.exe. - macOS Liquid Glass effect:
NSVisualEffectViewvibrancy material applied to the window via thewindow-vibrancycrate. - Per-OS card layouts that adopt each platform's surface conventions (macOS Tahoe, Windows 11 Fluent, GNOME Adwaita).
- iOS-style toggle switch for the "Only show interfaces with an IP" control.
- Refresh button next to the interface dropdown.
MTUfield in the captured-result display, parsed from LLDP's IEEE 802.3 Maximum Frame Size TLV.Switch Modelpopulated for LLDP from the System Description TLV (CDP already had it via Platform).install-cli.shanduninstall-cli.shstandalone scripts at the repo root for users who want only theportfinderCLI symlink without the BPF helper.- BPF helper installer (and the in-app Install BPF Access button) now creates
/usr/local/bin/portfinderautomatically so the CLI is callable from any shell. - New app icon: navy gradient with a metallic RJ-45 jack (Baudrun-style aesthetic).
- MkDocs documentation site at https://packetthrower.github.io/PortFinder/, deployed automatically on push to main.
- Status / tech badges in the README (release, downloads, CI, docs, platforms, Tauri/Rust/Svelte).
- macOS screenshot embedded in the README.
- Branch protection on
mainwith a CI rollup status check that lets docs-only PRs through while gating code changes on the full build.
Changed¶
- Native widget styling per platform — fonts, spacing, radii, button shapes track macOS / Windows / Linux native conventions.
- Window resized to 400×460 to fit the tightened layout.
- Card backgrounds inverted to gray-on-white in light mode (matching macOS Settings' surface convention).
- Protocol selector is now a dropdown matching the interface dropdown style (was a segmented control).
Fixed¶
- Wi-Fi capture on macOS:
BIOCPROMISC: Operation not supportednow triggers a fall-back to non-promiscuous mode instead of erroring out. - TypeScript field casing matched to Rust's serde camelCase output (
hasIp,switchIp,nativeVlan,voiceVlan) — previously the IP filter checkbox silently failed and capture-result fields appeared empty.
3.0.0 - 2026-04-26¶
Changed¶
- Complete rewrite from Wails 2 + Go to Tauri 2 + Rust. Frontend (Svelte 5 + TypeScript + Vite) is unchanged.
- Versioning switched from CalVer (
YYYY.M.D-PATCH) to SemVer. - Build system migrated from
Makefile+ NFPM + Wails CLI topackage.jsonscripts + Tauri's bundler.
Added¶
- Headless CLI mode — the same binary runs as a GUI when launched without args, or as a CLI with subcommands (
capture,list,privileges) when given any. Each supports--jsonfor scripting. - Hand-rolled CDP and LLDP parsers in Rust.
- Tokio-based capture cancellation with race-to-first across interfaces in sniff-all mode.
- macOS BPF helper installer rewritten in Rust (in-app Install BPF Access button, plus the standalone
PortFinder-BPF-*.pkg). - Per-platform privilege detection in Rust (
/proc/self/statuson Linux,/dev/bpf0+dseditgroupon macOS, Npcap registry + admin check on Windows). - macOS universal binary — the
.dmgruns on Apple Silicon and Intel from a single download.
2.x — Wails 2 + Go¶
The 2.x line lived as 2026.4.x[-PATCH] CalVer tags. Highlights, in rough order:
- Migrated frontend from React to Svelte 5.
- Added IP-only interface filter.
- Added platform-specific window sizing.
- Added macOS BPF helper installer (Go).
- Added Linux
setcap CAP_NET_RAWpostinstall via NFPM. - Added Windows Npcap detection.
- Reformatted release artifacts to include the version in their filenames.
Detailed history and source on the wails-version branch and its tags.
1.x — Python¶
v0.2.0(2021-01-18) — Windows EXE and Linux binaryv0.1.0(2021-01-07) — Initial Python script
Source on the python-legacy branch.