The desktop half of PacketCircle Native: conversation topology, live capture, native Decode, and one-click handoff to Wireshark — built in Swift/SwiftUI.
PacketCircle macOS is the desktop half of PacketCircle Native — a Swift/SwiftUI rewrite of the ideas behind the original open-source PacketCircle Wireshark plugin. It shares PacketCircleCore with the iOS app: open a PCAP/PCAPNG (or capture live), see who’s talking to whom, spot rough TCP health, and drill into a conversation — all without shipping Wireshark or a GPL dissection stack.
A capture visualizer built around conversation topology (the circle), a sortable pair table, rate/quality gauges, and a native packet Decode window. Desktop-native: Decode opens in its own window, live capture from local interfaces, replay of a capture at original timing, and one-click handoff to Wireshark when you need its full dissector depth. Proprietary — not open source.
On macOS 1.2.x: Expert Alerts, Compare Conversations, Sanitize Capture, Generate Report, Map, and tunable Settings — see §16, below.
PacketCircle is not a desktop Wireshark. It contains no open-source Wireshark / libwireshark dissection. Decode is native and best-effort: solid IP/TCP/UDP detail and some application-layer recognition, not dissector-for-dissector parity with Wireshark. TCP session-quality grades are a native heuristic — explicitly labeled “not Wireshark tcp.analysis” wherever shown. When you need full dissector depth, Open in Wireshark hands the capture off with the current display filter already copied.
| Step | Action |
|---|---|
| 1 | Open PacketCircle.app (Tech Preview DMG). |
| 2 | Open Capture… (⌘O) to load a PCAP/PCAPNG, or Demo Mode to just look around. |
| 3 | For live traffic, Interfaces… (⇧⌘I) instead. |
| 4 | Explore Circle → Table → Gauges from the view-options bar; open Decode (⇧⌘D) for packet-level detail. |
Before anything is loaded, the main window offers the same four entry points directly on the canvas:

Empty state — Open Capture, Interfaces, Demo Mode, and Replay, all one click away.
The window is a single split view: a sidebar (pair list + protocol legend) on the left, and the active display mode (Circle / Table / Gauges) on the right, with a two-row toolbar above.

Circle view with Demo Mode loaded. Loading a capture adds a second toolbar row for export, reset, report, external-open, and close.
The protocol legend at the bottom of the sidebar lists every protocol seen in the capture in two columns; click one to filter, and where the list is long a Show all link expands it.
| Control | Shortcut | Role |
|---|---|---|
| Open | ⌘O | Open a PCAP/PCAPNG file |
| Interfaces | ⇧⌘I | Choose a local interface and start a live capture |
| Transport controls | — | Start / pause / resume / stop the current live capture or replay |
| Export | ⌘S | Save Capture As… |
| Reset | — | Clears selection, protocol filter, and manual direction overrides. Fills accent-orange when there’s something to clear, disabled otherwise. |
| Report | — | Generate a session report |
| Open externally | — | Hand the capture off (e.g. to Wireshark) |
| Close | ⇧⌘W | Close Capture — clear the session |
| Decode | ⇧⌘D | Open the Decode window |
| Control | Options | Role |
|---|---|---|
| Top N | 10 / 25 / 50 | How many conversations the Circle shows |
| Layout mode | layers / cloud icons | Display grouping |
| Display mode | Circle / Table / Gauges | Switch the main canvas |
| Address mode | globe / node-graph icons | IP vs MAC pairing |
| Edge color | palette icon | Color arcs by protocol category, or by native TCP session-quality grade |
| Line weight | waveform icon | Toggle traffic-volume line thickness |
The pair list mirrors what’s on the circle, filtered by the protocol legend. Selecting a row highlights it orange and highlights the matching arc on the circle.

Selecting a conversation highlights both the sidebar row and the matching arc.
Hosts sit on a ring as hexagonal nodes; each conversation is an arc, colored and weighted per the view options above. One-way traffic is dotted with an arrowhead; two-way traffic is a solid line.
| Gesture | Effect |
|---|---|
| Pinch / scroll | Zoom |
| Drag | Pan |
| Click an arc | Select the conversation — opens the connection popup |
| Click a node | Select that host’s busiest conversation |
| Right-click an arc | Context menu |
| Right-click a node | Restart capture · host · Copy BPF · host · Select station |
Floating canvas controls (top-right): a search field (IP, CIDR, or name), fit-to-screen, rearrange, a Hosts toggle, and Reset.

Restart capture · this conversation / · src / · dst · Follow TCP Stream · Copy Wireshark Filter · Copy BPF Filter · Select.
Selecting a conversation opens a floating popup with a real triage panel for that pair — not just an address summary.

