Changelog

The latest changes and updates in Gadget
October 14, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Shopify shops move to expiring access tokens automatically

Gadget now moves your installed Shopify shops from non-expiring offline access tokens to expiring ones in the background. Before, a shop only switched when a merchant opened your app, so shops whose merchants rarely open it stayed on the old token. Shopify requires public apps to use expiring tokens by January 1, 2027. After that date, requests made with a non-expiring token get authentication errors.

The migration runs for Shopify connections on API version 2026-04 or later that were set up through the Partner Dashboard or Dev Dashboard. Custom apps created in a store's admin are not affected. Gadget exchanges each shop's token with Shopify and keeps the new one refreshed from then on. Merchants don't see anything and don't need to reinstall. Shops that already have an expiring token are skipped, and upgrading a connection to 2026-04 or later starts its migration automatically.

To start the migration now instead of waiting, go to Settings -> Shopify in the editor and click Migrate shops to expiring tokens below your connection's API version. The button only shows while at least one installed shop still has a non-expiring token. Shopify revokes a shop's old token once it is exchanged, so this can't be undone.

What you may need to do:

  • Connections on an API version before 2026-04 are not migrated. Upgrade the connection before January 1, 2027.
  • Code that reads accessToken from the shopifyShop model and passes it to its own Shopify client can start failing once that shop migrates. The old token is revoked, and the new one expires after about 60 minutes and changes every time Gadget refreshes it. Use connections.shopify.getAccessToken() instead. Clients from connections.shopify.current, forShopId(), and forShopDomain() already handle this, including clients created just before a shop migrated: they load the new token and retry the request once.
  • Shops whose current token Shopify rejects can't be migrated in the background. The merchant needs to open your app in their Shopify admin to get new tokens.
October 13, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Faster and more reliable cancellation for large queues

Cancellation of large background action queues now reads less data and processes more pending jobs per batch, reducing the risk of timeouts. Interrupted attempts no longer report successful completion, and partial cancellation failures now return a failed status with available cancellation counts.
October 13, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify TOML comparisons support custom production domains

Framework 1.7 and later now uses your production environment’s primary domain when comparing development and production Shopify TOML files. This prevents false configuration mismatch warnings during deploys and ensures TOML standardization preserves your custom production domain. No app changes are required.
October 10, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Removed stale Shopify credentials from deleted TOML files

Shopify development apps using framework 1.7 or later now clear app settings linked to deleted Shopify TOML files when the development environment starts. This prevents outdated secrets from overriding credentials in remaining linked files. Existing files retain their credentials even if their TOML is invalid, and no app code changes are required.
October 10, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify sign-ins now sync with settings checks

Shopify sign-ins completed during Release new version now sync with Gadget, allowing settings checks to use the latest credentials. If a check requires sign-in or is temporarily unavailable, the warning now clarifies that the app is still linked and provides the appropriate next step.
October 10, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Development environments recover from hung app starts

Fixed an issue where a development environment could keep serving old code if an app hung during startup. New code and environment variable changes now replace the hung start instead of waiting behind it, allowing the environment to reload with the latest version.
October 10, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify configuration checks handle inaccessible organizations

Fixed repeated editor errors when your Shopify account can't access the organization linked to an app. The editor now shows when Shopify configuration status can't be verified, clears stale configuration problems, and retries failed checks less frequently. Editing the TOML file or completing a deployment still triggers an immediate check.
October 9, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Get Shopify access tokens for custom clients

Apps using their own Shopify API client can now call connections.shopify.getAccessToken() to get a valid Admin API access token and its expiry. Specify a shopId or shopDomain, or use the current shop.
October 9, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify B2B purchasing company fields populated during order syncs

Shopify order syncs now populate purchasing company, company location, and company contact relationships even when the shopifyOrder model doesn’t include the purchasingEntity field. The app must have read_customers access. To populate these relationships on existing orders, run an order sync that covers those records. Draft orders aren’t included in this change.
October 8, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Reliable retries for Shopify sync timeouts

Temporary connection timeouts during Shopify syncs now retain their original error instead of being reported as invalid upsert input. This allows retryable failures to be retried automatically. Gadget also now recognizes Shopify's writecashtracking and read_rollouts access scopes.
October 8, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Docs
•
gadget

Corrected Shopify shop-specific registration field name

