Ready to maximize your revenue?Book a Demo
TOPCODE
Shopify Cli

Shopify CLI 3.50 release notes

Last updated on June 2, 2026

Shopify CLI 3.50 release notes

TOPCODE

Shopify CLI 3.50 is one of the most substantial releases in the 3.x series. It ships several developer-experience improvements that have been requested since the move from the legacy Ruby-based CLI to the current Node.js-powered toolchain, including a long-awaited overhaul of how extension scaffolding works, first-class support for Shopify Functions written in JavaScript, and meaningful speed improvements to the dev server that powers local app development. This post walks through every notable change, explains the rationale behind breaking adjustments, and gives you a concrete upgrade path.

Release Highlights

The headline feature in 3.50 is the unified shopify app generate extension command, which replaces the old shopify app scaffold extension alias entirely. Beyond the rename, the generator now prompts you to choose a template variant (React or vanilla JS for UI extensions, TypeScript or AssemblyScript for Functions) in a single interactive flow instead of requiring separate flags. The scaffolded files are also updated to reflect the latest recommended patterns — for example, UI extensions now scaffold with the @shopify/ui-extensions-react 2024 API surface rather than the older extend entry point.

The dev server received a substantial internal rewrite. The hot-module replacement pipeline for UI extensions now uses esbuild's incremental API under the hood, cutting typical rebuild times from 800–1200 ms to under 200 ms on a cold-cache file save. For apps with many extensions the change is even more pronounced: previously, saving a single file triggered a full re-bundle of every extension target; in 3.50 only the affected target rebuilds. The shopify app dev command also now clearly prints the extension preview URLs by target type (checkout, admin, theme) without requiring you to hunt through verbose output.

JavaScript Shopify Functions (using the javy WebAssembly runtime) graduate from experimental to stable in this release. The shopify app function run command and the unit-test harness (shopify app function typegen) both now support JS Functions with the same fidelity as AssemblyScript. This matters because you can now share utility code between your app's backend and your Functions without maintaining a separate AssemblyScript codebase.

v3.50.0January 18, 2026

  • added

    New `shopify app generate extension` command replaces `shopify app scaffold extension`. The generator now presents an interactive language/template picker (React UI extension, vanilla JS UI extension, TypeScript Function, AssemblyScript Function, Subscription contract, etc.) and scaffolds files matching the latest recommended API surface. The `scaffold` alias is retained but prints a deprecation notice.

    Run `shopify app generate extension --type product_subscription` to scaffold a new subscription UI extension, or omit `--type` to get the interactive menu. All scaffold templates are stored under `node_modules/@shopify/cli/assets/templates` and can be inspected directly.

  • added

    JavaScript Shopify Functions are now stable. The `javy`-based WASM compilation path is enabled by default for Function extensions whose `shopify.extension.toml` declares `type = "function"` and the entry file is `.js` or `.ts`. `shopify app function typegen` generates typed GraphQL input/output types for JS Functions using the same pipeline as AssemblyScript.

    You must add `"@shopify/shopify_function": "^1.1.0"` to your extension's package.json for the JS Functions runtime to resolve correctly. The CLI will warn you at build time if the package is missing.

  • changed

    Dev server HMR pipeline rewritten to use esbuild's incremental build API. Only the extension target whose source file changed is rebuilt, not the entire bundle. Average rebuild latency dropped from ~1000 ms to ~180 ms on a MacBook Pro M2 with a 6-extension app.

  • changed

    `shopify app dev` output now groups extension preview URLs by surface (checkout, admin, theme app extension) and prints them after the initial build completes. The previous behaviour buried URLs inside scrolling log lines. The `--no-tunnel` flag now also prints a local network address so teammates on the same WiFi can load extensions without Cloudflare tunnels.

  • changed

    The `shopify app deploy` command now validates extension TOML configuration files against the Partner API schema before uploading. Configuration errors (invalid capability declarations, missing required fields, unknown extension targets) are surfaced as structured errors with line numbers rather than opaque API error responses.

    The validation step adds ~1–2 seconds to deploy time in exchange for dramatically faster feedback on configuration mistakes. You can bypass it with `--skip-validation` but this is not recommended.

  • fixed

    Fixed a race condition in `shopify app dev` where hot-reload websocket messages were dropped when two extensions rebuilt simultaneously. This manifested as extensions appearing stuck on the previous version in the browser without a manual reload.

  • deprecated

    `shopify app scaffold` is deprecated and will be removed in CLI 4.0. All usages should migrate to `shopify app generate`. The `scaffold` command prints a deprecation warning pointing to the migration guide. Automated codemods for CI scripts are available in the `@shopify/cli-migrate` package.

    If you have shell scripts or Makefile targets that call `shopify app scaffold`, update them to `shopify app generate --type <type> --name <name>` at your earliest convenience.

  • removedbreaking

    The `--legacy-runtime` flag for UI extensions has been removed. Apps that were opting in to the pre-2023 extension rendering pipeline via this flag must migrate to the current `@shopify/ui-extensions-react` API. The legacy pipeline has been sunset on the Shopify side as well, meaning extensions built against it will stop rendering in production after 2026-03-01.

    Check your `shopify.extension.toml` files for `legacy_runtime = true` and remove that key. Then update your extension's React code from the deprecated `extend()` entry point to the new `reactExtension()` / `BlockStack` component model described in the UI Extensions migration guide.

Upgrade Guide

Upgrading to 3.50 is straightforward for most apps, but there are two areas that require action: removing --legacy-runtime usages (a hard breaking change) and updating any CI pipelines that still call shopify app scaffold (soft deprecation, but will break in 4.0). Run npm install -g @shopify/cli@latest or pnpm add -g @shopify/cli@latest @shopify/app@latest to get the new version. You can confirm the installed version with shopify version.

For the legacy runtime removal, the migration path is well-documented by Shopify. Open each extension's shopify.extension.toml and remove any legacy_runtime = true lines. In your extension entry file, replace the old extend('Checkout::Dynamic::Render', (root) => { ... }) pattern with the reactExtension('purchase.checkout.block.render', () => <MyComponent />) pattern. The new API maps directly to checkout extension targets, which are listed in the extension targets reference.

If your app uses Shopify Functions, bump @shopify/shopify_function to ^1.1.0 and re-run shopify app function typegen to regenerate the type bindings. The generated generated/api.ts file will have updated type signatures for the Input and FunctionResult types. Any compilation errors in existing Function code will guide you to the specific fields that changed — the most common breaking change is that cart.lines now returns a typed CartLine[] rather than unknown[] in the discount Function input type.

What to Expect in 3.51

The team has signalled that 3.51 will focus on improved monorepo support — specifically, a new shopify.config.ts root configuration file that can declare workspace relationships between multiple apps in a single repo. There are also open issues tracking a --watch flag for shopify app deploy that would enable continuous deployment in staging environments. For the full changelog and roadmap, see the official Shopify CLI CHANGELOG on GitHub.

Senior Shopify Engineer

Frances Chen

Keep reading