Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
58de626
Enable alpha releases on `graphiql-6` (#4227)
trevor-scheer May 7, 2026
50e263e
Merge branch 'main' into graphiql-6
trevor-scheer May 8, 2026
3b919d5
Merge branch 'main' into graphiql-6
trevor-scheer May 8, 2026
e21fc3f
fix formatting after merge conflict resolution
trevor-scheer May 8, 2026
8eebea7
trigger ci
trevor-scheer May 8, 2026
e0faa4e
Merge branch 'main' into graphiql-6
trevor-scheer May 9, 2026
72e8970
v6: Add OKLCH design tokens (dark + light) (#4242)
trevor-scheer May 9, 2026
95e43c0
Merge branch 'main' into graphiql-6
trevor-scheer May 11, 2026
d9873c3
v6: Set up Storybook in `@graphiql/react` (#4254)
trevor-scheer May 13, 2026
befd259
Merge remote-tracking branch 'origin/main' into graphiql-6
trevor-scheer May 14, 2026
53054cd
v6: Add `cypress-axe` for full-app a11y coverage (#4258)
trevor-scheer May 14, 2026
bd13b32
Merge branch 'main' into graphiql-6
trevor-scheer May 14, 2026
e0ebc5b
v6: Wire axe into Storybook stories via `@storybook/addon-vitest` (#4…
trevor-scheer May 14, 2026
bd773d3
v6: Restyle `Button` and `ToolbarButton` (#4276)
trevor-scheer May 15, 2026
d4f0268
v6: Add `KeycapHint` primitive (#4277)
trevor-scheer May 15, 2026
34695e8
v6: Restyle `Tooltip` (#4278)
trevor-scheer May 15, 2026
1bcf3be
v6: Restyle `Dialog` (#4279)
trevor-scheer May 15, 2026
7dd2111
v6: Restyle `DropdownMenu` (#4280)
trevor-scheer May 15, 2026
5fb2d64
v6: Restyle `Tabs` (#4281)
trevor-scheer May 15, 2026
a0fe11a
v6: Add `SegmentedControl` primitive (#4282)
trevor-scheer May 15, 2026
05ecaf0
v6: Restyle `Spinner` (#4283)
trevor-scheer May 15, 2026
1ce71e4
v6: Add `PanelHeader` primitive (#4284)
trevor-scheer May 16, 2026
c25bfd5
v6: Add `MethodPill` primitive (#4285)
trevor-scheer May 16, 2026
e54b9c9
v6: Rewrite `SegmentedControl` on native radio inputs (#4287)
trevor-scheer May 16, 2026
6627635
v6: Mirror the active theme to `data-theme` on `<html>` (#4293)
trevor-scheer May 17, 2026
82e5460
v6: Add `TopBar` layout component (#4288)
trevor-scheer May 17, 2026
3f79ce9
v6: Add `StatusBar` layout component (#4289)
trevor-scheer May 17, 2026
bbe02de
v6: Add `ActivityRail` and replace the previous sidebar (#4290)
trevor-scheer May 17, 2026
4fa53a8
v6: Add `SidePanel` component (#4291)
trevor-scheer May 17, 2026
f5968fe
v6: Restyle editor tabs with dirty state and close affordance (#4292)
trevor-scheer May 17, 2026
ba1a8a8
Merge branch 'main' into graphiql-6
trevor-scheer May 17, 2026
7c9adc5
yarn dedupe
trevor-scheer May 17, 2026
92567d5
v6: Restyle doc-explorer to v6 design tokens (#4294)
trevor-scheer May 17, 2026
76a5169
v6: Replace Monaco editor themes with v6 token palette (#4297)
trevor-scheer May 18, 2026
ce7a88f
Speed up monaco-graphql bundle assertion test (#4298)
trevor-scheer May 18, 2026
dabeb6d
v6: Add OS-aware `MODIFIER` constants to `KeycapHint` (#4302)
trevor-scheer May 19, 2026
b73d951
v6: Redesign Schema Explorer panel structure (#4299)
trevor-scheer May 20, 2026
a3db26e
v6: Restyle @graphiql/plugin-history (#4295)
trevor-scheer May 20, 2026
eb46e2f
v6: Show operation pill on History rows (#4316)
trevor-scheer May 20, 2026
03535ab
v6: Add response pane header with view toggle (#4321)
trevor-scheer May 27, 2026
fdbd07d
v6: Add useGraphiQLSettings hook (#4322)
trevor-scheer May 28, 2026
093cb10
v6: Add Transport API and `<GraphiQL transport>` prop (#4333)
trevor-scheer Jun 5, 2026
7b95cec
Merge branch 'main' into graphiql-6
trevor-scheer Jun 5, 2026
75f8104
format release.yml
trevor-scheer Jun 6, 2026
8b70057
v6: polyfill `localStorage` in test setup for Node 24 + jsdom (#4334)
trevor-scheer Jun 6, 2026
0bd32a1
v6: Add `ResponseTreeView` (#4335)
trevor-scheer Jun 6, 2026
c7d4b1f
Merge remote-tracking branch 'origin/main' into graphiql-6
trevor-scheer Jun 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/activity-rail.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@graphiql/react': minor
'graphiql': major
---

Replace the left-side plugin sidebar with `ActivityRail`. Plugins render as a flat list in registration order with a 2px blue left border on the active plugin. Settings gear at the bottom opens the settings dialog.

The previous `graphiql-sidebar` DOM structure and CSS class names are removed. Custom CSS overrides targeting `.graphiql-sidebar` or its children will need updating. Only CSS variable names are part of the public API.
5 changes: 5 additions & 0 deletions .changeset/doc-explorer-redesign.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/plugin-doc-explorer': minor
---

Redesign the Schema Explorer panel: eyebrow header with filter and search icon buttons, dedicated breadcrumb row with color-coded depth segments, inline search row with keycap hint, type card with TYPE badge and implements list, and a mono field list with type colors and active-row accent border.
6 changes: 6 additions & 0 deletions .changeset/history-method-pill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@graphiql/plugin-history': patch
'@graphiql/toolkit': patch
---

Show a `MethodPill` (`QRY`/`MUT`/`SUB`) on each History row in place of the green status dot. `QueryStoreItem` gains an optional `operation` field, populated at write time from the parsed query. The Clear button no longer flashes green on success.
5 changes: 5 additions & 0 deletions .changeset/keycap-hint-os-detection.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

`KeycapHint` now takes semantic modifier names via the new `MODIFIER` constant. `MODIFIER.Meta` renders as `⌘` on macOS and `Ctrl` elsewhere; `Ctrl`/`Alt`/`Shift` render as Mac glyphs (`⌃`/`⌥`/`⇧`) on macOS and as plain text on other platforms. `Enter` renders as `⏎` on every platform.
5 changes: 5 additions & 0 deletions .changeset/keycap-hint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a `KeycapHint` primitive for displaying inline keyboard shortcuts (e.g. `⌘K`, `⌘⏎`). Used in the new top bar; available for general consumer use.
5 changes: 5 additions & 0 deletions .changeset/method-pill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a `MethodPill` primitive: a small colored pill labeling an operation as QRY (query), MUT (mutation), or SUB (subscription).
5 changes: 5 additions & 0 deletions .changeset/monaco-theme-v6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Replace the Monaco editor theme with v6-aligned token colors. Both `graphiql-DARK` and `graphiql-LIGHT` now cover all GraphQL token types (keywords, type names, field identifiers, variables, annotations, strings, numbers, comments) using the v6 design's accent palette. UI chrome colors (suggest widget, hover widget, quick input) are updated to match.
5 changes: 5 additions & 0 deletions .changeset/oklch-tokens.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Introduce the v6 OKLCH design-token system with both dark and light theme palettes. Tokens (`--bg-canvas`, `--fg-default`, `--accent-blue`, etc.) are stored as OKLCH triplets so opacity can be combined at the call site. Themes are keyed off `data-theme` (`dark` is the default; `light` activates explicitly or via `prefers-color-scheme: light` when no override is set). Existing v5 variables are unchanged; component styles continue to use them until they are migrated.
5 changes: 5 additions & 0 deletions .changeset/panel-header.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a `PanelHeader` primitive for side panels. Renders a title, optional subtitle, and optional action-icon row.
29 changes: 29 additions & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"mode": "pre",
"tag": "alpha",
"initialVersions": {
"example-graphiql-vite": "0.0.0",
"example-graphiql-vite-react-router": "1.0.0",
"example-graphiql-webpack": "0.0.0",
"example-monaco-graphql-nextjs": "0.0.0",
"example-monaco-graphql-react-vite": "0.0.0",
"example-monaco-graphql-webpack": "0.0.0",
"cm6-graphql": "0.2.1",
"codemirror-graphql": "2.2.4",
"graphiql": "5.2.2",
"@graphiql/plugin-code-exporter": "5.1.1",
"@graphiql/plugin-doc-explorer": "0.4.1",
"@graphiql/plugin-explorer": "5.1.1",
"@graphiql/plugin-history": "0.4.1",
"@graphiql/react": "0.37.3",
"@graphiql/toolkit": "0.11.3",
"graphql-language-service": "5.5.0",
"graphql-language-service-cli": "3.5.0",
"graphql-language-service-server": "2.14.8",
"monaco-graphql": "1.7.3",
"vscode-graphql": "0.13.2",
"vscode-graphql-execution": "0.3.2",
"vscode-graphql-syntax": "1.3.8"
},
"changesets": []
}
5 changes: 5 additions & 0 deletions .changeset/response-pane-header.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a response pane header showing status, elapsed time, response size, a JSON / Tree / Table view toggle, and a copy button. The selected view is persisted in storage and restored on reload. Tree and Table views render a placeholder until their implementations land.
5 changes: 5 additions & 0 deletions .changeset/response-tree-view.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add `ResponseTreeView` component for the response pane's Tree view. Renders GraphQL response JSON as a collapsible tree with type-colored values. Top-level nodes expand by default; deeper levels are collapsed. Selecting "Tree" in the response pane view toggle now shows the tree instead of a placeholder.
5 changes: 5 additions & 0 deletions .changeset/restyle-button-iconbutton.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Restyle `Button` and `ToolbarButton` to the v6 OKLCH design tokens. Adds a `primary` variant to `Button` for the Run-button style. Storybook stories added for each variant. Props and behavior unchanged.
5 changes: 5 additions & 0 deletions .changeset/restyle-dialog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Restyle `Dialog` to the v6 design: `--bg-elevated` surface, refined border, larger radius. Behavior and API unchanged.
5 changes: 5 additions & 0 deletions .changeset/restyle-doc-explorer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/plugin-doc-explorer': patch
---

Restyle to the v6 design. Uses the new `PanelHeader` chrome and OKLCH design tokens. Type names render in `--accent-orange`, field and enum names in `--accent-green-light`, argument names in `--accent-purple`.
5 changes: 5 additions & 0 deletions .changeset/restyle-dropdown-menu.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Restyle `DropdownMenu` to the v6 design. Behavior and API unchanged.
5 changes: 5 additions & 0 deletions .changeset/restyle-editortabs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Restyle the editor tabs to the v6 design. Tabs now show a dirty-state dot when unsaved changes are present and a hover-only close affordance per tab. Adds a `lastSavedQuery` field to the tab store; the dirty state is computed from the diff against that snapshot. Adds a `saveQuery` action (keybind `Ctrl-S` / `Cmd-S`) that updates the snapshot. Adds prettify, copy, and save buttons to the right side of the tab strip.
5 changes: 5 additions & 0 deletions .changeset/restyle-history.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/plugin-history': patch
---

Restyle to the v6 design. New row layout with status dot, mono name label, and inline variables snippet. Uses `PanelHeader` for the panel chrome.
5 changes: 5 additions & 0 deletions .changeset/restyle-spinner.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Restyle `Spinner` to the v6 design. Default stroke uses the muted foreground token.
5 changes: 5 additions & 0 deletions .changeset/restyle-tabs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Restyle `Tabs` primitive to the v6 design. Active state uses a top accent border bleeding into the strip's bottom border.
5 changes: 5 additions & 0 deletions .changeset/restyle-tooltip.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Restyle `Tooltip` to the v6 design: `--bg-elevated` surface, simplified border and shadow.
5 changes: 5 additions & 0 deletions .changeset/segmented-control-radio.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

Rewrite `SegmentedControl` on top of native radio inputs. Public props are unchanged. Keyboard navigation (arrow keys, Home / End) and screen-reader semantics now come from the browser; the group is a single tab stop instead of one per option.
5 changes: 5 additions & 0 deletions .changeset/segmented-control.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a `SegmentedControl` primitive for selecting one option from a small set inline. Used by the new top-bar response view toggle and several settings controls.
5 changes: 5 additions & 0 deletions .changeset/side-panel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add `SidePanel` component that hosts the active plugin's content next to the activity rail. Default width 340px, resizable.
5 changes: 5 additions & 0 deletions .changeset/status-bar.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a `StatusBar` layout component: a 24px-tall footer at the bottom of the app showing connection status, schema type count, active plugin count, cursor position, and document metadata (encoding, indent, language label).
5 changes: 5 additions & 0 deletions .changeset/theme-data-attribute.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': patch
---

`setTheme` now mirrors the chosen theme onto `document.documentElement` as a `data-theme` attribute. The v6 OKLCH token cascade in `tokens.css` is gated on `[data-theme='light']` / `[data-theme='dark']` selectors and was previously never matched, so v6 components fell back to the OS `prefers-color-scheme` regardless of the GraphiQL theme toggle. The existing `body.graphiql-light` / `body.graphiql-dark` classes are preserved for backwards compatibility with custom CSS.
6 changes: 6 additions & 0 deletions .changeset/topbar-component.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@graphiql/react': minor
'graphiql': patch
---

Add a new `TopBar` layout component with brand, endpoint URL display, command palette button, and primary Run button. Endpoint method/URL are placeholders until the transport API lands. `TopBar` is now mounted at the top of the GraphiQL layout.
9 changes: 9 additions & 0 deletions .changeset/transport-api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@graphiql/toolkit': minor
'@graphiql/react': minor
'graphiql': minor
---

Add a `Transport` API alongside the existing `Fetcher`. `createTransport({...})` performs the GraphQL request and returns a `TransportResponse` carrying the real HTTP wire metadata (status, headers, timing, size) for queries, mutations, subscriptions, and incremental delivery. `<GraphiQL>` accepts a new `transport` prop, mutually exclusive with `fetcher` at the type level, that lets the response pane surface those values directly from the underlying `Response`. Subscriptions require an explicit `subscriptionClient` (any client whose `.subscribe(payload, sink)` matches the `graphql-ws` `Client` shape, including `graphql-sse`'s `createClient()`); the toolkit no longer constructs one. The CDN bundle exposes `GraphiQL.createTransport` and `GraphiQL.createWsClient` so script-tag consumers can adopt without a bundler.

`createGraphiQLFetcher`, the `Fetcher` type and its companions, and the `<GraphiQL fetcher={...}>` prop are deprecated but continue to work unchanged. Existing code keeps compiling. Consumers on the deprecated path see a one-time dismissible banner in the response pane pointing at `docs/migration/graphiql-6.0.0.md` rather than fabricated status/timing/size values.
5 changes: 5 additions & 0 deletions .changeset/use-graphiql-settings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphiql/react': minor
---

Add a `useGraphiQLSettings()` hook for managing theme / density / font-size preferences with `localStorage` persistence. Settings apply automatically to the GraphiQL container via `data-*` attributes.
5 changes: 5 additions & 0 deletions .changeset/v6-alpha-line.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'graphiql': major
---

Initial v6 alpha. Refs graphql/graphiql#4219.
1 change: 1 addition & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ jobs:
with:
key: build-${{ github.sha }}
path: ${{ env.BUILD-CACHE-LIST }}
- run: npx playwright install --with-deps chromium
- run: yarn test

lint:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches:
- main
- release/*
- graphiql-6

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,5 @@ packages/graphiql/typedoc/
packages/graphiql/webpack/

.react-router/

storybook-static/
160 changes: 160 additions & 0 deletions docs/migration/graphiql-6.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# Upgrading `graphiql` to `6.0.0`

This covers the one notable change in `graphiql@6`: a new `Transport` API that replaces `Fetcher`/`createGraphiQLFetcher`. The rest of the surface carries over. Open an issue if something is missing here and we'll add it.

## Overview

`@graphiql/toolkit` adds `createTransport`, which takes the same options as `createGraphiQLFetcher` and produces a `Transport`. Unlike `Fetcher`, a `Transport`'s response carries the real HTTP wire data: status code, headers, body, timing, and request/response sizes. `<GraphiQL>` accepts a new `transport` prop alongside the existing `fetcher` prop; the two are mutually exclusive at the type level. The old API still works.

## `createGraphiQLFetcher` → `createTransport`

The HTTP options object carries over. Subscriptions are different: `createTransport` does not build a subscription client for you. You construct your own `graphql-ws` (or `graphql-sse`) client and pass it as `subscriptionClient`. There is no `subscriptionUrl`, `wsClient`, `legacyClient`, or `wsConnectionParams` option.

**Before:**

```ts
import { createGraphiQLFetcher } from '@graphiql/toolkit';

const fetcher = createGraphiQLFetcher({
url: 'https://my.endpoint/graphql',
subscriptionUrl: 'wss://my.endpoint/graphql',
});
```

**After (WebSocket subscriptions):**

```ts
import { createClient } from 'graphql-ws';
import { createTransport } from '@graphiql/toolkit';

const transport = createTransport({
url: 'https://my.endpoint/graphql',
subscriptionClient: createClient({ url: 'wss://my.endpoint/graphql' }),
});
```

**After (SSE subscriptions):**

`graphql-sse`'s `createClient()` is signature-compatible with `graphql-ws`, so the same option drives either protocol:

```ts
import { createClient } from 'graphql-sse';
import { createTransport } from '@graphiql/toolkit';

const transport = createTransport({
url: 'https://my.endpoint/graphql',
subscriptionClient: createClient({
url: 'https://my.endpoint/graphql/stream',
}),
});
```

If you only run queries and mutations, leave `subscriptionClient` off. A subscription dispatched without it throws with a pointer back to this page.

## `<GraphiQL fetcher={...}>` → `<GraphiQL transport={...}>`

**Before:**

```tsx
import { createGraphiQLFetcher } from '@graphiql/toolkit';
import { GraphiQL } from 'graphiql';

const fetcher = createGraphiQLFetcher({ url: 'https://my.endpoint/graphql' });

function App() {
return <GraphiQL fetcher={fetcher} />;
}
```

**After:**

```tsx
import { createTransport } from '@graphiql/toolkit';
import { GraphiQL } from 'graphiql';

const transport = createTransport({ url: 'https://my.endpoint/graphql' });

function App() {
return <GraphiQL transport={transport} />;
}
```

Passing both props is a type error. Remove `fetcher` when you add `transport`.

## What you get

With a `Transport`, the response pane header shows the real HTTP status code, total round-trip time, and the request and response byte sizes, read directly off the `Response`. Response headers are accessible through the response detail panel.

With a `fetcher`, none of that is observable. The `Fetcher` contract is `(params) => ExecutionResult`, which discards the HTTP envelope before GraphiQL sees it. The response pane shows a small dismissible notice pointing here instead of fabricated values.

## Custom fetchers (FAQ)

If you hand-rolled a `Fetcher` rather than using `createGraphiQLFetcher`, migrate by implementing the `Transport` interface directly. A `Transport` is an object with a `send(request)` method. For queries and mutations it returns a `Promise<TransportResponse>`; for subscriptions and incremental delivery it returns an `AsyncIterable<TransportResponse>`, one entry per event or chunk.

**Before (custom fetcher):**

```ts
import type { Fetcher } from '@graphiql/toolkit';

const fetcher: Fetcher = async params => {
const res = await fetch('/graphql', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify(params),
});
return res.json();
};
```

**After (custom transport):**

```ts
import type { Transport } from '@graphiql/toolkit';

const transport: Transport = {
async send(request) {
const startMs = performance.now();
const requestBody = JSON.stringify({
query: request.query,
operationName: request.operationName,
variables: request.variables,
});
const response = await fetch('/graphql', {
method: 'POST',
headers: { 'content-type': 'application/json', ...request.headers },
body: requestBody,
});
const body = await response.json();
const headers: Record<string, string> = {};
response.headers.forEach((value, key) => {
headers[key] = value;
});
return {
ok: !body.errors?.length,
status: response.status,
statusText: response.statusText,
headers,
body,
timing: { totalMs: performance.now() - startMs },
size: {
request: new TextEncoder().encode(requestBody).length,
response: new TextEncoder().encode(JSON.stringify(body)).length,
},
};
},
};
```

Read `status`, `statusText`, and `headers` off the real `Response`. Don't hard-code them; the response pane reads those fields directly.

## What's deprecated, not removed

The following are deprecated in `graphiql@6`. They continue to work and might be removed in a future major version.

| Deprecated | Replacement |
| ------------------------------------------------ | ----------------- |
| `createGraphiQLFetcher` from `@graphiql/toolkit` | `createTransport` |
| `fetcher` prop on `<GraphiQL>` | `transport` prop |
| `Fetcher` type from `@graphiql/toolkit` | `Transport` |

Existing code keeps compiling and running today. Migrate when you want the response pane to show real wire data, or before a future major version drops the deprecated path.
Loading
Loading