Updated the v1.7 migration guide and framework upgrade details to use shopSpecificRegistration instead of shopSpecificWebhooks. The documentation now matches the field name in the shopifyShop model and more accurately describes metafield-based webhook registrations created for each shop through the Shopify GraphQL API.
October 7, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•

Cancel all pending jobs in a queue

You can now clear a queue’s pending background actions directly from the Queues page. Cancellation covers waiting, scheduled, and retrying jobs across all pages and priorities, while running jobs and other queues are left alone. Open More options → Cancel queue…, choose a queue or enter its exact name, and review the pending-job count before confirming. Track its progress and see the result after switching tabs or reloading the page. Cancelling jobs doesn’t pause the queue. New jobs arriving while cancellation is in progress may also be cancelled.
September 24, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Support for XCG currency in Shopify models

Added XCG to the predefined currency options for Shopify models, keeping currency fields aligned with Shopify’s GraphQL schema across all supported API versions.
September 24, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Authentication
•
gadget

System-admin access checks no longer deny models or actions

Fixed a bug where the system-admin role could be denied access to models or actions even when an app’s permissions were configured correctly. App code, background actions, scheduled actions, and the editor can now access these resources without unexpected GGTPERMISSIONDENIED errors. Gadget also no longer writes unnecessary per-model or per-action permission rules for the system-admin role.
September 24, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Docs
•
gadget

Load testing guide

A new guide explains how to load test Gadget apps in production using tools like k6. It covers testing actions, routes, and pages, staying within rate limits, stopping tests when rate limiting occurs, shaping traffic based on request costs, cleaning up test data, and interpreting results in the operations dashboard.
September 21, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fixed Shopify orders stuck at outdated payment statuses

When Shopify sends authorized and paid order webhooks with the same timestamp, Gadget now checks Shopify's current order state before applying the update. This ensures orders reflect the latest payment status regardless of webhook delivery order.
September 21, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify API upgrades now update linked TOML files

Shopify API version upgrades now update webhooks.api_version in every linked TOML file while preserving comments and custom content. The upgrade also refreshes canonical webhook topics and starts the Shopify CLI deployment flow, keeping webhook configuration aligned with the upgraded connection.
September 19, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Support for new Shopify access scopes

Gadget’s Shopify connection now recognizes Shopify’s newly documented access scopes. This includes read and write access for checkoutsettings, deliverypromises, marketplacereturns, mobileplatformapplications, and serverpixels, writemarketplaceorders, readshopifypayments, readcapital, readshopifypaymentsaccountssensitive, and readshopifypaymentslegal_entities
September 18, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

More reliable nightly Shopify reconciliation

Fixed an issue where one Shopify connection timing out could prevent later connections in the same nightly batch from being reconciled. Connections are now queued independently, so one slow connection won't stop non-webhook fields and missed webhooks from being backfilled for other apps.
September 17, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Prevent unintended Shopify webhook deletion during deploys

Fixed an issue where a deploy could delete per-shop Shopify webhook subscriptions even when the app config was still present. Full webhook unregistration now verifies that the relevant app config was removed before deleting subscriptions. If it’s still present, unregistration is skipped and a warning is logged, preventing shops from silently missing webhooks and falling behind on synced data.
September 16, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Fixed code editor loading errors after switching environments

Fixed a misleading file-loading error that could appear after switching between environments, even when the code editor had loaded successfully. The editor now waits for the active TypeScript service, ignores failures from obsolete loading attempts, and preserves completion and hover functionality after switching or reopening the editor.
September 16, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Correct Shopify Collect syncs for flexible collections

Shopify API 2026-07 syncs now create legacy shopifyCollect records only for custom collections. Flexible and smart collections are excluded, while shopifyCollectionProduct continues to sync resolved membership for every collection type. Existing shopifyCollect records previously created for flexible collections aren't removed by this change.
September 15, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify installation rejection details in app logs

When Shopify rejects the first Admin API request after a successful token exchange, app logs now include Shopify's response status, error message, and request ID. This makes failed installations easier to diagnose.
September 14, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fixed false Shopify application URL mismatch errors

Legacy Shopify apps using framework versions before 1.7 could report an application URL mismatch even when their TOML configuration was correct. Gadget now refreshes cached shopify.app.*.toml settings when an environment starts, clearing stale errors and allowing automated ggt deploy commands to continue without --allow-problems.
September 1, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Fixed incorrect file loading errors in the code editor

