Skip to content

v6.4

Choose a tag to compare

@Armstain Armstain released this 17 Sep 10:14
· 33 commits to main since this release

Changelog

6.4

  • Added request replay: edit a captured request's method, URL, headers and body, then resend it from the page's own context so it carries real cookies and origin. Results include a Diff tab showing exactly what changed, using a line diff that trims the shared prefix/suffix first, so a multi-megabyte body with one changed field still diffs instantly instead of bailing out.
  • Added a saved sessions panel: captures now persist to IndexedDB as they arrive, so history survives closing the panel, navigating away, and closing the tab — previously it lived only in memory and was lost with the panel.
  • Added WebSocket and EventSource capture, both entirely invisible before now. Frames render nested under one row per connection with a live sent/received count, rate-limited to 60/sec so a chatty feed can't make the panel the performance problem it exists to find.
  • Added a Diagnostics panel (off by default, enable in Settings → Toolbar): failed requests, console errors, requests over 3s, and responses over 1MB — each a hard, measurable fact, with no guessing at what caused what. Click a finding to jump straight to its row.
  • The on-page toast now renders response bodies as a collapsible JSON tree instead of flat text, and repairs bodies truncated at the 200KB capture cap so a clipped response still renders structured. Added a "Locate in panel" button that scrolls to and opens the matching row in the side panel.
  • View storage is now opt-in like Diagnostics (Settings → Toolbar), and custom decoders moved from a toolbar icon into Settings — the toolbar was getting crowded.
  • Fixed the Diagnostics toggle silently doing nothing: an author display rule on .icon-btn was beating the browser's [hidden] stylesheet rule.
  • Fixed captures going missing after reloading the tab you're already watching. The panel only ever re-synced from the content script's buffer on tab switch, never on a same-tab reload, so a dropped message had nothing to fall back on until the panel itself was closed and reopened.
  • Fixed a live socket's frames silently going nowhere: its connection row could get evicted by ordinary request-count pruning on a busy page, or reused across a reload before its per-load frame counter reset.
  • Performance: capture no longer pays to clone full request/response bodies for a side panel that isn't open — sending backs off after a failed attempt and resumes the moment the panel is listening again. IndexedDB writes batch on a timer instead of opening a transaction on every 100ms flush.

6.3

  • Reworked the on-page toast into a full settings panel (gear icon): status-class and method chips, a slow-call threshold, URL substring/regex match, GraphQL mutations-only mode, dismiss timers, max stack size, corner position, dedupe toggle, response-body preview, presets, and a test-toast button to preview it without live traffic.
  • Method chips are grouped as Reads (GET, HEAD) and Writes (POST, PUT, PATCH, DELETE), with per-verb chips available behind a disclosure. Dropped the OPTIONS chip — a CORS preflight never reaches the patched fetch/XHR, so it could never have matched anything.
  • Fixed the toast silently missing network failures: a failed fetch carries no contentType, so the old content-type check alone would never catch a dead endpoint, a CORS block, or an offline request.
  • Toast is rendered in a shadow root, immune to page CSS. Repeated identical calls collapse into one toast with a ×N counter; the stack caps at a configurable size; clicking a toast expands it into a card with the pretty-printed response body and a copy button; Esc clears the stack.
  • Element inspector's CSS output is now grouped into collapsible categories (Position, Flex & Grid, Box Model, Typography, Appearance, Motion & Interaction, Other), matching how DevTools organizes computed styles.
  • Added a screen-wide colour eyedropper to the Page Styles panel (native EyeDropper API); the full colour list is now collapsed by default in favor of it.
  • Fixed the five drawer panels (inspect/palette/storage/decoders/settings) stacking on top of each other instead of one replacing another.
  • "Errors only" / "API only" / "Console logs" filter checkboxes now persist across sessions instead of resetting every time the panel opens.
  • Fixed the request-count badge showing the unfiltered total even when a filter hid every row, which looked identical to the capture having died. It now shows "N / total" when anything is hidden, with a distinct "no requests match this filter" empty state.
  • The request filter box now accepts a /regex/ pattern in addition to plain substring text.

6.2

  • Element inspector now reports the CSS the page actually authored, instead of ten fixed properties: every computed property is diffed against a pristine element of the same tag in an isolated frame, so browser defaults drop out.
  • Inspector output is a real CSS rule you can paste — grouped by concern, with four-sided longhands collapsed to shorthands (margin, padding, inset, border-radius, border) and inline colour swatches.
  • Inspector now updates live as you hover, rather than only on click; clicking locks the element so you can read it.
  • Added ::before / ::after styles, in their own collapsed section, skipped when no box is generated.
  • Added :hover / :focus / :active and other state rules, read from the page's stylesheets since a computed style cannot show a state that isn't active. Cross-origin stylesheets are fetched by the service worker and re-parsed, and any that stay unreadable are reported rather than silently omitted.
  • State rules carry their @media / @supports / @container conditions, and copy output wraps the rule in them.
  • Added an optional "Toast API calls" toggle: JSON/XML/GraphQL responses show a short-lived toast on the page itself, so calls are visible with the side panel closed.
  • Added a Page Styles panel: scans the page for every font stack and colour in use, with usage counts, a click-to-copy hex palette, and per-family sizes and weights.
  • Extracted CSS formatting and selector parsing into css-format.js, shared by the panel and the content script, with assertions in test_css_format.js.

6.1

  • Added a search box to the full-screen view, for searching within the currently open tab's content.

6.0

  • Added a full-screen view button (expand icon) next to the Response/Payload/Headers/Decoded tabs — opens the current tab's content across the entire side panel for reading large bodies.
  • "Console logs" filter is now off by default instead of on.
  • Fixed duplicate/mismatched rows appearing when a page reused the same XMLHttpRequest instance for multiple requests.
  • Fixed custom function decoders always failing under Manifest V3's Content Security Policy.
  • Extracted the decoder engine into its own decoders.js module (no user-facing change).
  • Fixed fetch response bodies being silently dropped, and SSE streams leaking memory over long-lived connections.
  • Fixed the element-picker overlay drifting out of place under CSS-transformed ancestor elements.

5.1

  • Fixed decoded URL parameters showing gibberish for plain path segments (e.g. online-signature) that only coincidentally matched the base64/base64url charset — the printable-output check let high-byte garbage through; now rejects it.
  • Replaced toolbar emoji/glyph icons with proper SVG icons (crosshair, database, sliders, pause/play, trash, close) for consistent rendering across OSes.
  • Restyled filter checkboxes (Errors only / API only / Console logs) to match the panel's dark theme instead of raw OS checkboxes; each now has its own accent color and hover/focus states.
  • Row expand/collapse, decoder-type toggle, and collapsible section arrows now animate instead of snapping instantly.
  • Added missing press/hover/focus feedback across several interactive elements (row headers, tabs, archived rows, form inputs).