Shopify API 2025-10: Web components, Preact (and more checkout migrations)

Shopify’s 2025-10 API release dropped yesterday (October 1st), and it came with some big updates to the frameworks and tooling used to build Shopify apps. Beyond the usual incremental improvements, there are three major changes app developers should pay attention to:
- Polaris web components are now stable and shared across admin apps and Shopify extensions
- Extensions on 2025-10 move to Preact and there is a new 64kb limit on bundle size.
- Shopify CLI apps (and Shopify apps built with Gadget) have switched from Remix to React Router.
If you’re building on Shopify, these shifts affect both how you architect apps and how you think about the future of the ecosystem.
Polaris web components go stable
For years, many Shopify developers have worked with Polaris React as the standard design system. With 2025-10, Shopify has officially stabilized Polaris web components, and they’re now shared across admin apps and extensions.
Polaris React is in maintenance mode (there does not seem to be a notification for this on the Polaris React docs site):

This is a great update. One set of framework-agnotic components across the entire app surface is a huge improvement. It standardizes and unifies styling and behaviour between embedded admin apps and extension surfaces, while reducing bundle size (because web components are loaded from Shopify’s CDN).
For developers already invested in Polaris React, the transition won’t be immediate, but it’s clear Shopify’s long-term direction is web components everywhere. They are used by default in new apps generated with the Shopify CLI, and new extensions on the latest API version.
Using Polaris web components in Gadget
You can use Polaris web components in your Gadget frontends:
1. Add <inline-code><script src="https://cdn.shopify.com/shopifycloud/polaris.js"></script><inline-code> to <inline-code>root.tsx<inline-code> to bring in the components
2. Install <inline-code>@shopify/polaris-types<inline-code> (run <inline-code>yarn add @shopify/polaris-types<inline-code> as a command in the palette or locally) and add the type definition to <inline-code>tsconfig.json<inline-code> so it minimally looks like:
// in tsconfig.json
"types": [
"@shopify/app-bridge-types",
"@shopify/polaris-types"
]
Then you can <inline-code><s-text tone="success">Start building with web components</s-text><inline-code>!
Note that Gadget autocomponents and Shopify frontends, along with the Gadget AI assistant, currently use Polaris React.
Extensions move to Preact (and get a 64kb limit)
The second major change comes to Shopify extensions. Starting with API 2025-10, UI extensions use Preact instead of React and face a hard 64kb filesize limit.
Why the shift? Shopify is optimizing for performance:
- Preact gives you a React-like developer experience but with a much smaller runtime footprint.
- The 64kb bundle cap ensures extensions load fast in the customer and merchant experience, keeping Shopify apps lightweight and responsive.
New UI extensions also use Polaris web components by default.
This is a pretty massive change to the extension ecosystem. The default 2025-07 checkout UI extension bundle size is above the 64kb limit, so it seems like React has been deprecated and all UI extensions must be migrated to Preact. This means that to use any API version past 2025-07 in UI extensions, developers will need to migrate to Preact. (Yay, another checkout migration.)
For those unfamiliar with Preact: the API is very similar to React and it supports all your favourite React hooks. (You can still <inline-code>useEffect<inline-code> yourself to death, if you choose to do so.) Check out Preact’s docs for more info on differences between it and React.
There is a migration guide in the Checkout UI extensions docs to help you upgrade from React (or JavaScript) to Preact. As of writing, a migration deadline is unknown, although I’m assuming that support for React extensions on 2025-07 will extend at least another year to match Shopify’s standard 1-year of API version support . This post will be updated if the timeline changes.
Preact extensions with Gadget
While we encourage you to make the best possible use of Shopify metafields for handling custom data in UI extensions, sometimes you do need to make an external network request to your Gadget backend to read or write data.
Gadget’s API tooling includes our React <inline-code>Provider<inline-code> and hooks that can be used with your API client to call your backend. These tools are not compatible with Preact extensions.
You can still use your Gadget API client in your Preact extensions (while we build tooling to work with Preact!):
- Install the <inline-code>@gadgetinc/shopify-extensions<inline-code> package in your extension.
- Use <inline-code>registerShopifySessionTokenAuthentication<inline-code> to add the session token to requests made using your Gadget API client.
- Use your Gadget API client to read and write in extensions.
For example, in a checkout extension:
We will update this post (and our docs!) when we are finished building out support for Preact.
Hello, React Router
The final big change is at the app framework level. New apps generated with the Shopify CLI apps now use React Router v7 instead of Remix.
This isn’t a completely new framework: React Router v7 is just the latest version of Remix. The two frameworks merged with the release of v7.
To upgrade your existing Gadget apps from Remix to React Router, you can follow the migration guide.
Shopify also has a migration guide for apps built using their CLI.
Shopify API 2025-10 available on your Gadget apps
You can upgrade your Gadget apps to API 2025-10 today!
The one breaking change that might need your attention is on the <inline-code>ShopifyStoreCreditAccount<inline-code> model. Shopify has introduced a new possible owner type for the <inline-code>StoreCreditAccount<inline-code> resource. Previously, only a <inline-code>Customer<inline-code> could be an owner. Now, a <inline-code>Customer<inline-code> OR a <inline-code>CompanyLocation<inline-code> can be related to <inline-code>StoreCreditAccount<inline-code> records.
You can upgrade your Shopify API version on the Shopify connection page in the Gadget editor.
A changelog with updates to your app’s affected models will be displayed in the editor before upgrade, and is also available in our docs.
Looking forward
The move to Polaris web components open the door for more drastic changes to how Shopify apps are built and the framework that powers the default CLI app experience. Shopify acquired Remix, and Remix 3 is under development. (And Remix 3 was originally going to start as a Preact fork, although that line has been crossed out in the post.)
We’re working to build tools to better support Preact in extensions. We will try to keep this post up to date, the latest information can be found in our docs.
If you have any questions, reach out to us on Discord.