Fixed a spurious “There was an error loading your files into the code editor” message that could appear when opening the code editor, even when files loaded correctly. Transient errors during file loading are now retried, and language services continue working when TypeScript checks paths that don't exist.
August 12, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•

Fix the editor freezing on apps with many files

We've fixed an issue where opening the editor on an app with a large file tree could freeze the browser tab partway through loading, right after the "fetching data" stage. It was most visible on Windows, where Chrome showed "Page Unresponsive" and never recovered, while the same app opened normally on macOS. The editor sent your entire file tree to the TypeScript language server in one blocking step; it now sends it in bounded batches, so loading no longer locks up the page. If part of that hand-off fails, you'll be asked to refresh rather than ending up in an editor that is missing type information.
August 6, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt-v3-1-1-available

ggt update notifications now link to the correct GitHub release for the available version.
July 30, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify reconciliation syncs skip unnecessary sub-resource fetches

Shopify reconciliation syncs no longer fetch a record’s sub-resources when an action’s shopifyFilter rejects the parent record. Apps that sync resources such as order line items, fulfillments, or product variants will make fewer Shopify API calls during nightly reconciliation, reducing pressure on Shopify API rate limits. Sub-resources referenced by the filter are still fetched, so filter behavior remains unchanged.
July 29, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt-v3-1-0-available

ggt v3.1.0 adds new commands for managing model fields and Shopify connections:Add, remove, and rename model fields with ggt field, including relationship fields, constraints, and Shopify metafield linksEnable Shopify models with ggt model add --type shopifyConfigure connections with ggt shopify connect, review connection details with ggt shopify status, and start filtered data syncs with ggt shopify syncKeep ggt dev and ggt logs running by automatically retrying WebSocket subscriptions after transient errorsPrevent ggt dev from crashing when a file is deleted while it’s being read
June 29, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix harness event Redis memory leak

We've fixed an issue with Redis memory leakage where developer harness event streams were never bounded or expired. These unbounded streams could exhaust the shared Redis memory, causing the Gadget assistant to fail with an out-of-memory error. Harness event streams are now length-capped and expire automatically.
June 26, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Assistant
•
gadget

Fix assistant Redis OOM issue

We've fixed an issue where the Gadget AI assistant could encounter an internal OOM command not allowed error. Now, assistant result streams automatically expire to prevent the underlying store from being exhausted. If the assistant faces transient infrastructure pressure, it will show a clear "temporarily unavailable, please try again" message instead of a raw internal error.
June 23, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix for Shopify token backoff suppression

Fixed an issue where a Shopify shop could get stuck failing all Shopify API calls with 401 errors due to a legacy non-expiring access token. Now, re-opening the embedded app reliably mints a fresh access token instead of being suppressed by an internal retry backoff.
June 6, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Fix install-or-render.data 404s in Shopify apps

Embedded Shopify apps using React Router 7 or Remix no longer display a "Page Not Found" error when merchants navigate using the app name in Shopify Admin's left nav. This update introduces a platform-side handler that intercepts .data requests, returning a soft redirect to the app home, ensuring seamless loading without user intervention.
May 25, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Drag-and-drop role reordering on permissions page

We've added drag-and-drop functionality for reordering roles directly on the access control / permissions page. This update allows you to arrange role columns by dragging headers, similar to column reordering in the data viewer. Previously, role order could only be modified by manually editing accessControl/permissions.gadget.ts through ggt.

May 6, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Progressive charging for long-running DB queries

Database rate limiting now charges progressively higher rates for long-running queries. Short queries are unaffected, but queries that hold database connections for longer now consume the rate-limit budget faster, protecting your app from a single misbehaving operation exhausting database resources and slowing down everything else.

April 23, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•

New logging syntax and commands due to ClickHouse logs migration

The syntax used to query environment logs has changed due to our under the hood migration of our logging infrastructure from Loki to ClickHouse. Lucene query syntax is now used for all logs queries. See the logs docs for more info and examples.

The logger API used to write to logs is unchanged.

April 22, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Surge threshold visualization added to ops dashboard

The Request rate limit usage chart in the ops dashboard now includes a visual indicator for the surge threshold. A yellow dashed line and background indicate when workers are reaching or exceeding their surge limit. This enhancement helps distinguish the surge threshold from the hard max limit, providing a clearer view of resource usage.

April 8, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Support for Shopify API version 2026-04

