Skip to content

The inspector

The main window has a sidebar on the left, the traffic table at the top and the inspector underneath. Drag the divider to resize the inspector, and hide it when you want more room for the table.

  • All traffic.
  • By app, with each app’s hosts underneath.
  • Pinned apps and hosts, which you choose and which are remembered.
  • Sessions.

Counts next to each item ignore the filter bar. Choosing an item narrows the table, and the filter bar applies on top.

Each row is a request, with columns such as status, method, host, path, app, status code, content type, sizes, duration, start time, protocol (HTTP/1.1, HTTP/2, WebSocket or tunnel) and TLS state. You can sort and customize the columns.

The table stays responsive with more than 100,000 rows. If you scroll away from the newest rows, or select a row, the table stays put and shows how many new requests arrived. Jump back to the latest when you are ready.

Narrow the table by:

  • text in the URL,
  • method,
  • status class,
  • content type,
  • app, or
  • errors only.

Right-click a row to copy the URL, copy it as cURL, export it as HAR, enable SSL proxying for its host, or bypass the host. See Sessions and export.

Tab Shows
Overview Method, URL, status, app, protocol, sizes and any error.
Headers Request and response headers.
Query The query string as a table.
Cookies Cookies sent and set.
Body The request and response bodies, in a viewer that fits the content.
Raw The message as it looks on the wire.
Timing The phases Puffin can observe. Use the ⓘ button for what each phase means.
TLS Version, cipher, negotiated protocol and the server’s certificate chain. Use the ⓘ button for help on each field.
Messages For a WebSocket connection, each message with direction, type, size and time.

Puffin keeps bodies exactly as they were sent and decodes them only for display. It understands gzip, deflate, Brotli and zstd.

Viewers cover text, JSON (as a tree or pretty-printed), XML and HTML, URL-encoded forms, multipart, images and hex. Large bodies load as you open them, and you can search inside a body with the find bar.

Failures are shown instead of hidden: the upstream could not connect, TLS failed, the client gave up, or the request timed out. For HTTP/2, resets and GOAWAY frames are recorded as errors.

When a connection upgrades to WebSocket, Puffin passes the traffic through unchanged and shows each message in the Messages tab. Messages that were split into pieces are joined, and compressed messages are decompressed for display. If a stream stops looking like WebSocket, Puffin records an error and keeps passing the traffic through.