TCP session health, handshake RTT, and ACK round-trip quality charts, right next to the packet counts.
| Section | Contents |
|---|---|
| Header | Endpoints, packet/byte totals, directional split, protocol badge, direction (both/one-way) |
| TCP session health | Grade (Excellent/Good/Fair/Poor) and score, response time, window size & range, retransmits, RST count, zero-window count, SYN/FIN count, TCP packet count. Footer note: “Native TCP estimate — not Wireshark tcp.analysis.” |
| Quality charts | Handshake RTT (SYN → SYN/ACK), and an ACK-round-trip sparkline with median/min/p95/max labels |
| Packet size | Average packet size for the pair |
Actions: Copy Filter · Decode (filtered to this pair) · Follow TCP Stream · Wireshark · Save Session… (save just this conversation as its own file). Closing the popup also clears the selection, so the sidebar row and circle arc stop being highlighted.
A sortable table of the same Top-N pairs, with real analysis columns rather than just addresses.

Source, Destination, Ports, Pkts, Bytes, Protocol, Quality (grade + score), Issues (R:n Z:n), Window, plus RTT/health columns.
A dashboard of rate gauges and distribution charts: arc gauges for packets/s, bytes/s, and errors/s (labeled “Session average” on a static capture, “Instantaneous” with a live sparkline during capture/replay), plus Top Talkers and Top Protocols bar charts.

Rate gauges, Top Talkers, and Top Protocols.
Decode opens in its own window (⇧⌘D, or the toolbar Decode button) so you can keep the Circle in view while reading packets.

Filter chips, packet list, expandable protocol tree, and synced hex dump.
| Area | Contents |
|---|---|
| Header | Capture name, frame count and layer range (e.g. “660 frames · L2–L7”), text/hex search, Reload |
| Filter chips | One per protocol seen — click to filter, ⌘-click for multiple |
| Packet list | #, Time, Source, Destination, Flags, Ports, Proto, Len, Message |
| Protocol tree | Expandable frame detail down through the recognized application layer |
| Hex dump | Byte-for-byte view of the selected frame, synced to the tree selection |
Open it filtered to one conversation via Decode in the connection popup, or unfiltered via the toolbar/⇧⌘D for the whole capture.
An in-window modal (not a separate window) that reassembles one TCP flow’s payload bytes.

Client/server bytes color-coded, with direction and format controls.
| Control | Options |
|---|---|
| Direction | Entire conversation · Client → Server · Server → Client |
| Format | ASCII · Hex · Hex + ASCII |
| Actions | Copy · Open in Wireshark… |
Interfaces… (⇧⌘I) opens a sheet listing local interfaces (native, live rates via dumpcap) with a traffic sparkline and packets/s per interface.

Interface list, optional BPF filter, Promiscuous / Hide idle toggles.
macOS may ask for your password once per reboot to allow packet capture — not again when you stop. Once running, the status line reads e.g. ● CAPTURING · en0 · 292 pkts · 34 pairs, and Gauges switch to Instantaneous readings with live sparklines.

Live capture — footer reminds: “All traffic — Save to keep · right-click pair/node to filter.”
Right-click actions on the circle (Restart capture · this conversation / · host) restart the live capture with a BPF filter scoped to just that traffic.
Demo Mode loads a bundled sample capture — the fastest way to see the app populated without your own PCAP; every screenshot in this manual uses it. Replay (⌥⌘R) replays an already-open file at its original inter-frame timing, so arcs and gauges animate the way they would live. Stop (⌘.) ends it and returns to the static full-file view.
Settings has three tabs: Display, Decode, and Colors.