We've added support for Shopify API version 2026-04, which includes several updates:

  • Model spec changes to accommodate new field additions and removals.
  • Webhook updates including new topics like progressReported and manuallyReportedProgressStopped.
  • Field deletions like permitsSkuSharing in the FulfillmentService model.
  • Structural changes such as the new discriminated union in SubscriptionBillingAttemptState.

For a detailed list of changes, please refer to the full notes provided in the documentation.

April 8, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Support for Shopify expiring offline access tokens

Gadget now automatically requests expiring offline access tokens for Shopify apps on API version 2026-04 and above. This is required by Shopify for all public apps. Access tokens expire after 60 minutes and are refreshed using stored refresh tokens.

Existing shops will be upgraded to expiring tokens the next time a merchant opens the app in the Shopify admin. No code changes are required in your apps.

April 6, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

New Shopify apps use Polaris web components

New Shopify apps now use Polaris web components for admin frontends.

web/components/AppBridgeNavigate sets up a listener for "shopify:navigate" events dispatched by s-link web components and routes them using the client-side router.

March 25, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Gadget framework version 1.7.0: Shopify TOML's as the source of truth

We have released Gadget framework version 1.7.0, which shifts all Shopify app configuration into your shopify.app.toml files, including webhook subscriptions, filters, and access scopes.

Previously, Gadget set up Shopify access scopes and webhook configuration via API. For apps made with the Shopify CLI, this configuration is TOML-based. Framework version 1.7.0 unifies Gadget's connection configuration with Shopify's TOML spec, so your app configuration can be controlled with the TOML file like any other Shopify app.

You can still use the Gadget editor to set up connections, select access scopes and data models, add Shopify webhook triggers to actions, or add Shopify webhook filters. This configuration will also be captured in the TOML.

(Note that metafield webhook payloads are still registered by Gadget via API when they added to a Shopify model. We do not include them in webhook payloads if metafields are added directly to the TOML files.)

Gadget automatically migrates your configuration when you upgrade to v1.7.0. See the migration guide for more details.

March 23, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Add copy-as-JSON buttons to data viewer

We've added new capabilities to the data viewer that allow users to easily copy data as JSON:

  • ‍Per-row copy button: Click the copy icon next to each row's delete button to copy the row as a JSON object.
  • ‍Multi-select copy button: Select multiple rows via checkboxes and use the "Copy records" button to copy all selected rows as a JSON array.

Both features serialize only visible fields using their API identifiers and replace password field values with "<omitted-password-value>" for security.

March 19, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Fix applied to renameModelField mutation logic

The renameModelField mutation now correctly enforces field rename permissions, preventing unauthorized renaming of system or connection-owned fields marked as non-renamable. Users attempting to rename such fields will encounter an InvalidUserInputError. This ensures integrity and security in field management.

March 19, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

Release of ggt v3.0.0

A new version of ggt is now available with several major updates:

  • ggt now requires Node.js 22 or later. Ensure you're using a supported Node version to continue receiving updates.
  • The ggt logs command now prints recent logs and exits by default. Use --follow for streaming. New filtering options include --start and --log-level.
  • New resource-first ggt action add and ggt model subcommands enhance development workflows.
  • Overhauled CLI help output for better usability with structured formatting and example guides.
  • Introduced ggt completion command for generating shell completion scripts for various shells.
March 19, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Auto-expand complex field selections in GraphQL operations

We've introduced automatic expansion of complex field selections in GraphQL operations. Now, fields like RichText, File, and RoleAssignments can be selected with true instead of manually specifying all sub-fields. This update simplifies the selection process while continuing to respect explicit partial selections.

March 13, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Fix colors for threshold limits on request-rate chart

Previously, the request-rate chart failed to display the visual indicators for usage exceeding defined thresholds. The Y-axis was incorrectly capped, preventing over-threshold visuals. This fix updates the computeYScale logic, ensuring the chart correctly displays data points above the hard limit, bringing back the over-threshold colors.

March 5, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix redirect loop with no Shopify installs

We've fixed an issue where clicking "Install app" on the Shopify Installs page would cause a redirect back to the Connections page if all shop installs were previously removed. The modal now correctly stays open, allowing for a new install.

March 4, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix ChatGPT OAuth invalid_scope error

ChatGPT started requesting openid and offline_access scopes during OAuth authorization. Gadget's OIDC provider was only assigning the user scope to dynamically registered clients, like those created during ChatGPT plugin setup, even though the provider advertised all three scopes as supported.

