Repository navigation
GraphiQL v6 - #4228
Draft
trevor-scheer wants to merge 177 commits into
Draft
GraphiQL v6#4228trevor-scheer wants to merge 177 commits into
trevor-scheer wants to merge 177 commits into
Conversation
## Summary - Swap the vestigial `graphiql-5` reference in `.github/workflows/release.yml` for `graphiql-6` so the changesets-action runs on pushes to the integration branch. - Enter changesets pre-mode with the `alpha` tag so merges aggregate into `6.0.0-alpha.N` prereleases. - Add a changeset that seeds the alpha release line by bumping `graphiql` to v6. No functional change — subsequent alphas accumulate the redesign work. ## Test plan - [ ] On merge: changesets-action opens a "Version Packages (alpha)" PR bumping `graphiql` to `6.0.0-alpha.0`. - [ ] Merging the version PR publishes `graphiql@6.0.0-alpha.0` to npm with the `alpha` dist-tag. Refs: #4219
🦋 Changeset detectedLatest commit: 50841a3 The changes in this PR will be included in the next version bump. This PR includes changesets to release 16 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
Contributor
|
The latest changes of this PR are not available as canary, since there are no linked |
## Summary - Introduce a new `packages/graphiql-react/src/style/tokens.css` with the v6 OKLCH-based design token system. Both dark and light palettes ship together. - Light theme activates explicitly via `data-theme="light"` or automatically via `prefers-color-scheme: light` when no theme is pinned. Dark remains the default. - Existing v5 HSL variables are unchanged; nothing in `@graphiql/react` references the new tokens yet. - Future PRs will restyle components to consume the new tokens and shim the v5 variables. Refs: #4219
## Summary Storybook gives us a fast feedback loop for iterating on the look of the app and individual components — flipping themes/density/font-size without spinning up the full GraphiQL shell. - Bootstrap Storybook 10 in `@graphiql/react`. Stories colocated as `<component>.stories.tsx`; ships one starter (`Spinner`) to validate the pipeline. - A global decorator wraps every story in `.graphiql-container` with `data-theme` / `data-density` / `data-font-size` attributes, toggleable from the Storybook toolbar. - Move `Uri`, `KeyMod`, `KeyCode`, and `Range` out of the `utility` barrel into direct imports from `utility/monaco-ssr`. The barrel was bundling two unrelated concerns — lightweight UI helpers (`cn`, `pick`, etc.) and heavy Monaco re-exports — so any story reaching for `cn` transitively pulled Monaco's ESM bundle, which doesn't initialize cleanly inside Storybook's preview iframe. Splitting them keeps UI primitives lightweight. ## Run locally From the repo root: ``` yarn storybook # dev server on http://localhost:6006 yarn build-storybook # static build under packages/graphiql-react/storybook-static ``` Refs: #4219
## Summary Component a11y is covered by Storybook + axe; this is the full-app counterpart. `cypress-axe` runs axe at four checkpoints during a normal session (initial render, after running a query, with the docs panel open, with the history panel open) and gates PRs against a committed baseline. `cypress/.a11y-baseline.json` pins today's accepted violations — color-contrast in several spots, a couple of nested-interactive cases, link-in-text-block in the docs panel. CI fails on net-new only. The spec lives alongside the existing Cypress suite, so it runs as part of the normal `yarn e2e` flow. `cypress.config.ts` gets a small `writeBaseline` Node task so the spec can persist baseline updates from inside the browser. ## Refresh baseline ``` yarn workspace graphiql test:a11y:update ``` Refs: #4219
) ## Summary Component-level a11y for v6. `@storybook/addon-a11y` surfaces axe results next to each story while you're working on it; `@storybook/addon-vitest` folds those same checks into the existing Vitest suite so they run as part of `yarn test` in CI. The model is per-story `parameters.a11y.test`: - `'error'` (default) — axe violations fail the test - `'todo'` — warn only, for stories with known issues we plan to fix - `'off'` — skip a11y for the story `vitest.config.mts` is split into two projects: - `unit` — existing jsdom suite, unchanged behavior - `storybook` — Vitest browser mode (Playwright Chromium), picks up `.stories.*` files The PR CI workflow gets one new step: `yarn playwright install --with-deps chromium` ahead of `yarn test`. ## Run locally ``` yarn workspace @graphiql/react test # both projects yarn workspace @graphiql/react vitest run --project=unit # unit only yarn workspace @graphiql/react vitest run --project=storybook ``` The Storybook a11y panel surfaces the same axe results live during `yarn workspace @graphiql/react storybook`. Refs: #4219
## Summary - Migrate `Button`, `UnStyledButton`, `ToolbarButton`, and `ExecuteButton` CSS to v6 OKLCH tokens. - Add `variant?: 'default' | 'primary'` to `Button`; `primary` renders the Run-button style. - Switch `:focus` to `:focus-visible` on interactive states so the focus ring no longer fires on mouse click. Aligns with [MDN `:focus-visible`](https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible) and WCAG 2.4.7 (Focus Visible). - Import `clsx` directly in `button` and `toolbar-button`, following the leaf-module pattern from #4272. A follow-up PR will convert remaining callers and remove the `cn` re-export. - Add Storybook stories: `Primitives/Button` (Default, Primary, Success, Error, Disabled) and `Primitives/ToolbarButton` (Default). ## Test plan - [x] Open Storybook `Primitives/Button` and verify each variant matches the design. - [x] Tab into the buttons, then mouse-click them. Focus ring appears on Tab only, not on click. - [x] Open `Primitives/ToolbarButton`. Hover the icon button; a v6 tooltip appears. - [x] Run `yarn dev:graphiql`. The Run button and toolbar buttons match the new design. Refs: #4219
Reopening a saved operation or switching tabs can replace the editor text before the selected operation updates. Clicking Run immediately can then send the new document with the previous operation's name. Run now reads the document being sent and uses it to choose the operation and its required fragments. Saved tab selections, explicit dropdown selections, and operation names supplied by the host are preserved. Keyboard Run uses current document ranges. Cursor selection updates immediately so a queued cursor update can't undo a later dropdown choice. Mutations still require selecting POST before running. To exercise the original failure, switch between two named saved operations and click Run immediately. The outgoing document and operation name should agree. The first commit contains the failing examples; the following commit fixes selection. Refs: #4219
The keyboard-picker check could press Enter before focus moved to B. It also checked a response shared by both operations, which couldn't tell us which one ran. The test now establishes browser focus, waits for the focused menu item before each key press, and checks the outgoing operation name. It controls the clock so an older cursor update runs after explicitly choosing B, then checks that a second Run still sends B. This keeps the application race visible instead of depending on how quickly the browser executes the test. This is a test-only change stacked on #4573, which fixes operation selection. With the old cursor handler, the second request sends A. Refs: #4571, #4219
Installing an exact GraphiQL beta can still select incompatible canary packages through its internal dependency ranges. Those packages are missing worker paths and language-service exports that GraphiQL needs. This pins the internal beta package family to compatible versions while keeping support for Monaco 0.56 and 0.57. We can restore ordinary dependency ranges after stable releases exist. Monaco now includes the source files referenced by its source maps so debugging doesn't produce missing-source warnings. The corrected published beta still needs a fresh-install check using actual npm versions after release. Refs: #4219
Custom Monaco theme names passed to `editorTheme` were replaced by GraphiQL's built-in colors. The registered light and dark themes now stay active when GraphiQL opens, restores saved settings, and follows changes made in Settings or the system appearance. Apps without custom themes keep the built-in colors. Manual check: register a light and dark Monaco theme with visibly different keyword and background colors, pass their names through `editorTheme`, then open Settings and select Light, Dark, and Auto. The editor should keep those registered colors, including after a reload and a system appearance change. Refs: #4219
`createTransport` currently accepts a sink-based `subscribe(request, sink)` API and converts it into an async iterator. That conversion makes GraphiQL responsible for subscription queueing and lifecycle details. In particular, an iterator waiting for its next event cannot be stopped promptly without adding a second state machine inside the toolkit. Because `Transport` and `SubscriptionClient` are new on `graphiql-6`, this instead requires `subscriptionClient.iterate(request)`. `graphql-ws` v6 and `graphql-sse` already expose that API. `createTransport` now only starts the client iterator lazily, maps each result into a `TransportResponse`, and forwards `.return()` directly to the client. Older `graphql-ws` clients remain supported by the deprecated `createGraphiQLFetcher` API, but not by the new `Transport` subscription contract. The first commit reproduces cancellation getting stuck between subscription events. The second commit changes the contract and keeps the same behavior covered using a controllable async iterator. Supersedes #4572.
…4588) Saving a collection item could leave its linked tab on older contents for another half second. Reloading during that gap restored the older tab instead of the saved operation. Save now captures the current query, variables, and headers and writes the tab before it finishes. It cancels older queued writes, and provider initialization no longer schedules writes from a render that React abandons. Opening an item that already has a tab preserves that tab's unsaved edits. To try it, run `pnpm build:graphiql`, then `pnpm --filter graphiql-e2e server:built`. Open [the test app](http://localhost:8080/), open Collections, enter an operation, and save it. Reload immediately and reopen the item: the saved contents should still be there. Edit and save that linked item, then repeat. Finally, edit it without saving and click its collection entry again: those unsaved edits should remain. The reproduction commits cover immediate reload, an older queued write, and an abandoned provider render before the fix. Refs: #4219
Cypress currently treats the first Monaco model with a matching URI, or its rendered `.view-lines`, as an editor readiness boundary. That couples setup and assertions to layout, and it can select a detached or inactive model once a test opens multiple tabs. This adds helpers around the model attached to the active editor. `visitGraphiQL` waits for an explicitly supplied query, setup-only tab tests set model values directly, and shared value assertions no longer read Monaco's rendered DOM. Trusted keyboard input remains available for tests where typing is the behavior under test. This is the first PR in the Cypress flake stack and is intended to be reviewed by commit. <sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback</a></sub>
Several Cypress tests still use elapsed time or a one-shot snapshot as a proxy for asynchronous Monaco and application work. That is the same mechanism behind the recent lint hover, DocExplorer debounce, and operation-picker flakes. This waits on the resulting state instead. Incremental delivery assertions retry the response model with a test-specific timeout, the query-builder focus regression waits for its debounced URL update, and lint assertions find diagnostics by message and severity rather than marker position. Negative lint cases first introduce a known-invalid sentinel and then remove it, proving validation completed before asserting that no markers remain. The hover assertion retriggers its mouse event through Cypress's retry loop without fixed sleeps. This is the second PR in the Cypress flake stack and is intended to be reviewed by commit. Refs #4348, #4358, #4574. <sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback</a></sub>
The DocExplorer flake fixed in #4348 showed that a positional selector can resolve successfully while pointing at stale state. Similar activity-rail, search-result, and history-item selectors remain elsewhere in the suite. This adds shared plugin show/hide commands that select by accessible name and wait for the panel state. DocExplorer results are selected by their semantic text, and history actions locate the item by label before choosing its action. The assertions continue to cover ordering and grouping where those are the behavior under test, without using position to identify the item being changed. This is the third PR in the Cypress flake stack and is intended to be reviewed by commit. <sub>Stack created with <a href="https://github.com/github/gh-stack">GitHub Stacks CLI</a> • <a href="https://gh.io/stacks-feedback">Give Feedback</a></sub>
GraphiQL's Vite worker graph currently reaches the CommonJS-only `nullthrows` and `picomatch-browser` packages. Vite doesn't reliably discover those dependencies inside workers under pnpm's isolated layout, so applications have to name GraphiQL's transitive dependency paths in `optimizeDeps.include`. `nullthrows` only asserts fragment map lookups that the surrounding control flow already guards, so this removes that dependency and narrows the values directly. `monaco-graphql` now uses the dual ESM/CommonJS `minimatch` package for `fileMatch`; the added test exercises multiple schema selection through URI glob patterns. I packed both changed packages and installed them into a fresh pnpm application using the published GraphiQL beta. With `graphiql/setup-workers/vite`, Vite now starts all three workers with only the two setup-helper exclusions and no forced dependency includes. Explicit worker factories work with no `optimizeDeps` configuration at all. This doesn't remove the helper exclusions themselves. Vite must still transform their `?worker` imports instead of pre-bundling those modules. #4589 is stacked on this PR and reduces its Vite guidance to that boundary.
This PR is stacked on #4590, which removes the two CommonJS dependencies that previously had to be forced into Vite's development optimizer. The migration guide now targets the intended stable v6 API. Its examples use a valid transport, handle HTTP failures, describe the standard UI accurately, use registered editor theme names, guard custom actions, and rely on the exported `COLLECTIONS_PLUGIN` rather than documenting beta-version compatibility. GraphiQL now exports an immutable `DEFAULT_PLUGINS` array and re-exports the Query Builder and Collections plugin constants. Applications can omit `plugins` for the standard setup, or filter, map, and extend the defaults without declaring direct dependencies on every built-in plugin package. A direct plugin dependency is only shown when an application uses plugin-specific configuration such as `collectionsPlugin(...)`. The CSS guidance uses the single `graphiql/style.css` entry, which already contains the default first-party plugin styles. The Vite example only excludes the two worker setup modules from pre-bundling so Vite can process their `?worker` imports. Applications that configure the explicit worker factories can omit `optimizeDeps` entirely. The guide also explains that users must select POST before running a mutation; dropdown and keyboard execution follow the same rule. Manual check: start the Vite example with a fresh dependency cache, try schema completion and an unknown field, enter invalid Variables JSON, and select Prettify. Repeat against its production preview. With GET selected, a mutation should remain blocked until you explicitly select POST. Refs: #4219
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to graphiql-6, this PR will be updated.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ `graphiql-6` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `graphiql-6`.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ # Releases ## graphiql@6.0.0-beta.3 ### Minor Changes - [#4589](#4589) [`7f9e0cc`](7f9e0cc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Export the immutable `DEFAULT_PLUGINS` array and the default Query Builder and Collections plugin constants. Customize GraphiQL's defaults without importing its plugin packages directly. ### Patch Changes - [#4570](#4570) [`c7d5295`](c7d5295) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Export `COLLECTIONS_PLUGIN` for the default collections configuration. Use `collectionsPlugin(options)` when you need custom storage or permissions. - Updated dependencies [[`c7d5295`](c7d5295), [`9d9790d`](9d9790d)]: - @graphiql/plugin-collections@1.0.0-beta.3 - @graphiql/react@1.0.0-beta.3 - @graphiql/plugin-doc-explorer@1.0.0-beta.3 - @graphiql/plugin-history@1.0.0-beta.3 - @graphiql/plugin-query-builder@1.0.0-beta.3 ## @graphiql/plugin-collections@1.0.0-beta.3 ### Minor Changes - [#4570](#4570) [`c7d5295`](c7d5295) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Export `COLLECTIONS_PLUGIN` for the default collections configuration. Use `collectionsPlugin(options)` when you need custom storage or permissions. ### Patch Changes - Updated dependencies [[`9d9790d`](9d9790d)]: - @graphiql/react@1.0.0-beta.3 ## cm6-graphql@1.0.0-beta.1 ### Patch Changes - Updated dependencies [[`5affc68`](5affc68)]: - graphql-language-service@6.0.0-beta.1 ## codemirror-graphql@3.0.0-beta.1 ### Patch Changes - Updated dependencies [[`5affc68`](5affc68)]: - graphql-language-service@6.0.0-beta.1 ## @graphiql/plugin-code-exporter@6.0.0-beta.3 ### Patch Changes - Updated dependencies [[`9d9790d`](9d9790d)]: - @graphiql/react@1.0.0-beta.3 ## @graphiql/plugin-doc-explorer@1.0.0-beta.3 ### Patch Changes - Updated dependencies [[`9d9790d`](9d9790d)]: - @graphiql/react@1.0.0-beta.3 ## @graphiql/plugin-history@1.0.0-beta.3 ### Patch Changes - Updated dependencies [[`9d9790d`](9d9790d)]: - @graphiql/react@1.0.0-beta.3 ## @graphiql/plugin-query-builder@1.0.0-beta.3 ### Patch Changes - Updated dependencies [[`9d9790d`](9d9790d)]: - @graphiql/react@1.0.0-beta.3 ## @graphiql/react@1.0.0-beta.3 ### Patch Changes - [#4557](#4557) [`9d9790d`](9d9790d) Thanks [@vishwakt](https://github.com/vishwakt)! - Improve the error shown when the Variables or Headers pane contains invalid JSON. The message now uses plain language with a line and column (for example `expected a value at line 1, column 8`) instead of the bare `jsonc-parser` error code (`ValueExpected`), and is prefixed with `Request not sent.` so it is not mistaken for a server response. - Updated dependencies [[`5affc68`](5affc68)]: - graphql-language-service@6.0.0-beta.1 - monaco-graphql@2.0.0-beta.1 ## graphql-language-service@6.0.0-beta.1 ### Patch Changes - [#4590](#4590) [`5affc68`](5affc68) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Remove the CommonJS-only `nullthrows` dependency and replace `picomatch-browser` with an ESM-compatible glob matcher. ## graphql-language-service-cli@4.0.0-beta.1 ### Patch Changes - Updated dependencies [[`5affc68`](5affc68)]: - graphql-language-service@6.0.0-beta.1 - graphql-language-service-server@3.0.0-beta.1 ## graphql-language-service-server@3.0.0-beta.1 ### Patch Changes - Updated dependencies [[`5affc68`](5affc68)]: - graphql-language-service@6.0.0-beta.1 ## monaco-graphql@2.0.0-beta.1 ### Patch Changes - [#4590](#4590) [`5affc68`](5affc68) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Remove the CommonJS-only `nullthrows` dependency and replace `picomatch-browser` with an ESM-compatible glob matcher. - Updated dependencies [[`5affc68`](5affc68)]: - graphql-language-service@6.0.0-beta.1 ## vscode-graphql@1.0.0-beta.1 ### Patch Changes - Updated dependencies []: - graphql-language-service-server@3.0.0-beta.1 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
[#4578](#4578) changed transport subscriptions to require `subscriptionClient.iterate(request)`, but `@graphiql/toolkit@1.0.0-beta.1` is still the published beta. That PR updated `.changeset/transport-api.md`, which `.changeset/pre.json` already lists as consumed. The beta.3 version PR therefore had no new toolkit release entry, and `@graphiql/react@1.0.0-beta.3` still pins toolkit beta.1. This removes `transport-api` from the prerelease consumed list so Changesets applies its final wording to the next beta. The release plan schedules toolkit beta.2, React beta.4, GraphiQL beta.4, and dependent plugin bumps. The same `transport-api.md` remains the single entry for the stable changelog. The first commit on this branch added a separate changeset; the second undoes that approach. The net diff is the one-line change in `pre.json`.
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to graphiql-6, this PR will be updated.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ `graphiql-6` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `graphiql-6`.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ # Releases ## graphiql@6.0.0-beta.4 ### Minor Changes - [#4333](#4333) [`093cb10`](093cb10) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Add a structured `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, so the response pane can surface those values directly instead of fabricating them. That metadata is there even when the response body isn't valid JSON (an HTML error page from a proxy, a plain-text 401), so a broken response still shows its real status code instead of a generic error. `<GraphiQL>` accepts a new `transport` prop, mutually exclusive with `fetcher` at the type level. Transports support GET, POST, and the [HTTP `QUERY`](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/) method per the GraphQL over HTTP spec. Pass `method` / `supportedMethods` to choose; GET encodes the query into the URL with no body, `QUERY` sends a JSON body but is safe and idempotent, and mutations are always sent over POST (or blocked when POST is unavailable). `Transport` exposes `url`, `method`, `supportedMethods`, and an optional `setMethod`, and the top bar shows the active method and endpoint with an inline switcher that cycles through the supported methods. Every request, incremental delivery on or off, sends `application/graphql-response+json` in its `accept` header alongside `application/json`, so spec-compliant servers don't fall back to legacy response semantics. Subscriptions require an explicit `subscriptionClient` satisfying a small `SubscriptionClient` contract: a single `.iterate(request)` method that `graphql-ws` v6 and `graphql-sse` clients meet directly. The low-level `simpleHttpTransport` and `multipartHttpTransport` primitives also accept an optional `method`. `TransportRequest` carries `extensions` for GraphQL-over-HTTP extensions such as automatic persisted queries (encoded into the URL for `GET`, included in the JSON body for `POST` and `QUERY`), and `signal`, an `AbortSignal` that cancels an in-flight query or mutation. Stopping a running query or mutation aborts the request; stopping a subscription closes the underlying socket or SSE connection. `TransportResponse.ok` reflects both layers: the HTTP status and the absence of top-level GraphQL errors, so a 401 or 500 is never `ok: true` just because its body happens to parse as JSON with no `errors`. Plugins can observe and transform traffic through `transport.onBeforeSend`, `transport.onResponse`, and `transport.onError`, available via `useGraphiQLPluginContext()` (all three return a cleanup function; the `transport` field is `undefined` under the legacy `fetcher` path, so guard with optional chaining). `onError` fires when a request fails outright, such as a network error, so plugins can react to failures the same way they observe successful responses. `createGraphiQLFetcher`, the `Fetcher` type and its companions, and `<GraphiQL fetcher={...}>` are deprecated but continue to work unchanged. 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. ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/react@1.0.0-beta.4 - @graphiql/plugin-history@1.0.0-beta.4 - @graphiql/plugin-collections@1.0.0-beta.4 - @graphiql/plugin-doc-explorer@1.0.0-beta.4 - @graphiql/plugin-query-builder@1.0.0-beta.4 ## @graphiql/react@1.0.0-beta.4 ### Minor Changes - [#4333](#4333) [`093cb10`](093cb10) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Add a structured `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, so the response pane can surface those values directly instead of fabricating them. That metadata is there even when the response body isn't valid JSON (an HTML error page from a proxy, a plain-text 401), so a broken response still shows its real status code instead of a generic error. `<GraphiQL>` accepts a new `transport` prop, mutually exclusive with `fetcher` at the type level. Transports support GET, POST, and the [HTTP `QUERY`](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/) method per the GraphQL over HTTP spec. Pass `method` / `supportedMethods` to choose; GET encodes the query into the URL with no body, `QUERY` sends a JSON body but is safe and idempotent, and mutations are always sent over POST (or blocked when POST is unavailable). `Transport` exposes `url`, `method`, `supportedMethods`, and an optional `setMethod`, and the top bar shows the active method and endpoint with an inline switcher that cycles through the supported methods. Every request, incremental delivery on or off, sends `application/graphql-response+json` in its `accept` header alongside `application/json`, so spec-compliant servers don't fall back to legacy response semantics. Subscriptions require an explicit `subscriptionClient` satisfying a small `SubscriptionClient` contract: a single `.iterate(request)` method that `graphql-ws` v6 and `graphql-sse` clients meet directly. The low-level `simpleHttpTransport` and `multipartHttpTransport` primitives also accept an optional `method`. `TransportRequest` carries `extensions` for GraphQL-over-HTTP extensions such as automatic persisted queries (encoded into the URL for `GET`, included in the JSON body for `POST` and `QUERY`), and `signal`, an `AbortSignal` that cancels an in-flight query or mutation. Stopping a running query or mutation aborts the request; stopping a subscription closes the underlying socket or SSE connection. `TransportResponse.ok` reflects both layers: the HTTP status and the absence of top-level GraphQL errors, so a 401 or 500 is never `ok: true` just because its body happens to parse as JSON with no `errors`. Plugins can observe and transform traffic through `transport.onBeforeSend`, `transport.onResponse`, and `transport.onError`, available via `useGraphiQLPluginContext()` (all three return a cleanup function; the `transport` field is `undefined` under the legacy `fetcher` path, so guard with optional chaining). `onError` fires when a request fails outright, such as a network error, so plugins can react to failures the same way they observe successful responses. `createGraphiQLFetcher`, the `Fetcher` type and its companions, and `<GraphiQL fetcher={...}>` are deprecated but continue to work unchanged. 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. ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/toolkit@1.0.0-beta.2 ## @graphiql/toolkit@1.0.0-beta.2 ### Minor Changes - [#4333](#4333) [`093cb10`](093cb10) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Add a structured `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, so the response pane can surface those values directly instead of fabricating them. That metadata is there even when the response body isn't valid JSON (an HTML error page from a proxy, a plain-text 401), so a broken response still shows its real status code instead of a generic error. `<GraphiQL>` accepts a new `transport` prop, mutually exclusive with `fetcher` at the type level. Transports support GET, POST, and the [HTTP `QUERY`](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/) method per the GraphQL over HTTP spec. Pass `method` / `supportedMethods` to choose; GET encodes the query into the URL with no body, `QUERY` sends a JSON body but is safe and idempotent, and mutations are always sent over POST (or blocked when POST is unavailable). `Transport` exposes `url`, `method`, `supportedMethods`, and an optional `setMethod`, and the top bar shows the active method and endpoint with an inline switcher that cycles through the supported methods. Every request, incremental delivery on or off, sends `application/graphql-response+json` in its `accept` header alongside `application/json`, so spec-compliant servers don't fall back to legacy response semantics. Subscriptions require an explicit `subscriptionClient` satisfying a small `SubscriptionClient` contract: a single `.iterate(request)` method that `graphql-ws` v6 and `graphql-sse` clients meet directly. The low-level `simpleHttpTransport` and `multipartHttpTransport` primitives also accept an optional `method`. `TransportRequest` carries `extensions` for GraphQL-over-HTTP extensions such as automatic persisted queries (encoded into the URL for `GET`, included in the JSON body for `POST` and `QUERY`), and `signal`, an `AbortSignal` that cancels an in-flight query or mutation. Stopping a running query or mutation aborts the request; stopping a subscription closes the underlying socket or SSE connection. `TransportResponse.ok` reflects both layers: the HTTP status and the absence of top-level GraphQL errors, so a 401 or 500 is never `ok: true` just because its body happens to parse as JSON with no `errors`. Plugins can observe and transform traffic through `transport.onBeforeSend`, `transport.onResponse`, and `transport.onError`, available via `useGraphiQLPluginContext()` (all three return a cleanup function; the `transport` field is `undefined` under the legacy `fetcher` path, so guard with optional chaining). `onError` fires when a request fails outright, such as a network error, so plugins can react to failures the same way they observe successful responses. `createGraphiQLFetcher`, the `Fetcher` type and its companions, and `<GraphiQL fetcher={...}>` are deprecated but continue to work unchanged. 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. ## @graphiql/plugin-code-exporter@6.0.0-beta.4 ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/react@1.0.0-beta.4 ## @graphiql/plugin-collections@1.0.0-beta.4 ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/react@1.0.0-beta.4 ## @graphiql/plugin-doc-explorer@1.0.0-beta.4 ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/react@1.0.0-beta.4 ## @graphiql/plugin-history@1.0.0-beta.4 ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/toolkit@1.0.0-beta.2 - @graphiql/react@1.0.0-beta.4 ## @graphiql/plugin-query-builder@1.0.0-beta.4 ### Patch Changes - Updated dependencies [[`093cb10`](093cb10)]: - @graphiql/react@1.0.0-beta.4 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Changesets documents changing prerelease stages by updating the `tag` in `.changeset/pre.json` directly. This moves the existing prerelease state from `beta` to `rc` without resetting or rewriting its recorded initial versions. The resulting version PR will show which packages Changesets advances under the new tag.
Changing the prerelease tag tells Changesets how to label the next release, but doesn’t create release intent by itself. This adds a temporary patch changeset covering every package currently on a beta version so the next version PR moves the whole package family to RC versions. After Changesets consumes this into `.changeset/pre`, we’ll remove the archived promotion changeset before exiting prerelease mode so it isn’t included in the final release changelogs.
The esm.sh worker helper imports `monaco-graphql` without a version. esm.sh resolves that to 1.9.0, while GraphiQL 6 uses Monaco Editor 0.57 and `monaco-graphql` 2. The old worker can leave GraphQL completion and diagnostics broken in CDN setups. Use the `@rc` tag for the GraphQL worker during the GraphiQL 6 release candidate, and keep the ambient module declaration in sync. The React changeset publishes the updated helper (and bumps its dependents). The final cleanup in #4587 will switch the URL to `@latest` once v2 is stable. This must remain a draft until the `monaco-graphql@rc` dist-tag points to a v2 RC. At the time of this update, npm still points `rc` to 1.7.1-rc.0. After the RC publish, verify the esm.sh worker wrapper resolves to that RC and check schema completion and diagnostics in a browser. Refs: #4219
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to graphiql-6, this PR will be updated.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ `graphiql-6` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `graphiql-6`.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ # Releases ## cm6-graphql@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - graphql-language-service@6.0.0-rc.0 ## codemirror-graphql@3.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - graphql-language-service@6.0.0-rc.0 ## graphiql@6.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`5081f23`](5081f23), [`bcd13dc`](bcd13dc)]: - @graphiql/react@1.0.0-rc.0 - @graphiql/plugin-collections@1.0.0-rc.0 - @graphiql/plugin-doc-explorer@1.0.0-rc.0 - @graphiql/plugin-history@1.0.0-rc.0 - @graphiql/plugin-query-builder@1.0.0-rc.0 ## @graphiql/plugin-code-exporter@6.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`5081f23`](5081f23), [`bcd13dc`](bcd13dc)]: - @graphiql/react@1.0.0-rc.0 ## @graphiql/plugin-collections@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`5081f23`](5081f23), [`bcd13dc`](bcd13dc)]: - @graphiql/react@1.0.0-rc.0 ## @graphiql/plugin-doc-explorer@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`5081f23`](5081f23), [`bcd13dc`](bcd13dc)]: - @graphiql/react@1.0.0-rc.0 ## @graphiql/plugin-history@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`5081f23`](5081f23), [`bcd13dc`](bcd13dc)]: - @graphiql/react@1.0.0-rc.0 - @graphiql/toolkit@1.0.0-rc.0 ## @graphiql/plugin-query-builder@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`5081f23`](5081f23), [`bcd13dc`](bcd13dc)]: - @graphiql/react@1.0.0-rc.0 ## @graphiql/react@1.0.0-rc.0 ### Patch Changes - [#4594](#4594) [`5081f23`](5081f23) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Load a GraphQL worker from the matching `monaco-graphql` major in the esm.sh worker setup helper. This keeps GraphQL completion and diagnostics compatible with the bundled Monaco Editor. - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - @graphiql/toolkit@1.0.0-rc.0 - graphql-language-service@6.0.0-rc.0 - monaco-graphql@2.0.0-rc.0 ## @graphiql/toolkit@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. ## graphql-language-service@6.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. ## graphql-language-service-cli@4.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - graphql-language-service-server@3.0.0-rc.0 - graphql-language-service@6.0.0-rc.0 ## graphql-language-service-server@3.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - graphql-language-service@6.0.0-rc.0 ## monaco-graphql@2.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - graphql-language-service@6.0.0-rc.0 ## vscode-graphql@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. - Updated dependencies [[`bcd13dc`](bcd13dc)]: - graphql-language-service-server@3.0.0-rc.0 ## vscode-graphql-execution@1.0.0-rc.0 ### Patch Changes - [#4595](#4595) [`bcd13dc`](bcd13dc) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Move the GraphiQL 6 package family from beta to release candidate versions. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Trevor Scheer <trevor.scheer@gmail.com>
During the beta, caret ranges for internal packages could resolve to stale canary or `next` builds because those prerelease identifiers sorted after `beta`. We pinned the package family to exact compatible versions to avoid selecting those builds. The `rc` identifier sorts after the stale prerelease identifiers, so this restores the caret ranges across the published packages and examples without waiting for GA. A fresh install of `graphiql@^6.0.0-rc.0` resolves the complete internal package family to the RC versions. Refs: #4471, #4571, #4219
## What was wrong Each part of GraphiQL using `useGraphiQLSettings()` kept its own copy of the preferences. Changing the theme in the Settings dialog did not update a plugin that was already open. If that plugin then changed another setting, such as density, it could save its outdated theme value and undo the change. The GraphiQL shell could also show an old theme when the editor finished loading after a theme change. ## What changed Settings are now shared between callers on the same page. When one caller changes a preference, the change is combined with the latest settings, saved, and sent to the other callers. Changes made in another browser tab are picked up as well. Each caller then applies the current appearance settings to its own part of the interface. During server rendering, the hook uses defaults so preferences are not shared between visitors. ## Coverage and scope Tests cover the Settings dialog and another caller staying in sync, changes to different preferences preserving each other, and the editor loading after a theme change. The older theme actions in `stores/theme.ts` still use their separate storage key and are unchanged here. Their interaction with these settings needs a separate compatibility decision.
) The [custom `Transport` example](https://github.com/graphql/graphiql/blob/a539b83cac07d3987a8098346b1647a0ddec67f4/docs/migration/graphiql-6.0.0.md#L346) calls `JSON.parse` before returning its HTTP metadata. If a server responds with HTML for a 503, `send()` throws `SyntaxError` and the integration loses the actual status, headers, timing, and byte counts. This keeps the sample's successful JSON path and converts only a parse failure into a client-generated `GraphQLError` with an explicit HTTP message. The result still carries the original response metadata, and `ok` is false. Fetch and abort failures continue to reject. The text below the sample explains that the fallback error came from the client rather than the GraphQL server.
With Vite 7.3.1, the published v6 RC's Prettify action leaves GraphQL queries and JSONC variables unchanged unless consumers force Vite to optimize `prettier/parser-graphql` and `prettier/parser-babel`. The console reports `Couldn't resolve parser "graphql"` and `Couldn't resolve parser "jsonc"`. `@graphiql/react` currently imports those legacy parser paths and assembles partial plugin objects. This switches the lazy imports to Prettier's ESM `plugins/graphql`, `plugins/babel`, and `plugins/estree` modules and passes the complete plugins to `prettier.format`. It sets `trailingComma: 'none'` for JSONC so the modern plugin retains GraphiQL's existing output. In a clean standalone Vite consumer with only the guide's worker exclusions, the published RC reproduces both parser failures; a package built from this branch formats both editors in development and production preview without those optimizer includes. The changeset releases the fix in `@graphiql/react`. The first commit makes the import change. The second captures the JSONC output regression exposed by Cypress, and the third preserves the existing output.
The GraphiQL 6 migration guide explains the major breaking changes and new APIs, but readers have no short inventory of smaller features they can adopt after upgrading. This adds an optional-features section near the end, with brief entries for response views, custom saving, plugin transport hooks, and display settings. The response-view and settings entries describe behavior already present on `graphiql-6`. The plugin-hooks link targets the section in draft #4605, and the custom-saving link targets `#custom-save-handlers` in draft #4608. Merge this PR after those sections land so both local links resolve.
The GraphiQL 6 migration guide covers host-side `transport` setup but omits the [plugin transport hooks](https://github.com/graphql/graphiql/blob/a539b83cac07d3987a8098346b1647a0ddec67f4/packages/graphiql-react/src/transport-hooks.context.ts#L15-L46). Plugin authors need to know when the hooks exist and how to register them without leaving duplicate callbacks behind. This adds a short subsection beside the transport guidance. Its header example uses an always-mounted `sessionActions` component, preserves existing request headers, and returns the registration cleanup from `useEffect`. It also distinguishes resolved HTTP or GraphQL error responses observed by `onResponse` from rejected requests or streams observed by `onError`.
The migration guide says theme overrides work regardless of stylesheet order, but its example has the same specificity as the built-in token selector. Tell readers to load custom CSS after `graphiql/style.css`, or use a more specific selector. Also document that appearance preferences use the shared `graphiql:settings` localStorage key rather than GraphiQL's `storage` prop. This makes the scope clear for hosts embedding multiple instances or supplying a custom storage adapter.
`GraphiQLProps` is now a union that accepts either `fetcher` or
`transport`, but not both. If your wrapper uses `interface AppProps
extends GraphiQLProps`, switch to a type intersection such as `type
AppProps = GraphiQLProps & { applicationName: string }`, even if you
keep using `fetcher`.
GraphiQL added the `operationName` prop in 2016, before tabs existed, so an embedder could choose which operation to send. With multiple tabs, one top-level name now overrides requests from every active document. The same name can refer to different operations in different tabs, or to nothing in the active tab. It also hides the Run picker and freezes cursor-driven selection (the case found in #4604). As the editor gained tab-specific selections, a Run picker, and run-at-cursor, the usefulness and expected behavior of a global override became less clear. This removes the prop from `GraphiQL` and `GraphiQLProvider`. Run sends the operation selected in the active tab through either `transport` or `fetcher`. Embedders can still observe changes with `onEditOperationName` and select an operation in the active tab with `useGraphiQLActions().setOperationName()`. The migration guide explains the removal. TypeScript integrations will see the removed prop in their type checks; for JavaScript integrations it is ignored. The execution test covers two tabs with overlapping operation names. Tab switches now refresh operation facts immediately. The Run control and method warning use the active document even when another tab has an operation with the same name. Refs #4604
On the v6 branch, one Save action calls every registered plugin handler and `onSaveQuery`. A host with its own saving behavior and the default Collections plugin can write to two destinations. Collections also reports a linked save complete before an asynchronous storage adapter commits, and a later completion can mark newer editor text as saved. This makes `registerSaveHandler` the only Save hook and rejects a second registration. Custom save plugins replace `COLLECTIONS_PLUGIN` in `DEFAULT_PLUGINS`; the migration guide shows a complete `sessionActions` recipe. A handler returns `Promise<boolean>`: `true` records the submitted query snapshot after persistence, `false` leaves it dirty, and a rejection shows an error. Repeated saves of one tab run in order. Collections now waits for its adapter for linked operations and the save dialog, so cancellation and storage failure leave the tab unsaved. The dirty indicator still compares query text; variables and headers travel in the submitted tab but do not independently change that indicator. The release note is folded into the existing Collections changeset. The first commit reproduces competing and asynchronous saves. Later commits remove the top-level prop and make promise completion the only save handler contract.
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to graphiql-6, this PR will be updated.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ `graphiql-6` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run `changeset pre exit` on `graphiql-6`.⚠️ ⚠️ ⚠️ ⚠️ ⚠️ ⚠️ # Releases ## graphiql@6.0.0-rc.1 ### Major Changes - [#4610](#4610) [`b40d7fe`](b40d7fe) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Remove the `operationName` prop from `GraphiQL` and `GraphiQLProvider`. Each request now uses the operation selected in the active tab. Use the cursor, Run picker, or `useGraphiQLActions().setOperationName(name)` to select an operation; `onEditOperationName` still reports selection changes. ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. - [#4601](#4601) [`abf1c84`](abf1c84) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Keep appearance settings synchronized between `useGraphiQLSettings` consumers, including the built-in Settings dialog and plugins. - Updated dependencies [[`541682b`](541682b), [`b40d7fe`](b40d7fe), [`a539b83`](a539b83), [`abf1c84`](abf1c84)]: - @graphiql/react@1.0.0-rc.1 - @graphiql/plugin-collections@1.0.0-rc.1 - @graphiql/plugin-doc-explorer@1.0.0-rc.1 - @graphiql/plugin-history@1.0.0-rc.1 - @graphiql/plugin-query-builder@1.0.0-rc.1 ## @graphiql/react@1.0.0-rc.1 ### Major Changes - [#4610](#4610) [`b40d7fe`](b40d7fe) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Remove the `operationName` prop from `GraphiQL` and `GraphiQLProvider`. Each request now uses the operation selected in the active tab. Use the cursor, Run picker, or `useGraphiQLActions().setOperationName(name)` to select an operation; `onEditOperationName` still reports selection changes. ### Patch Changes - [#4606](#4606) [`541682b`](541682b) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Load Prettier's ESM plugins so GraphQL queries and JSONC variables and headers can be prettified in Vite development builds without forced dependency optimization. - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. - [#4601](#4601) [`abf1c84`](abf1c84) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Keep appearance settings synchronized between `useGraphiQLSettings` consumers, including the built-in Settings dialog and plugins. - Updated dependencies [[`a539b83`](a539b83)]: - monaco-graphql@2.0.0-rc.1 ## cm6-graphql@1.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## @graphiql/plugin-code-exporter@6.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## @graphiql/plugin-collections@1.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## @graphiql/plugin-doc-explorer@1.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## @graphiql/plugin-history@1.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## @graphiql/plugin-query-builder@1.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## graphql-language-service-cli@4.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. - Updated dependencies [[`a539b83`](a539b83)]: - graphql-language-service-server@3.0.0-rc.1 ## graphql-language-service-server@3.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## monaco-graphql@2.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. ## vscode-graphql@1.0.0-rc.1 ### Patch Changes - [#4474](#4474) [`a539b83`](a539b83) Thanks [@trevor-scheer](https://github.com/trevor-scheer)! - Restore caret ranges for internal GraphiQL dependencies. The RC versions sort after the stale canary and `next` versions that beta ranges selected, so the exact pins from the beta cycle are no longer necessary. - Updated dependencies [[`a539b83`](a539b83)]: - graphql-language-service-server@3.0.0-rc.1 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
The optional-features list links to `#custom-save-handlers`, but that section was replaced by [Saving with your own plugin](https://github.com/graphql/graphiql/blob/d3f2e0ff74e4a2b3c39d590c4e431fca1ccada79/docs/migration/graphiql-6.0.0.md#saving-with-your-own-plugin). It also still describes host and plugin save hooks. Point the link at the existing section and describe the single registered custom save handler.
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tracking PR for the GraphiQL v6 redesign effort. This is the long-running integration branch that hosts work-in-progress against
main.Individual PRs target
graphiql-6and produce alpha releases via changesets pre-mode. When v6 is ready to ship, this branch will be merged intomain.See discussion #4219 for background and progress updates.
Closes #734 — the visual query builder ships in v6 as
@graphiql/plugin-query-builder.