A passive macOS network monitor that unites two tools in one native app: per-app monitoring (which app connects where) + packet-level dissection (what's actually on the wire), with a correlation layer tying every captured packet back to its process. 100% passive — no NetworkExtension, no proxy, no HTTPS interception — so it runs alongside any VPN, proxy or filter without conflict. JA4 fingerprints, IPv4/IPv6 GeoIP map, threat flagging, and a desktop widget. Open source, Apache-2.0.
No reviews yetBe the first to leave a review for MatrixNet
Maker
📌
Hey Product Hunt 👋
I built MatrixNet because the two tools I always reached for never overlapped: Little Snitch tells you *which app* is connecting, and Wireshark shows you *what's on the wire* — but neither does both, and both sit inline.
MatrixNet does both in one native macOS app, and it's 100% passive: no NetworkExtension, no proxy, no HTTPS interception. It only reads kernel stats + a copy of each packet, so it runs happily alongside whatever VPN/proxy/filter you already use — zero conflict.
What's inside:
• Per-app connection monitoring + packet-level dissection, correlated so every packet maps back to its process
• JA4 TLS fingerprints, IPv4/IPv6 GeoIP world map, threat-list flagging
• Per-app history, a live menu-bar throughput readout, and a desktop widget
• Fully open source (Apache-2.0)
It's free and on GitHub. I'd love your feedback — especially on what you'd most want surfaced about your Mac's traffic. Happy to answer anything!
Report
Curious how this handles HTTPS without actually intercepting anything - does the JA4 fingerprinting mean you're still doing some TLS handshake inspection, or is the packet-level view limited to just the metadata and headers?
MatrixNet is strictly passive. It reads packets read-only off a BPF tap on Apple's PKTAP interface — it's never in the data path, so it can't (and doesn't) terminate, proxy, or decrypt a single TLS session.
JA4 is computed only from the ClientHello, which the client sends in the clear before any session key exists. So it's "handshake inspection" only in the sense of reading fields that were already plaintext: the offered TLS version, cipher suites, extensions, signature algorithms, and ALPN, plus whether SNI is present. That's exactly what the JA4 hash is built from — no key exchange is touched. (The SNI hostname itself is plaintext in the same ClientHello, which is how you get the destination name of an HTTPS flow with zero decryption.)
Everything after the handshake — the encrypted application data — stays fully opaque. For those records the packet view is exactly what you'd expect from passive capture: 5-tuple, direction, size, timing, and the TLS record framing — never the plaintext. So it's both at once: a handshake-derived fingerprint layered on top of pure metadata.
Report
finally something that shows the process and the raw packet on the same row, which is exactly what i wanted from little snitch without the nag popups. the passive approach actually working alongside my tunnel is a relief
The process-on-the-same-row part comes from Apple's PKTAP, which tags every packet with the PID that sent it at the kernel level, so attribution isn't a heuristic bolted on afterward — the process and the raw bytes arrive together.
The "no nag popups" bit is a direct consequence of being observe-only: there's no connection-approval hook anywhere, nothing to allow or deny, so nothing that can interrupt you. It watches; it never gates traffic.
And the reason it coexists with your tunnel instead of fighting it: MatrixNet uses zero NetworkExtension / content-filter / system-extension machinery. Tools that fight over your tunnel do so because they're trying to sit in the same packet-filter slot your VPN wants. MatrixNet just sits beside it and watches — it can even show you the per-app traffic inside the tunnel, without ever competing for the data path. Relieved that it's working for you 🙏
Curious how this handles HTTPS without actually intercepting anything - does the JA4 fingerprinting mean you're still doing some TLS handshake inspection, or is the packet-level view limited to just the metadata and headers?
@etinynylac4u
MatrixNet is strictly passive. It reads packets read-only off a BPF tap on Apple's PKTAP interface — it's never in the data path, so it can't (and doesn't) terminate, proxy, or decrypt a single TLS session.
JA4 is computed only from the ClientHello, which the client sends in the clear before any session key exists. So it's "handshake inspection" only in the sense of reading fields that were already plaintext: the offered TLS version, cipher suites, extensions, signature algorithms, and ALPN, plus whether SNI is present. That's exactly what the JA4 hash is built from — no key exchange is touched. (The SNI hostname itself is plaintext in the same ClientHello, which is how you get the destination name of an HTTPS flow with zero decryption.)
Everything after the handshake — the encrypted application data — stays fully opaque. For those records the packet view is exactly what you'd expect from passive capture: 5-tuple, direction, size, timing, and the TLS record framing — never the plaintext. So it's both at once: a handshake-derived fingerprint layered on top of pure metadata.
finally something that shows the process and the raw packet on the same row, which is exactly what i wanted from little snitch without the nag popups. the passive approach actually working alongside my tunnel is a relief
@betlf4xj
The process-on-the-same-row part comes from Apple's PKTAP, which tags every packet with the PID that sent it at the kernel level, so attribution isn't a heuristic bolted on afterward — the process and the raw bytes arrive together.
The "no nag popups" bit is a direct consequence of being observe-only: there's no connection-approval hook anywhere, nothing to allow or deny, so nothing that can interrupt you. It watches; it never gates traffic.
And the reason it coexists with your tunnel instead of fighting it: MatrixNet uses zero NetworkExtension / content-filter / system-extension machinery. Tools that fight over your tunnel do so because they're trying to sit in the same packet-filter slot your VPN wants. MatrixNet just sits beside it and watches — it can even show you the per-app traffic inside the tunnel, without ever competing for the data path. Relieved that it's working for you 🙏