This caused node-oidc-provider to reject the openid scope as not allowed for the client, resulting in an invalid_scope error. The fix updates dynamically registered clients to inherit all scopes the provider supports so ChatGPT OAuth flows complete successfully.

March 2, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt v2.3.0 release

ggt v2.3.0 has been released!

  • ggt env is a new command for managing development environments from the terminal. You can now list, create, rename, activate, and delete environments easily. This makes it easier to work with git worktrees and worktree managers like OpenAI's Codex.
  • ggt agent-plugin update will update existing agent plugins, ensuring you always have the latest features and fixes.
March 2, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Empty directories no longer recreated

Empty parent directories are no longer recreated when deleted in the web editor.

February 26, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Chart tab persistence in ops dashboard

Chart tab selections in the operations dashboard are now serialized to the URL, allowing for shareable links that preserve tab selections, and persisted preferences across page reloads and navigation.

February 25, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Option to copy non-secret environment variables on dev environments creation

When creating new development environments, you can now copy non-secret environment variable values from the source environment.

"Copy environment variable values" is now an option!

‍

February 25, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Show/hide options in ops dashboard chart tables

A new right-click context menu with options for controlling line visibility has been added to the chart tables on the operations dashboard.

Better control over line visibility
February 24, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Arrange columns on a model's data page

You can now Arrange columns on your model's data page. This allows you to manually sort column order, and toggle column visibility.

Sort column order or toggle column visibility
February 24, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt v2.2.0 release

The new version 2.2.0 of ggt introduces new commands for managing environment variables, running JS snippets using your API client, and fetching issues from the problems drawer.

February 24, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Fix csrfToken parsing in react-router action functions

We would not always parse the csrfToken properly when it is used to submit forms in react-router action functions, resulting in and unauthenticated session context and GGT_PERMISSION_DENIED errors. This has been fixed, and the context in action functions will now have the correct session record and any roles/permissions granted to that session.

See the docs for an example of submitting forms with react-router.

February 23, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Consistent handling of model pluralization in Gelly views

We've fixed a bug in computed views where omitting the space between a pluralized model selection and the opening { would unintentionally remove the last character from the pluralized model identifier in the result. This ensures consistent pluralization in API client results.

February 13, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Import environment variables from another environment

You can now sync environment variable keys and non-secret values between development and production environments. An Import missing variables button is now on the environment variables page in the web editor. Click it to sync missing variables from another environment.

Import env vars from another environment
February 13, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Fix framework upgrade dependency issues

This update resolves issues where framework upgrades could cause duplicate @gadgetinc/react installations and "not wrapped in a Gadget Provider" errors. This often happened when using @gadgetinc/react-shopify-app-bridge or @gadgetinc/react-bigcommerce.

The fix ensures that these packages are updated concurrently with @gadgetinc/react during upgrades, preventing peer dependency mismatches.

February 10, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Support for nullable non-required enums

enum fields marked as required: false will now include null as a possible value. This change allows for better flexibility and alignment with expected behaviors when handling enums in the API client.

February 9, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Fix role selectability when duplicating unselectable roles

When duplicating an unselectable role like shopify-app-user and renaming it, the new role can now be selected and assigned to an API key, resolving previous limitations.

February 9, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
js-clients

New findAll, iterateAll APIs

findAll and iterateAll APIs have been added to your auto-generated API. When you do need to fetch all records for a model, you can use these APIs to simplify bulk reading and pagination.

iterateAll is recommended, as it is less time and memory intensive, and allows you to process records one at a time using for await:

for await (const record of api.task.iterateAll({
  select: { id: true },
  filter: {
    // add filter conditions, if possible
  },
})) {
  // process each record one at a time
}

findAll returns a flat array of records:

const allRecords = await api.task.findAll({
  select: { id: true },
  filter: {
    // add filter conditions, if possible
  },
});

‍findAll the info in the API docs.

February 9, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Framework version 1.6.0 released: configurable non-webhook fields for Shopify

Developers can upgrade their Gadget projects to framework version 1.6.0. This framework version includes support for configurable fetching on non-webhook fields and related models for Shopify apps.

Instead of automatically fetching model data not included in Shopify webhooks, non-webhook fields and models can be configured to only be fetched on sync or reconciliation:

‍schema.gadget.ts files for Shopify models also contain properties to track this configuration through source control:

