v1.0 live Now in the Chrome Web Store

Make sense of every
GraphQL request your app makes.

A Chrome devtools sidepanel that captures every request to /graphql, parses operations, and puts the Authorization header one click away.

Add to Chrome — it's free
A Apollo +
u urql +
R Relay +
H Hasura +
Acme · Invoices
app.acme.dev/invoices
Acme
DashboardInvoicesCustomersSettings
Invoices
12 invoices · $48,230 outstanding
CustomerInvoiceAmountStatus
Linear Studioinv_8a91cc$248.00Paid
Acme Coinv_8a91cb$1,820.00Open
Demo Teaminv_8a91ca$420.00Overdue
Northwindinv_8a91c9$96.00Paid
Globexinv_8a91c8$3,200.00Paid
GraphPeek
10 captured · 2 errors
Filter operations…
All10
Queries6
Mutations3
Errors2
Pinned
Q GetCurrentUser 200 84ms
M CreateInvoice 200 287ms
Q SearchCustomers 200 318ms
M UpdateInvoice 403 52ms
Q GetDashboardMetrics 200 612ms
M CreateInvoice 200 287ms
data.createInvoice.id "inv_8a91cc"
Headers3
Copied Auth
Copy All
authorizationBearer eyJhbGciOiJIUzI1NiIs…
content-typeapplication/json
x-apollo-opCreateInvoice
Query7 lines
Copy
mutation CreateInvoice($input: CreateInvoiceInput!) {
createInvoice(input: $input) {
id
status
amountCents
}
}
Variables1 key
{ "input": { "customerId": "cus_8421", … } }

Everything you need to debug
your GraphQL traffic.

// The problem

Every GraphQL request hits the same URL. DevTools doesn't know what you're looking at.

× DevTools · Network 5 requests
Filter All Fetch/XHR JS CSS
NameStatusMethodTypeTime
graphql 200POSTfetch84 ms
graphql 200POSTfetch142 ms
graphql 200POSTfetch287 ms
graphql 403POSTfetch52 ms
graphql 200POSTfetch318 ms
Which one was CreateInvoice? Open each one, expand the payload, parse JSON, find the operation name. Repeat.
GraphPeek Recording
Q GetCurrentUser 200 84ms
Q ListInvoices 200 142ms
M CreateInvoice 200 287ms
M UpdateInvoice 403 52ms
Q SearchCustomers 200 318ms
M MarkAsPaid 200 178ms
Q GetInvoiceById 200 96ms
Operation name, type, status and timing — at a glance. Click any row to see headers, variables and response.
// Features

Built for how you actually debug.

01 · favorite

Copy the Bearer token
without unfolding JSON.

One button. Auth header lands on your clipboard, ready to paste into curl, Postman, or your shell.

$ curl localhost:4000/graphql \
-H "Auth: $(pbpaste)" ✓ pasted
Headers 3
Copied Auth
Copy All
authorizationBearer eyJhbGciOiJIUzI1NiIs…
content-typeapplication/json
x-apollo-opCreateInvoice
Authorization copied
02

Operations,
not URLs.

Reads the body to extract operation name and kind. Color-coded by type.

POST /graphql
Q GetCurrentUser
M CreateInvoice
S InvoiceUpdates
03 · alert

Errors and slow queries
surface themselves.

Red edge on 4xx/5xx, amber over 500ms, red over 1s. No noise, just signal.

Q ListInvoices 200
M UpdateInvoice 403
× UNAUTHORIZED · missing scope
Q GetDashboardMetrics 612ms
04

Pin to keep visible.

The operation you're debugging stays on top while new traffic streams beneath.

M CreateInvoice
Q ListInvoices
Q SearchCustomers
M MarkAsPaid
05

Filter & search.

Type to filter by operation name. One-tap chips for only the kind you care about.

create
All 2 Queries 0 Mutations 2
M CreateInvoice
M CreateCustomer
06 · privacy

100% local.
Zero outbound calls.

Captured requests stay in memory, scoped to the tab. No server, no telemetry — by design.

Browser
BLOCKED
No server
// 30 seconds

From install to first capture.

01

Add to Chrome

From the Chrome Web Store. No sign-up, no config file, no API key.

GraphPeek
Developer tools · v1.0
Add to Chrome
02

Open the sidepanel

Click the toolbar icon, or hit a shortcut, to pin it beside your app.

app.acme.dev
or press I
03

Use your app

Any request matching /graphql appears, parsed and ready.

Captured
Live
Q GetCurrentUser 200
M CreateInvoice 200
Q SearchCustomers 200
M MarkAsPaid 200
// Privacy

Nothing leaves your browser.
Ever.

Captured requests live in memory, scoped to the active tab. No background sync, no analytics, no auth tokens shipped to a server. We can't see your traffic — by design.

No network calls
No storage
No telemetry
What it does
Reads GraphQL requests
From the tab you're using, while you're using it.
Shows them in a sidepanel
Parsed and grouped — that's it.
What it never does
Send anything to a server
Zero outbound network calls.
Store data after the tab closes
Everything lives in memory only.
// FAQ

Questions, answered.

Does it require a config file or schema? +
No. The extension reads operation names directly from the request body. It works with any GraphQL endpoint as long as the URL contains /graphql and the POST body has a query field.
What about subscriptions over WebSockets? +
Yes — graphql-transport-ws and graphql-ws connections are captured as subscriptions, with the event count visible in the row preview.
Does it work on localhost? +
Yes. Any port, any protocol, any local domain. localhost:4000/graphql works the same as production.
Will my auth tokens be sent anywhere? +
No. The extension makes zero outbound network calls. Everything you see in the sidepanel stays in your browser's memory, scoped to the tab it came from.
What permissions does it need, and why? +
webRequest to observe network traffic, sidePanel for the UI, and <all_urls> read-only — needed because we don't know which domain your endpoint lives on.
How much does it cost? +
Free. No tier, no paywall, no account required. If that changes, existing installs stay free.

Debug GraphQL like
it's 2026.

Free, forever. Add it once and forget you installed it.

Add to Chrome — it's free