Host names toggle and quality grade-band selector.
| Setting | Purpose |
|---|---|
| Show host names | Prefer shortened DNS / mDNS / LLMNR / NetBIOS names on the Circle, Talkers list, and connection popup. Addresses still drive filters and Decode regardless. |
| Grade bands | Lenient (more sessions look healthy) · Balanced (default) · Strict (only clean sessions look Excellent). Changes only the color bands, not the underlying 0–100 score. |
Monospace font picker with live preview, and a 9–20pt size slider — applies to the Decode packet list, protocol tree, and hex dump.
Per-protocol color overrides for the Decode window, with a Reset All to restore defaults.
Open in Wireshark… — from the toolbar, the connection popup, or Follow TCP Stream — hands the current capture (or filtered view) off to a locally installed Wireshark, with the equivalent display filter already copied to the clipboard. Disabled if Wireshark isn’t installed.
| Shortcut | Action |
|---|---|
| ⌘O | Open Capture… |
| ⌘S | Save Capture As… |
| ⌥⌘S | Save Capture to Downloads |
| ⇧⌘I | Interfaces… |
| ⌥⌘D | Demo Mode |
| ⌥⌘R | Replay · Original Speed |
| ⇧⌘D | Decode |
| ⇧⌘P | Pause / Resume (live capture only) |
| ⌘. | Stop (live capture or replay) |
| ⇧⌘W | Close Capture |
| ⌘, | Settings |
| ⌘Q | Quit |
⌘O to open a file (or Demo Mode). On Circle, skim arcs; switch edge color to Quality to spot Fair/Poor sessions. Click an arc for the connection popup, or open Table for a sortable list with quality/issue columns.
Edge color → Quality; look for orange/red arcs, or sort Table by Quality. Click the arc → connection popup → read TCP session health and the quality charts. Follow TCP Stream for payload, or Decode for frame-by-frame detail. Save Session… to keep just this conversation. Reset clears the selection once you’re done.
⇧⌘I → pick an interface, optionally set a BPF filter → Start Capturing. Watch Circle/Gauges update live; right-click a conversation → Restart capture · this conversation to narrow the live capture to just that traffic. ⇧⌘P to pause and inspect, ⌘. to stop and analyze the full trace.
Select a conversation (or none, for the whole capture). Open in Wireshark… from the toolbar, the popup, or Follow TCP Stream — the display filter is copied automatically.
The macOS app shares PacketCircleCore with iOS, plus desktop chrome: multi-window Decode/Compare, live capture, Map, Pro tools, and Expert Alerts. Positioning is unchanged: not Wireshark, proprietary native analysis, no telemetry.

Circle view with the Expert Alerts strip (App / L4+ / L3 / DLC) and quality bar.
| Step | Action |
|---|---|
| 1 | Open a capture (File → Open…) or the demo from Help / empty state. |
| 2 | Use Circle (hosts / services), Gauges, Map, and the Pairs sidebar. |
| 3 | Click an edge for Connection details; use Decode, Follow TCP Stream, Compare…, or Wireshark as needed. |
| 4 | Tools / toolbar: Decode, Sanitize Capture…, Generate Report…. |
| 5 | PacketCircle → Settings… for quality, Expert, Sanitize, Report, Decode, Colors. |
Live capture (where entitled) and save options remain available from the Capture / File menus.

Expert Alerts browser popover — severity, summary, endpoints, and Suppress in the context menu.

Tools / toolbar cluster with the Pro actions: Sanitize, Report, Decode.
Left of the Circle: stacked chips App → L4+ → L3 → DLC. Counts are warnings and errors only.
| Band | Typical findings |
|---|---|
| App | HTTP 4xx/5xx, TLS alerts, SMTP/POP3/IMAP, FTP, DNS RCODEs, LDAP, Kerberos, SSH |
| L4+ | TCP quality / transport experts |
| L3 | ICMP unreachable / filtered / time-exceeded, IP TTL / fragment issues |
| DLC | True frame problems (demo includes intentional runts + giant). Normal short unpadded Ethernet frames are not counted as runts |
Use: Left-click a chip to filter conversations that have alerts in that band. Right-click a chip → Show … alerts… to browse hits; hover highlights the chord; click selects the pair (and the socket that raised the alert when ports are known). In the list, right-click a row → Suppress “…” to hide that message type from chips/lists. Re-enable under Settings → Expert.
The chip menu itself does not offer Suppress (browse only).
Below the conversation summary (when findings exist), an Expert section lists merged messages for this pair: capture App/L3/DLC alerts, TCP quality experts, and (when relevant) STP / topology alerts from the Map pass.

Connection details — Expert section with app / TCP findings.

Decode window — Expert Info plus TLS Alert Meaning on a failing handshake frame.
Decode is a separate window (packet list · tree · hex). Per-frame Expert Info can appear at the top of the tree; parent layers may show severity badges.
TLS Alert records:
bad_certificate), and a short Meaning.Suppressed Expert types are omitted from Decode annotations as well.
PacketCircle → Settings… panes include:

Settings → Expert — thresholds and suppressed alert types.
| Pane | Role |
|---|---|
| General / Quality | Host names, quality strictness bands |
| Expert | Retx % / zero-window thresholds; encrypted TLS alerts on the strip; STP in conversation Expert; suppressed alert types (Enable / clear all) |
| Sanitize / Report | Defaults for Sanitize Capture and PDF cover |
| Decode / Colors | Fonts, max frames, legend colors |

Generate Report — sample PDF output.

Example pages from a generated report: cover, IP communication matrix, TCP analysis.
Tools → Compare Conversations… (⇧⌘Y), or Compare… from Connection details. Side A is the reference; side B another edge or a second capture. The report covers MAC/IP (incl. TOS/DSCP), TCP setup, RTT, certificates, app/auth samples, and findings (RST, TLS alert, RTT gap, cert/SNI, auth).
⌘-click a second Circle edge first to pre-fill A and B.

Compare Conversations — findings plus side-by-side table.