export const schema: GadgetModel = {
  type: "gadget/model-schema/v1",
  storageKey: "DataModel-Shopify-Product",
  fields: {
    // fetch the seo field on product webhooks
    seo: {
      fetchData: "onWebhook",
    },
  },
};

See how to configure your non-webhook fields in the docs.

February 3, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt v2.0.2 (patch release): Fix "e.split is not a function" error in environment logs

The latest patch addresses an issue where the error "e.split is not a function" would occur in environment logs. This fix ensures that non-string message values are converted to strings before processing, handling cases where logs from the server might have missing or non-string messages.

February 3, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt commands unpause development environments

ggt commands that connect to or update environments, including ggt push, ggt pull, ggt add, and ggt deploy, will now automatically unpause development environments when run.

January 30, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Prevent asset build failures caused by build process interruptions

Fixed an issue where asset builds, like yarn build, could fail with exit code 1 during deployments, even when the underlying build completed successfully. This was caused by the build process being interrupted during routine infrastructure scaling. Builds now properly complete before the system recycles resources.
January 29, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Copy button added to input panel in action history

We've added a copy-to-clipboard button in the Input section of the background action details page to make it easy to copy the action payload.

January 29, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify CLI connection flow: account confirmation and switch account

We've added the ability to switch Shopify accounts during the connection setup flow. Users can now see which Shopify account they're connected to and switch to a different account if needed.

January 29, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Docs
•
skills

Claude skill for Gadget best practices now available

A Claude Skill that captures Gadget best practices is now available.

Download the skill with

npx skills add gadget-inc/skills --skill gadget-best-practices

and start using it with /gadget-best-practices. It is compatible with all tools that support skills, including Claude Code and Cursor.

See the GitHub repo for instructions and sample prompts.

January 27, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Sort records by related model values

Gadget now supports sorting the results of findMany, findFirst, and maybeFindFirst queries by values in related models, across belongsTo relationships.

For example, sorting posts by author name, where each post belongsTo author:

// sort the post records
await api.post.findMany({
	sort: {
    	// by the name of the author
    	author: {
    		name: "Ascending"
		}
  	}
});

See the docs for more information.

January 20, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Support vector distance calculations in JS client

We've added support for arguments in scalar fields, enabling the selection of vector distance computations, cosine similarity or L2 distance, in read‍ queries.

For example:

await api.document.findFirst({
  select: {
    id: true,
    body: true,
    embeddingCosineSimilarityTo: {
      [api.$args]: { vector: [1, 2, 3] },
    },
  },
});

See the docs for more information.

January 19, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Docs
•
gadget

Serve docs as markdown

The Gadget docs can now easily be copied as markdown for working with local agent tools like Cursor or Claude Code. Copy the markdown manually with the in-docs button or add .md to a docs page route, for example:

https://docs.gadget.dev/guides/getting-started/what-is-gadget.md
January 8, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
ggt

ggt v2.0.1 patch release

The ggt 2.0.1 patch introduces automatic retries for HTTP requests encountering transient SSL/TLS errors, such as ERR_SSL_SSL/TLS_ALERT_BAD_RECORD_MAC and EPROTO. This improves resilience against network issues during SSL/TLS handshakes.

January 8, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Support for Shopify API version 2026-01

We've upgraded to Shopify API version 2026-01 with the following changes:

  • The returnReason field on the ReturnLineItem resource is deprecated and replaced with a new ReturnReasonDefinition object connection.
  • Introduced a new model ShopifyReturnReasonDefinition.
  • The variant field on InventoryItem is deprecated, moving from a hasOne to a hasMany relationship.

See all API version changes in the docs.

January 7, 2026
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Ops dashboard now available in the editor

A new operations dashboard is now available in the Gadget editor.

The ops dashboard provides visualizations that allow you to monitor the status, traffic, and usage for your apps and environments. With the ops dashboard, you can:

  • see a breakdown of HTTP status codes and errors, and monitor your overall app traffic
  • monitor CPU and memory usage for your serverless workers
  • check up on database storage, reads, and writes
  • determine how often you make use of the search API (powered by Elasticsearch)
  • review your background action usage and get per-queue information

See the docs for more information on individual visualizations.

December 22, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•

Data editor: Cmd+S save shortcut

Added Cmd+S keyboard shortcut* to save changes in the Data Editor, preventing the browser’s “Save this page” popup.
December 19, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Use adaptive rate limiter for manual requests to Shopify

