mDNS TUI Browser hrzlgnm
winget install --id=hrzlgnm.mdns-tui-browser -e Cross platform TUI mdns-browser written in rust, vibe coded with opencode free model
winget install --id=hrzlgnm.mdns-tui-browser -e Cross platform TUI mdns-browser written in rust, vibe coded with opencode free model
A terminal-based mDNS service browser built with Rust, using ratatui for the TUI interface. For an alternative running as a desktop app, check out mDNS-Browser.

cargo run
cargo build --release
You can install mdns-tui-browser from the Arch User Repository (AUR) using yay:
# Install using yay
yay -S mdns-tui-browser
This will install the latest version from the AUR and handle updates automatically with your regular system updates.
You can install mdns-tui-browser from Winget Packages using winget:
# Install using winget
winget install hrzlgnm.mdns-tui-browser
This will install the latest version from Winget Packages and handle updates automatically with your regular system updates.
# Show version
mdns-tui-browser --version
mdns-tui-browser -V
# Show help
mdns-tui-browser --help
mdns-tui-browser -h
# Disable debouncing of flapping services
mdns-tui-browser --no-debounce
# Browse explicit service types, instead of auto-discovery
mdns-tui-browser --service-types "_http._tcp.local.,_ssh._tcp.local."
mdns-tui-browser -s "_printer._tcp.local."
# Browse with shortened service types (auto-completed)
mdns-tui-browser -s "_http,_ssh"
mdns-tui-browser -s "http,ssh"
mdns-tui-browser -s http -s ssh
# Browse without debouncing (for debugging flapping services)
mdns-tui-browser --no-debounce
# Use specific network interfaces
mdns-tui-browser -i en0
mdns-tui-browser --interfaces en0,eth0
# Disable IPv4 or IPv6 mDNS discovery
mdns-tui-browser --no-ipv4
mdns-tui-browser --no-ipv6
# Load state from a JSON file (view-only mode, no browsing)
mdns-tui-browser --load-state state-dump.json
mdns-tui-browser -l state-dump.json
--service-types/-s)Service types to browse for (e.g., http, _http._tcp, printer). Auto-completes (_)service, (_)sub, .(_)[tc|ud]p and .local. suffix.
Usage:
http, _http._tcp, printerThe application can export the complete current state to a JSON file for debugging and analysis purposes, and can also load a previously exported state file for inspection.
Press Ctrl+J in the TUI to trigger a state dump. The file will be saved with an ISO timestamp filename:
20260207T120102.089898-state-dump.json
To load a previously exported state file for inspection (view-only mode, no browsing):
mdns-tui-browser --load-state state-dump.json
mdns-tui-browser -l state-dump.json
When loading a state file, no mDNS browsing is performed. The border color changes to a darker color to indicate view-only mode.
The exported JSON contains comprehensive information about the current application state:
{
"metadata": {
"dumpTimestamp": "2026-02-07T00:40:10.950885Z",
"applicationName": "mdns-tui-browser",
"version": "1.11.1"
},
"services": [
{
"host": "my-device.local",
"serviceType": "_http._tcp.local.",
"addresses": ["192.168.1.100"],
"port": 8080,
"txtRecords": ["path=/api"],
"isOnline": true,
"createdAt": "2026-02-07T11:30:00.123456Z",
"updatedAt": "2026-02-07T12:00:00.123456Z",
"lastOnlineAt": "2026-02-07T12:00:00.123456Z",
"sessionHistory": [
{
"startTime": "2026-02-07T00:39:53.820969Z",
"endTime": "2026-02-07T00:39:55.869714Z"
}
]
}
],
"serviceTypes": ["_http._tcp.local.", "_ssh._tcp.local."],
"metrics": {
"daemon_browse": 160,
"daemon_cache_refresh_addr": 0,
"daemon_cache_refresh_ptr": 0,
"daemon_cache_refresh_srv_txt": 0,
"daemon_cached_addr": 45,
"daemon_cached_nsec": 14,
"daemon_cached_ptr": 74,
"daemon_cached_srv": 42,
"daemon_cached_subtype": 1,
"daemon_cached_txt": 42,
"daemon_dns_registry_active": 0,
"daemon_dns_registry_name_change": 0,
"daemon_dns_registry_probe": 0,
"daemon_dns_registry_timer": 0,
"daemon_known_answer_suppression": 0,
"daemon_timer": 5607,
"service_types_discovered": 31,
"services_discovered": 38,
"services_marked_offline": 4,
"services_updated": 14
},
"filters": {
"query": "",
"activeServiceTypes": ["_http._tcp.local."]
},
"sorting": {
"field": "Host",
"direction": "Ascending"
}
}
When in filter mode (activated with /):
The quickfilter supports special keywords for filtering by service status:
online - Shows online services AND services containing "online" in any field (fullname, host, service type, TXT records, etc.)offline - Shows offline services AND services containing "offline" in any field (fullname, host, service type, TXT records, etc.)ONLINE, Online, offline, OFFLINE all workonline http shows online services with "http" in text fieldsExamples:
# Press '/' then type:
online # Show online services + services with "online" in text
offline # Show offline services + services with "offline" in text
online http # Show online HTTP services
offline printer # Show offline printer services
ONLINE # Case-insensitive works
online offline # Shows all services (both keywords present)
The application is built with:
This project follows a Safe Rust Only policy:
unsafe blocks are permitted in the codebasesrc/
āāā main.rs # Entry point with CLI argument handling
āāā tui_app.rs # Main TUI application logic
āāā popup.rs # Popup UI components (help, metrics)
āāā scroll.rs # Scroll state management
āāā models.rs # Data models
āāā terminal.rs # Terminal management
The project uses Cargo for building:
cargo run - Run the TUI applicationcargo build --release - Build optimized release versionStarting from Release 1.6.0, all release assets include cryptographic build provenance attestations generated by GitHub Actions. This provides verifiable evidence that the binaries were built from the official source code repository.
Build provenance is a cryptographically signed attestation that answers:
You can verify the authenticity of release assets using the GitHub CLI:
# Using GitHub CLI
gh attestation verify mdns-tui-browser--Linux-x86_64.tar.gz --repo hrlzgnm/mdns-tui-browser
This ensures that the binaries you download are authentic and haven't been tampered with.
Starting from Release 1.6.0, all release binaries are built with cargo-auditable, which embeds detailed dependency information directly into the executable. This provides additional security benefits:
Auditable builds embed a complete dependency tree in JSON format within the binary, enabling:
The cargo auditable command builds your application with additional metadata:
You can audit any release binary to verify its dependencies:
# Install required tools
cargo install cargo-audit
# Extract and audit dependencies from a release binary
cargo audit bin path/to/mdns-tui-browser
Release builds use auditable builds by default:
cargo auditable build --releasecargo build --release for performanceThis ensures that every release binary can be independently verified for security compliance and supply chain integrity.
MIT License