Trust no wire -- including ours. Here's the proof.
Real-time network monitoring and threat detection for Windows. TrustNoWire watches every connection, every byte, and every process on your machine -- then shows you exactly what's happening.
Built with Tauri 2 (Rust backend) and React, it runs as a lightweight desktop app with packet capture, DNS logging, threat scoring, and Authenticode verification of every connecting process. Geo enrichment and VirusTotal scanning are opt-in — by default no remote-IP or file-hash data leaves your machine.
This source code is public so you can verify exactly what it does on your machine. A network monitor you can't audit is a network monitor you shouldn't trust.
| Expanded | Normal | Compact | Widget | Settings |
|---|---|---|---|---|
| Expanded | Normal | Compact | Widget | Settings |
|---|---|---|---|---|
| Expanded | Normal | Compact | Widget | Settings |
|---|---|---|---|---|
| Expanded | Normal | Compact | Widget | Settings |
|---|---|---|---|---|
| Expanded | Normal | Compact | Widget | Settings |
|---|---|---|---|---|
- Live Connection Table -- Every active TCP connection (IPv4) with process name, remote IP, port, country (when geo enabled), and Authenticode signature verification. UDP and IPv6 connection tables are planned for v1.1.
- Packet Capture -- Real-time bandwidth monitoring via Npcap (IPv4 and IPv6, TCP and UDP). Per-connection byte counters are decoupled from the display so refresh cycles don't drop in-flight increments. Live sparkline graph in the header.
- DNS Logging -- Captures DNS queries and responses (UDP/53) parsed off the wire, with response IPs and TTLs. Domain → IP cache is bounded (LRU, 10k entries) so long sessions don't leak memory.
- Threat Scoring -- 0-100 risk score per connection, factoring process trust (Authenticode signer, known-binary allowlist, safe-pairing rules), traffic ratios, port standardness, and hosting-provider reputation keywords.
- VirusTotal Integration (opt-in) -- Paste an API key in Settings to enable. Auto-scans the binary file (SHA256) of any connection scoring ≥ 30 against VirusTotal's file-reputation database; right-click any connection for an on-demand scan. The API key persists across restarts in
%APPDATA%/com.trustnowire.app/secrets.jsonand can be cleared from Settings. - Geo Enrichment (opt-in) -- Disabled by default. Toggle it on in Settings → Capture Engine to look up country, organization, and ASN for each remote IP via ipinfo.io over HTTPS. A 30-day rolling rate limiter caps lookups at 49,000 (free-tier safe) and pauses for an hour if reached.
- Widget Mode -- Win7-gadget-style micro dashboard (200x290) showing live stats, bandwidth graph, and top threats at a glance
- System Tray -- Minimize to tray with tooltip, left-click restore, right-click menu
- 5 Themes -- Iron Man, Stealth, Cyberpunk, Light, Matrix
- 3 Display Modes -- Compact, Normal, Expanded
- Frameless Transparent Window -- Custom title bar, draggable, always-on-top option
- Admin Elevation -- Release builds auto-request Administrator via UAC manifest for full network visibility
- Windows 10 or 11 (64-bit)
- Npcap installed (required for packet capture)
- Administrator privileges (for raw packet capture and full process visibility)
- Rust 1.77.2 or later
- Node.js 18 or later
- Npcap SDK -- extract to
%USERPROFILE%\npcap-sdk\(build.rs auto-detectsLib\x64\wpcap.lib) - Npcap runtime installed on the machine
cd trustnowire
npm install
npm run tauri buildThe MSI installer, NSIS installer (.exe), and standalone executable will be in src-tauri/target/release/bundle/.
Note: use
npm run tauri build(the canonical pipeline) for any release rebuild. Plaincargo build --releasefromsrc-tauri/does not always re-trigger the frontend embed step, which can produce a binary that loadslocalhost:5173instead of the bundled UI.
Code signing. Official LXB Studio releases are signed via Azure Trusted Signing. The build is wired through bundle.windows.signCommand in tauri.conf.json to invoke Sign-LxbFile.ps1; if AZURE_TENANT_ID, AZURE_CLIENT_ID, and AZURE_CLIENT_SECRET are present in the build environment, the bundler signs the inner exe, the MSI, and the NSIS installer automatically. Without those env vars, the script no-ops gracefully and the build produces unsigned artifacts — fine for local testing.
npm install
npx tauri devNote: tauri dev runs without admin elevation. Some features (raw capture of SYSTEM processes) require running as Administrator.
Both of these are opt-in. The app is fully functional without either — connection tracking, DNS log, threat scoring, packet capture all keep working.
- Create a free account at virustotal.com and copy your API key from your profile.
- Open TrustNoWire → Settings → VirusTotal Auto-Scan, paste the key, click SAVE.
- The key is persisted to
%APPDATA%/com.trustnowire.app/secrets.jsonand reloaded on launch. The Settings UI shows "Key saved" but never reveals the value back to the frontend; type a replacement to overwrite, or use CLEAR to remove. - Auto-scan is rate-limited to roughly 4 requests/minute (free-tier-safe) and only fires for connections scoring ≥ 30 on the threat meter. Manual scans (right-click → Scan with VirusTotal) bypass the auto-scan rate limit.
Disabled by default. To enable: Settings → Capture Engine → toggle "Enable geo lookup". When on, every uncached remote IP is sent to ipinfo.io over HTTPS. Disable any time to return to fully offline operation; previously cached country/org data stays available, but no new lookups fire.
If you'd rather not transmit IPs to ipinfo.io at all, MaxMind's offline databases work as a drop-in replacement (the geoip Cargo feature flag is reserved for this; full wiring is on the v1.1 roadmap):
- Download GeoLite2-City.mmdb and GeoLite2-ASN.mmdb from MaxMind
- Place them in the app data directory
- Build with
cargo build --features geoip(frontend still uses the same toggle)
TrustNoWire is built on the premise that you should know exactly what your network monitor does with your data. Here's the full picture.
The packet-capture engine opens the selected adapter in promiscuous mode. On a shared/Wi-Fi network this means the capture sees traffic destined for any device on the same broadcast domain — not just yours. DNS queries from a roommate's laptop on the same Wi-Fi can show up in the DNS log; their bandwidth contributes to the IN/OUT totals. On a switched/wired network this caveat doesn't apply (switches don't forward traffic to ports it isn't destined for).
Captured DNS data lives in memory only: a bounded LRU map (≤ 10,000 IP→hostname entries) plus a recent-queries log (≤ 500 entries). Nothing is written to disk and nothing is transmitted off the machine.
Disabled by default. When enabled in Settings, every uncached remote IP is sent to ipinfo.io over HTTPS to resolve country, organization, and ASN. ipinfo.io will see the list of remote IPs your machine connects to. A 30-day rolling counter caps lookups at 49,000 and pauses for an hour when reached.
Disabled until you paste a key into Settings. Once enabled, threat-flagged processes (score ≥ 30) are auto-scanned: TrustNoWire reads the binary, computes its SHA256, and queries https://www.virustotal.com/api/v3/files/{hash}. VirusTotal sees the hash and your API key — never the binary itself, never your IP-level connection data, never the destinations you contact. Your API key persists locally (%APPDATA%/com.trustnowire.app/secrets.json) and never round-trips back to the frontend.
- No telemetry. No analytics calls. No crash-reporting beacon. No first-run "phone home".
- No auto-update channel. Updates are manual — re-download a signed installer.
- No ads, no tracking pixels, no third-party SDKs. The only network calls TrustNoWire makes on its own are the two opt-in lookups documented above. Everything else you see in the connection list is traffic your other apps generated, which is the whole point.
The two opt-in network calls are the only routes any data leaves your machine. Verify it yourself — both call sites are at src-tauri/src/intel/geoip.rs and src-tauri/src/intel/virustotal.rs.
src-tauri/src/
analysis/ -- DNS parsing, process resolution (sysinfo + WMI fallback),
threat scoring. tls.rs is a stub (JA3 fingerprinting on the
v1.1 roadmap).
capture/ -- Npcap packet capture (IPv4 + IPv6, TCP + UDP). diff.rs queries
the OS connection table (TCP/IPv4 only today; UDP and IPv6
tables on the v1.1 roadmap). etw.rs is a stub.
intel/ -- GeoIP via ipinfo.io HTTPS, VirusTotal v3 client. asn.rs and
reputation.rs are stubs (offline ASN + IP reputation feeds
on the v1.1 roadmap).
models/ -- Connection, DnsEntry, ProcessInfo data structures
commands.rs -- Tauri IPC command handlers
state.rs -- Shared application state (atomic counters, LRU caches,
connection table, traffic counters decoupled from display)
lib.rs -- App setup, system tray, persistent-store init,
refresh-thread bootstrap
src/
components/ -- React UI components (Header, ConnectionList, ThreatLog, etc.)
hooks/ -- Data polling hooks (useConnections, useBandwidth, useDns)
utils/ -- Threat scoring, byte formatting, country codes
themes/ -- 5 color themes
See CHANGELOG.md for the per-release breakdown.
TrustNoWire is source-available under the Business Source License 1.1.
You can read, audit, and build the code for personal use. The license converts to MIT on 2030-02-09. See LICENSE.md for full terms.
Win 10/11 exe/msi installers @ TrustNoWire Built by LXB Studio LLC