You can hook into the rate limiter Gadget uses for Shopify syncs when making manual requests to Shopify’s API using background actions. Enqueue an action that makes a request to Shopify with the current shop context when you want to transform the response from Shopify:

export const onSuccess: ActionOnSuccess = async ({ api, connections }) => {
  // the processCustomOrders action calls the Shopify API
  await api.enqueue(api.processCustomOrders, {
    // pass the shopifyShop ID to the background action
    shopifyShop: connections.shopify.currentShopId,
    // ...
  });
};

Or enqueue the shopify-api-node client call directly for durable writes:

export const onSuccess: ActionOnSuccess = async ({ api, connections }) => {
  const shopify = connections.shopify.current;

  // enqueue the productCreate mutation
  await api.enqueue(shopify.graphql, {
    query: `mutation ($input: ProductCreateInput!) {
    productCreate(product: $input) {
      product {
        id
        title
      }
      userErrors {
        field
        message
      }
    }
  }`,
    variables: {
      input: {
        title: "Cool socks",
      },
    },
  });
};

‍Read more about Shopify rate limit handling in the docs.

December 18, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Improved JSON file error handling in code editor

JSON files that can't be parsed now display error messages in the problems drawer. The error details are converted into file positions, similar to the system used in CodeMirror's JSON extension. This allows error squiggles to be displayed in the code editor, enhancing the debugging process.

December 17, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•

Updated list of outbound IP addresses

Starting today, Gadget may use 34.171.201.14 as an outbound IP. This IP was announced previously. Starting March 1st 2026, Gadget may also use 136.113.237.21 as an outbound IP. You must update your allowlists with this new IP before March 1st 2026.

December 12, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Vite 7 upgrade and sandbox restart fix

We've upgraded new apps to use Vite 7. This update addresses a bug related to development app loads during sandbox restarts. The restructuring ensures the Vite client always loads properly, avoiding failed connections and hydration issues with the app.

December 10, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

Multi-session terminal support

We're excited to introduce multi-session support in the Gadget editor's terminal. Users can now create and manage multiple concurrent terminal sessions. A new sidebar UI displays all active sessions, showcasing the current running command or "new shell" if idle.

Sessions persist across drawer events and are automatically managed when environments switch.The assistant now has session awareness, reading from the selected terminal session and routing commands intelligently to avoid interruptions.

December 10, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix orphaned webhooks on filter change

We've resolved an issue where some webhook registrations were orphaned when an action's shopifyFilter changed, leading to duplicate webhooks with different filters.

December 8, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

GGT version release: 2.0.0 (requires Node 20)

With the release of ggt v2.0.0, several major changes have been implemented:

  • Node.js 20 or later is now required as Node.js 18 has reached end-of-life and no longer receives updates. Ensure your environment is using a supported version for security purposes.
  • The new ggt debugger command has been added. It enables debugging via the Chrome DevTools Protocol on localhost:9229 and includes support for VS Code configuration.
  • The .gadget/backup/ directory has been removed. Files will now be permanently deleted instead of being moved, as modern source control covers file recovery more effectively.
  • Deprecated the ggt sync alias and removed support for .gadget/sync.json files from ggt v0.4.x.
December 2, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Update to Tailwind CSS v4

Web applications now start with Tailwind CSS version 4, incorporating updated shadcn components. Documentation is included for upgrading existing applications from Tailwind v3 to v4.

To learn more, read the docs.

December 2, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
API
•
gadget

Select fields for API search queries

You can now specify which fields to search within API calls using the new searchFields parameter. This feature allows you to define the fields that are included in the search and assign relative weights to each field for better ranking control. Select specific fields to search:

const results = await api.post.findMany({ 
	search: "gadget",
    searchFields: { 
    	title: true, 
        content: true, 
    },
 });

Boost field importance with weights:

const results = await api.post.findMany({ 
	search: "gadget", 
    searchFields: { 
    	title: { weight: 2.0 },
        content: { weight: 1.0 },
        tags: { weight: 0.5 }, 
    },
});

This enhancement is available on findMany, findFirst, maybeFindMany, and maybeFindFirst APIs for models with search indexing enabled, requiring framework version 1.5.0+.

‍See the docs for more info.

November 14, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
•
gadget

Gelly function dateFormat added

The new dateFormat function has been introduced for Gelly, allowing you to format dates similarly to Postgres's to_char function. This provides a straightforward way to convert dates to strings like 2025-08 with leading zeros for months.
November 12, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Shopify default search and filter field configurations added

