Your First Capture
Import a capture, open a session, and read the workspace.
This walkthrough takes a packet capture from disk to an inspected request: import, parse, find the session in the workspace, and open a request in the inspector. It assumes Traffic Jam is already running — see /docs/en/getting-started/installation/ for setup.
Import a capture
Open the Captures tab (sidebar → Capture group, or press ⌘/Ctrl+1, or g then c). The Import panel accepts three kinds of input:
- Import files — pick one or more captures and keylogs.
- Import folder — pick a directory; captures and keylogs inside are paired automatically (exact base-name match first, then a single keylog in the same directory).
- Drag and drop anywhere in the window — files are detected by extension.
| Kind | Recognized extensions |
|---|---|
| Packet captures | .pcap, .pcapng, .cap, .pcap.gz, .pcapng.gz |
| TLS keylogs (NSS format) | .sslkeylog, .keylog, .keys, .log, .txt |
| Browser exports | .har |
Keyboard equivalents: u chooses files, Shift+u chooses a folder, n opens manual pairing (assign a keylog to a capture by hand), i imports the manual pairs, and Shift+d clears all captures. A toast summarizes the result (N captures imported, N HAR imported) and reports failures per file.
What happens on import
The backend parses captures in-process with gopacket — capture bytes and key material are never passed to a child process, and TShark is not required for import. For each capture it:
- Reassembles TCP streams and reconstructs HTTP/1 and HTTP/2 request/response exchanges, keeping ordered headers, body previews (gzip, deflate, brotli, and zstd content-encodings are decoded), and per-exchange timing.
- Decrypts supported TLS 1.2/1.3 sessions using key material from the attached NSS keylog file or from a pcapng Decryption Secrets Block (DSB) embedded in the capture itself; both sources are merged.
- Extracts TLS ClientHello fingerprints (JA3/JA3-full, JA4/JA4r, SNI, ALPN, cipher suites, extensions) and server certificates.
- Persists the parsed session in SQLite (default
.traffic-jam/traffic-jam-v2.sqlite3, override withTRAFFIC_JAM_DB_PATH), so imported sessions survive API restarts.
HAR files follow the HAR 1.2 schema and import as sessions the same way, minus packet-level TLS data.
[!NOTE] Some traffic cannot be recovered from a packet capture. If the parser sees QUIC/HTTP3 flows it warns that QUIC cannot be decrypted with TLS keylogs — disable QUIC/HTTP3 in the client and re-capture. WebSocket upgrade handshakes are detected and flagged, but WebSocket message frames are not decoded yet.
The workspace layout
The window is a fixed shell with a left sidebar and a content area:
- Sidebar — tabs grouped into Capture (Captures, Browser capture, Android), Analysis (API lab, Timeline, Compare, TLS), and Tools (Workbench). Each tab has a
⌘/Ctrl+Naccelerator and ag-sequence (for exampleglfor Timeline). The sidebar footer holds Bookmarks, Shortcuts, Settings, and the theme toggle; it collapses to an icon rail. - Backend status banner — appears at the top only when the API health check fails (“Backend unavailable”) with a Retry button.
- Context bar — names the active tab and its purpose.
- Status bar — bottom of the window; shows per-session load progress while capture details load, with cancel, retry, and exclude controls.
The Timeline tab (⌘/Ctrl+5) is where you read a session: a request list ordered by time with a search box (“Search host, path, headers…”), method/status/protocol/host/stream filters, and a single-capture or side-by-side compare view with Baseline and Candidate capture pickers. Live capture controls (which require mitmdump, tshark, Chrome, and a capture interface) are covered in /docs/en/capture/; the analysis tabs built on top of imported sessions are covered in /docs/en/analysis/.
Open a request
In the Timeline, move the selection with j/k (or arrow keys) and press Enter to open the request inspector dialog. It shows the full exchange: start line, ordered request and response headers, decoded request/response bodies, packet trace, and the attached TLS fingerprint. From the dialog you can:
- switch detail sections with
1–8; - step through the filtered list with the previous/next arrows;
- bookmark the request (bookmarks are collected in the sidebar Bookmarks panel,
gk); - set the request as Compare Baseline or Candidate, or open its matched pair in the Compare tab;
- jump to the TLS fingerprint view for the exchange.
Press Esc to close. Credential-bearing headers and sensitive values are masked by default; revealing them shows a “Captured secrets are visible” banner and display access expires after 15 minutes. Replays and exports always require their own separate opt-in.
[!TIP] Press the Shortcuts button in the sidebar (or open the Keyboard shortcuts dialog) for the full searchable list — it includes Timeline keys
/(focus search),r(reset filters),f(more filters),v(single/compare view),s(swap baseline and compare),a/m(set baseline/candidate from selection), andp(open matched pair in Compare).
[!WARNING] Traffic Jam is for authorized testing of systems you have permission to test. Captures may contain live credentials and session tokens; keep capture files and the SQLite database on machines you control.