Map view with STP / topology context.
Map view walks L2/L3 relationships. STP root-change / TCN-style signals can appear under conversation Expert. Clicking a node opens Connection details (MAC mode when needed for L2).
Decode has a display filter next to search, using Wireshark syntax for the protocols and fields PacketCircle actually decodes: tcp, tcp.port == 80, ip.addr == 10.0.0.1, http and tcp.flags.syn, chained with contains, and/or/not. Autocomplete offers only names from PacketCircle’s own catalog — unsupported names (ospf, wlan, tcp.stream) turn the field red and leave the packet list unfiltered rather than silently matching nothing.
tcp.analysis.* covers the native per-frame experts raised elsewhere in the app: retransmission, spurious retransmission, ACKed unseen segment, zero window, duplicate ACK. This is PacketCircle’s own analysis, not Wireshark’s engine — tcp.stream and out-of-order detection remain unavailable.
Generate Report’s Detailed and Field guide PDFs add an Expert messages section built from the capture-wide expert modules: type, description, counters, and sample nodes/pairs. Some findings are explicitly informational — present in the capture without proving a connectivity or performance problem (SPAN duplicates, traceroute TTL=1, jumbo frames, one-sided unanswered ARP, HTTP 404, encrypted TLS alerts, and similar).
Settings → Expert (Mac; iOS Options) adds sliders for thresholds that vary by LAN:
| Threshold | Applies to |
|---|---|
| ARP storm warning / error (who-has per second) | Expert Alerts + report — immediately |
| Unanswered ARP retry count | Expert Alerts + report — immediately |
| Giant-frame size | Next time the capture is analyzed (raise on jumbo/storage fabrics) |
| Endpoint retransmit % and zero-window count | Expert Alerts + report — immediately |
Two new Expert Alerts: ARP request storm (who-has burst per second) and ARP unanswered (retried who-has with no reply anywhere in the file).
The Circle toolbar gains an Experts mode after Top 10/25/50: it shows conversations carrying warn/error Expert Alerts instead of only the busiest (capped at 250). Solo an Expert Alerts band first to restrict which layer it draws from.
IGMP / MLD decode — group addresses, v1/v2/v3 queries and reports (source lists, INCLUDE/EXCLUDE), well-known multicast labels (SSDP, mDNS, all-systems).
TLS on HTTP alt ports — HTTPS on 8080 / 80xx / 8888 is labeled TLS when the payload is a TLS record; plaintext HTTP on those ports still shows as HTTP.
PCAP over IP (client) — PacketCircle connects out to a remote pcap stream (TCP@host:57012), the same convention Wireshark uses with -k -i TCP@host:port. The phone or Mac never sniffs its own Wi-Fi or cellular traffic — the other side must already be sending a PCAP stream, for example from the pcapoverip broker or PolarProxy. See PacketTools → PCAP over IP for the broker link and a small diagram of how it fits together.

iOS PCAP over IP — connect sheet and the resulting live capture on the Circle.
Payload NetFlow / syslog — custom collector ports (e.g. UDP 515) classify from the datagram, not only IANA 2055/514.
Richer mDNS — Bonjour service types, cache-flush / QU, additional A/AAAA.
Fixed in 1.2.4: live PCAP-over-IP no longer re-analyzes the whole file every second or re-packs the Circle ring; iOS remote-connect failures no longer look like a Files import error (invalid host/port is shown in the sheet); Options → PCAP over IP waits for Options to dismiss before presenting the connect sheet.
NetBIOS Name Service — queries, responses, name records and NBSTAT name tables; names also feed the host labels on Circle and Talkers.
NetBIOS Datagram and the Windows Browser protocol — \\MAILSLOT\\BROWSE host announcements and elections, shown in Decode and the Connection details Application preview.
Separate labels for NetBIOS-NS, NetBIOS-DGM and NetBIOS-SSN (ports 137–139) instead of one generic NetBIOS bucket.
Viewing one socket (for example HTTP on port 80) now shows only that service’s Expert findings and TCP health, plus host-wide L3 / DLC findings — not FTP, mail, or other services’ alerts from the same pair of hosts.
A new Other sockets list at the bottom of Connection details switches between sockets in one click, with a warning marker on the ones that have alerts. Whole conversation is one click away.
The same finding on two services of one conversation (for example HTTP 404 on :80 and :8080) is now listed per socket instead of merged into a single Expert Alerts row.
Kerberos findings only fire on Kerberos traffic (ports 88 / 464) — no more false alarms on unrelated TCP streams.
Jumbo / giant frame findings are based on the real on-wire frame size, not a reassembly artifact.
Reset always returns the Circle to the IP view, even after filtering on link-layer (DLC) alerts.
Show host names is on by default for new installs.