We've introduced configurations where new Shopify apps will have only a select number of models and fields with search/filter indexes enabled by default. This change optimizes index usage based on analysis of access patterns in the last 90 days, ensuring efficiency and cost-effectiveness.
November 7, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix for Sentry connection configuration issue

A background migration has been added to ensure Sentry connections are correctly linked to the most recent Sentry environment configuration. This update also removes any unassociated duplicates, enhancing overall connection integrity.
November 6, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•
gadget

Release of framework version 1.5 with selective indexing

Preact hook support for Shopify extensions (API v2025-10+)

You can now use Gadget’s Preact hooks to read and write data in your Shopify extensions. The @gadgetinc/preact API mirrors

@gadgetinc/react, making migrations easier. useActionForm and component-related hooks aren’t available.

 @gadgetinc/shopify-extensions now includes a Preact <Provider />: import { Provider } from "@gadgetinc/shopify-extensions/preact"

Manual index selection on fields

Choose which fields are indexed for sorting, filtering, and search. Sort/filter indexes use Postgres; search indexes use Elasticsearch. This reduces storage costs and gives finer control over query performance and relevance. 

The Shopify model schema now shows which fields are indexed, improving visibility into data optimization.

Trigger type schema change

The shopify_sync trigger type now distinguishes between syncs and webhook reconciliations. Webhook-based actions use the new type shopify_webhook_reconciliation. This helps separate sync logic from reconciliation logic and is also reflected in the billing dashboard.

Internal refactor for Preact support

@gadgetinc/api-client-core

has been replaced with @gadgetinc/core. Shared client logic now lives in the generated client, simplifying architecture, improving performance, and reducing dependencies.

Computed fields in public API

Computed fields are no longer returned by default in public API queries — they must now be explicitly selected.

November 3, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Frontend
•
gadget

Background action management improvements

The background action management interface has been enhanced with the following updates:
  • Reintroduced the Cancel all, Delete all, and Retry all buttons for improved user control.
  • The index page now uses URL query parameters to define state, making URLs shareable for consistent navigation experience.
November 3, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Update Shopify CLI to version 3.86.1

The Shopify CLI package has been updated to version 3.86.1 in the Gadget editor terminal
November 3, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Code Editor
•
gadget

App URL mismatch validation for managed installs

The Gadget editor's problems drawer now accurately reports any app URL mismatches in TOML files when using managed installs.
October 29, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Gadget CLI
•
ggt

ggt v1.7.4 release

Added retry handling for "Files version mismatch" errors in ggt push to improve reliability.
October 28, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Assistant
•
gadget

Context limit warning in assistant conversations

A new update introduces a warning banner for assistant conversations, alerting users when they're nearing the context limit. This feature ensures users are informed about potential restrictions on conversation length.
October 28, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Framework
•

New spend limit feature

We've added a new spend limit feature to the billing page. You can now set a monthly spend alerts and maximum spend for your billing account. If the alerts are reached, all team members will receive an email notification. If the spend limit is reached, all apps will be paused and won't serve new requests. You can change the spend limit at any time.
October 27, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fix sync issues with Shopify models not including shopifyUpdatedAt field

Fixes a bug within the Gadget sync logic in which models that do not have a shopifyUpdatedAt field were not correctly getting records updated upon nightly reconciliation sync.
October 23, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Standardize ruleset and sortOrder on ShopifyCollection

The rules and sortOrder fields on ShopifyCollection have been standardized to match their incoming REST webhook shapes, ensuring consistency in data.
October 23, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Added missing enums for Shopify API version 25-10

New enum options have been added to some fields in Shopify API version 2025-10. The following updates have been made: ShopifyProduct*: Added UNLISTED to the status field. ShopifyFulfillment*: Added CARRIERPICKEDUP to the displayStatus field.
October 22, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Connections
•
gadget

Fixed sync errors caused by incorrect Shopify Admin API scope checks

We resolved an issue where fields requiring special scopes in the Shopify Admin GraphQL API weren't properly queried due to incorrect scope checks. The system was mistakenly using the app's requested scopes rather than the shop's actual granted scopes. This fix ensures accurate representation of access scopes during syncs.
October 15, 2025
⚠️  Breaking change
Bug fixes
Feature improvement
New feature
Assistant
•
gadget

Claude 4.5 deployed as top-level agent

Claude 4.5 is now the top-level agent and code generator for the Gadget assistant. This applies to all applications across the platform.