A packing counter at night with a stack of kraft mailer boxes, a roll of packing tape, a card payment terminal, an open laptop and a spiral sketchbook showing a hand-drawn web page wireframe with grey paper rectangles laid on it, lit by a black desk lamp in front of shelves of boxes

Shopify Custom App, Public App or Theme Edits? Which to Use

A Shopify store picks up custom work over time. A product page needs a size chart the theme doesn’t have, a wholesale customer needs a discount rule the admin can’t express, or the warehouse system needs order data it can’t get from an export. Each change has to live somewhere: in the theme’s code, in an app installed from the Shopify App Store, in a custom app built for the store, or in one of the extension types Shopify provides for checkout and backend logic.

Those options are not interchangeable, and Shopify has spent several years steering custom work out of theme code and into apps and extensions. Stores that built their checkout on direct code edits have already had to rebuild it once. This guide covers what each option is for, what it can’t do, what survives a theme update or a Shopify change, which options need Shopify Plus, and how to decide where a given feature belongs. It expands the Shopify section of our guide to website platforms you can start without code and extend later, and it is the Shopify counterpart to Plugin, Theme or functions.php? Where WordPress Code Belongs.

Shopify changes its extension model often. Every Shopify fact here was checked against shopify.dev, the Shopify Help Center and Shopify’s changelogs on October 4, 2026.

Where Shopify custom work belongs: key facts

QuestionAnswer
Where should a storefront feature like reviews, a size chart or a chat widget go?In an app, through a theme app extension (an app block or an app embed block), rather than in edits to the theme’s code.
What happens to theme code edits when the theme updates?Shopify carries them into the updated copy only if they don’t conflict with the update. If they conflict, the Help Center says “all your code changes are removed in the updated copy.”
What is the difference between a custom app and a public app?A public app appears in the Shopify App Store, goes through Shopify’s app review and can bill through Shopify. A custom app is installed on one store, or the stores in one Plus organization, with no app review and no Shopify billing.
Can you still create a custom app in the Shopify admin?No. New custom apps are built in Shopify’s Dev Dashboard. Custom apps created in the admin before January 1, 2026 keep working but can’t use app extensions.
What needs Shopify Plus?Custom apps that contain Shopify Functions, checkout UI extensions on the information, shipping and payment steps, and the Checkout Branding API.
What happened to checkout.liquid?It stopped working for in-checkout pages on August 13, 2024, and for the Thank you and Order status pages on August 28, 2025. Checkouts that weren’t upgraded in time were moved to Shopify’s default checkout.
What other customization methods has Shopify retired?Shopify Scripts stopped running on June 30, 2026. Since October 1, 2026, apps can’t add or change script tags, and storefronts stop loading existing ones on March 1, 2027.

Shopify customization options compared

OptionWhat it’s forWho maintains itSurvives a theme update?Plan limits
Theme editor settingsLayout, sections, colors, contentThe merchantYes, carried overNone
Theme code editsDesign and templates of a theme you controlWhoever edited itOnly if the edits and the update don’t clashNone
Theme app extension (app blocks, app embed blocks)Storefront features delivered by an appThe app’s developerYes; the app’s code lives outside the themeNone
Public appFeatures many stores need, from the App StoreThe app vendorYes, when it uses theme app extensionsDepends on the app and its features
Custom appFeatures or integrations built for one storeYou and your developerYes, when it uses theme app extensionsFunctions in a custom app need Plus
Checkout UI extensionFields, banners and content in checkout and on the Thank you and Order status pagesThe app’s developerSeparate from the themeInformation, shipping and payment steps need Plus
Shopify FunctionDiscount, delivery, payment and cart validation logicThe app’s developerSeparate from the themePlus only when delivered in a custom app
Web pixelAnalytics and conversion trackingThe app’s developerSeparate from the themeAll plans except Starter

The rest of this guide covers each row in turn.

When is editing theme code the right choice?

Every Shopify theme is a set of files, mostly Liquid with HTML, CSS, JSON and JavaScript, and the admin includes a code editor for changing them. The Help Center’s page on editing theme code opens with a caution:

“If changes that you’ve made to a theme’s code are incompatible with a theme update, then all your code changes are removed in the updated copy. You should only edit your theme’s code if you can’t make the changes that you need by using a Shopify app or by using the theme editor.”

The same page recommends duplicating the theme before editing, as a backup. The code editor also keeps a Timeline view for each file, but it restores one file at a time and can’t bring back deleted files.

What happens to code edits when a theme updates

Themes from the Shopify Theme Store receive updates with new features and fixes. The Help Center’s page on updating themes explains what carries over:

  • Customizations made in the theme editor, including settings, section layouts, new templates and app embed or app extension settings, are copied into the updated theme.
  • Code edits, whether made by hand or by an installed app, are included only when they don’t conflict with the update. After the update, the theme card shows either “Theme added: code edits successfully included” or “Theme added: code edits could not be included.”
  • If the edits weren’t included, someone has to copy them into the new version by hand. The Help Center advises keeping a copy of customized code before every update.
  • Themes bought outside the Shopify Theme Store don’t get updates through this process at all.

Who supports a heavily edited theme

Shopify Support helps with some predefined customizations to Shopify’s free themes, but its theme support page is clear that “Shopify Support doesn’t write custom code or make arbitrary code changes.” Its list of things Shopify won’t take on includes any theme with significant code changes, along with third-party code, which it defines to cover snippets from forums, work by Shopify Partners and code in AI-generated theme blocks.

Where theme code belongs

Theme code is the right place for the theme’s own design: its templates, sections, styles and front-end behavior. If you own the theme, because it was built for your store or you maintain a fork of it, editing its code is normal development work. Shopify supports that workflow with Shopify CLI and a GitHub integration that syncs theme code with a repository. Our post on custom Shopify themes and Alpine.js covers one common way developers add interactivity to Liquid sections.

The trouble starts when theme code carries features the store depends on, such as a product configurator, a custom pricing display or a third-party integration. Those features are then tied to the theme: they have to be carried through every update, and they stop working when the store switches themes. It is the same distinction WordPress draws between themes and plugins. Design belongs in the theme. A feature that should survive a redesign belongs in an app.

What are theme app extensions, app blocks and app embeds?

Theme app extensions are how an app adds things to the storefront without touching the theme’s files. Shopify’s documentation says they “allow merchants to easily add dynamic elements to their themes without having to interact with Liquid templates or code,” and that apps built this way “don’t edit theme code, which decreases the risk of introducing breaking changes to the theme.”

They come in two forms, described in the theme app extension framework:

App blocksApp embed blocks
Use forInline content a merchant places on a page, such as product reviews or star ratingsFloating or invisible features, such as chat bubbles, badges, SEO tags and tracking code
Where it rendersInside a theme section, or in its own sectionInjected before the closing </head> or </body> tag
Theme supportThemes whose templates use JSON (Online Store 2.0) and whose sections accept app blocksVintage and Online Store 2.0 themes
After installNot added until the merchant places it in the theme editorOff until the merchant turns it on under Theme settings > App embeds

Either way, the feature appears in the theme editor, where the merchant can see and control it. And per Shopify’s Online Store 2.0 overview, “When an app is uninstalled by a merchant, the app code is removed with it.”

Theme app extensions have limits. They can’t render on checkout pages, they can’t read some theme-level Liquid objects such as content_for_header, and Shopify enforces size limits, including 100 KB of Liquid across all of an extension’s files and 10 MB for the extension as a whole. Apps with custom distribution can ask Shopify to raise the Liquid limit.

Shopify’s rules for apps that touch the theme

For public apps, theme app extensions are a requirement. The App Store requirements state: “If your app modifies the merchant’s theme, you need to use theme app extensions. You or merchants should not make any code changes to the theme.”

Shopify’s guide to integrating apps with online stores explains why. It warns that “If your app edits theme code, then it can take the theme off its upgrade path,” and that when a merchant removes code an app left behind, “leaving even an extra line break or space will take the theme off its upgrade path.” Custom apps aren’t bound by the App Store’s requirements, but the same reasoning applies to them.

One practical point: an app embed block is turned on per theme. If the store publishes a new theme, its app embeds and app blocks have to be enabled or placed again in that theme’s editor. The app stays installed, and nothing has to be copied out of the old theme’s code.

Should you use a custom app or a public app?

Both kinds of app use the same building blocks. Either can call Shopify’s APIs from its own server and include theme app extensions, checkout UI extensions and Functions. The difference is how the app is distributed and who reviews it.

The Help Center’s About apps page defines a custom app as “an app that you or a developer builds exclusively for your Shopify store, unlike a public app that’s built for many stores to use.” Shopify’s distribution guide sets out the rest:

Public appCustom app
Who can install itAny merchant, through the Shopify App Store (unlisted public apps are installed by link)One store, or the stores in one Plus organization, through an install link
Shopify app reviewYesNo
Billing through ShopifyYesNo
Shopify FunctionsUsable on any plan, except where a Function API says otherwiseOnly on Shopify Plus stores
Who maintains the codeThe vendorYou and your developer
Can the distribution method change later?NoNo

Choosing between them

A public app makes sense when one already does the job. Its developer maintains it, and Shopify reviewed its security before listing it. The trade-offs are that it is built for many stores rather than yours, its settings may not fit an unusual business rule, and you depend on the vendor to keep it current.

A custom app makes sense when no public app fits, when the feature is specific to your business, or when the work is an integration with your own systems, such as an ERP, a warehouse or a pricing database. You own the code. You also own its review, because Shopify’s distribution guide says custom distribution has “no app review,” so the security checks fall to you and your developer. Our guide to using AI to build WordPress plugins and Shopify apps safely covers access scopes, secrets and webhook verification for custom apps.

Some stores use both: public apps for common needs like reviews or email, and one custom app that holds everything specific to the business.

Custom apps are now built in the Dev Dashboard

Shopify changed how custom apps are created. The distribution guide notes: “You can no longer create custom apps in the Shopify admin. Existing admin-created custom apps keep working.” The Help Center adds that “If you have legacy custom apps created before January 1, 2026, you can manage them from your Shopify admin.” New custom apps are built as regular Shopify apps, managed in the Dev Dashboard and given custom distribution.

The older admin-created apps have a significant limit. Shopify’s app distribution overview says they can’t use app extensions or App Bridge. A store whose custom app was created in the admin can keep using it for API access, but adding an app block, a checkout extension or a Function means building a new app.

Apps need upkeep too

Custom apps avoid the theme update problem, but they still depend on Shopify’s APIs. According to the Help Center, Shopify releases new API versions every three months, and each version works for a year before apps must move to a newer one. When an API change breaks an app, Shopify notifies its developer, who gets 9 months to fix it. Past that point, the app becomes unsupported and the merchant sees a warning in the admin. This applies to custom apps as much as public ones, so a custom app needs someone responsible for keeping it current.

How do you customize Shopify checkout now?

Checkout is the part of Shopify that theme code no longer reaches. Theme app extensions can’t render there, and checkout.liquid is retired. Custom checkout work now runs through apps:

  • Checkout UI extensions add fields, banners, product offers and other content to checkout and to the Thank you and Order status pages. Merchants place them in the checkout and accounts editor.
  • Shopify Functions change backend logic during checkout, such as discounts and delivery or payment options. They are covered in the next section.
  • Web pixels track customer behavior for analytics and marketing.
  • Checkout branding through the GraphQL Admin API changes checkout’s appearance, such as colors and the corner radius of form fields.

Which checkout features a store can use depends on its plan. The Help Center’s checkout customization overview states: “Standard checkout customizations are available on all pages for businesses that are on the Basic plan or higher. Advanced checkout customization features are available only on the Shopify Plus plan.”

Checkout customizationBasic plan or higherShopify Plus
Checkout and accounts editorYesYes
Apps on the Thank you and Order status pagesYesYes
Apps on the information, shipping and payment pagesNoYes
Checkout Branding APINoYes

The checkout UI extensions reference confirms that extensions on the information, shipping and payment steps “are available only to stores on a Shopify Plus plan.” Shopify’s checkout technologies overview lists Thank you and Order status extensions, Functions and web pixels as available on all plans except Shopify Starter.

What can Shopify Functions do, and which plans can use them?

Shopify Functions let developers change how Shopify itself calculates parts of a purchase. Examples from Shopify’s documentation include new discount types, renaming, reordering or hiding delivery and payment options, and cart and checkout validation, such as blocking an order that exceeds a limit.

A Function is not a web page or an API endpoint. It is compiled to WebAssembly, shipped inside an app and run by Shopify during the purchase. Shopify notes that Functions “are never invoked directly by URL or otherwise.” Shopify strongly recommends writing them in Rust, and runs them within fixed limits on binary size, memory and the number of instructions executed.

The plan rule is specific. Per the Function APIs reference:

  • “Except as noted in individual API pages, stores on any plan can use public apps that are distributed through the Shopify App Store and contain functions.”
  • “Only stores on a Shopify Plus plan can use custom apps that contain Shopify Function APIs.”

For a store that isn’t on Plus and needs a discount or shipping rule the admin can’t express, that leaves two routes: a public app built on Functions that already does the job, or a move to Plus so a custom app can do it.

What happened to stores that relied on checkout.liquid?

Shopify Plus stores could once customize checkout by editing checkout.liquid, a layout file in the theme that rendered the checkout pages. Shopify retired it in stages.

DateWhat changed
February 13, 2023Shopify’s changelog announced the deprecation and the move to checkout extensibility.
August 13, 2024checkout.liquid stopped working on the in-checkout pages: information, shipping and payment.
August 28, 2025checkout.liquid and additional scripts stopped working on the Thank you and Order status pages. Script tags stopped running there for Plus stores.
August 26, 2026Deadline for stores not on Plus to move to the new Thank you and Order status pages. Order status page script tags stopped running for every remaining store.

The 2023 announcement spelled out the consequence of missing the first date: “Checkouts that aren’t upgraded on time will be automatically upgraded to an un-customized, out-of-the-box Shopify Checkout.” For the later deadlines, the Help Center’s upgrade guide for stores not on Plus says that when a store upgrades, its existing Thank you and Order status pages “and any existing customizations on those pages are replaced with the new versions of those pages.” An app’s customizations can be recreated only after its developer updates the app to use blocks or pixels, and anything in additional scripts has to be rebuilt.

Shopify’s checkout.liquid documentation now marks the file as deprecated, and its guide to building for checkout lists two upgrade routes: use a public app built with extensions, or build a custom app with extensions. Either way, the customization moved out of a code file and into an app.

Shopify Scripts and script tags followed the same path

Two more code-based customization methods have since been retired on similar terms:

  • Shopify Scripts, small Ruby programs that changed discounts, shipping and payment options at checkout, were deprecated in favor of Functions. Shopify’s developer changelog set April 15, 2026 as the last day scripts could be edited or published, and June 30, 2026 as the date they stopped running. The Help Center now states that “Any Scripts that were still published on your store have been deactivated and no longer work.”
  • Script tags, an older way for apps to load JavaScript onto a storefront, are being removed. Shopify’s script tag deprecation guide says “Theme app extensions replaced script tags in 2021.” Since October 1, 2026, apps can’t add new script tags or change existing ones, and from March 1, 2027 Shopify will no longer load them on storefronts. The changelog announcement gives the reason: script tags run JavaScript “without appearing in the theme editor, which makes them difficult for merchants to find and control.” Their replacements are app embed blocks and, for tracking-only scripts, web pixels.

Each time, the replacement runs through an app, as an extension, a Function or a web pixel. Stores already on the replacement had nothing to rebuild. Stores still on the old method had a deadline, and if they missed it, the customization stopped working.

Where should your Shopify customization live?

What you needWhere it belongsPlan notes
Change layout, colors, sections or page contentThe theme editorAll plans
Change the design or templates of a theme you own or had builtTheme code, kept in version controlAll plans
Small style or markup changes to a Theme Store themeTheme code, only if the theme editor can’t do it; keep a copy and expect to reapply after updatesAll plans
Add content to product or collection pages, such as reviews, size charts or a configuratorAn app block, from a public app or your own custom appWorks on themes that support app blocks
Add a chat widget, badge, or a script that runs site-wideAn app embed blockWorks on vintage and Online Store 2.0 themes
Track analytics or conversionsA web pixelAll plans except Starter
Add a field, banner or offer to the information, shipping or payment stepsA checkout UI extensionShopify Plus
Add content to the Thank you or Order status pageA UI extension for those pagesAll plans except Starter
Create a discount type, or rename, hide or sort delivery or payment optionsA Shopify FunctionPublic app on any plan; custom app on Plus only
Block orders that break a business ruleA cart and checkout validation FunctionSame as other Functions
Sync orders, inventory or customers with another systemA custom app using Shopify’s APIs, or a public connector if one fitsPlus not required
A feature many stores could use, which you want to sellA public app with App Store reviewNot plan-dependent

Two rules sit behind the table. If the feature should survive a redesign, it belongs in an app rather than the theme. And if the feature touches checkout or how prices, discounts and shipping are calculated, it has to be an extension or a Function, because code edits are no longer an option there.

How to check where your store’s custom code lives

You don’t need to read Liquid to get a picture of a store’s custom work. A short audit:

  1. Check the theme’s update status. In Online Store, see whether the published theme has an update available and whether past updates reported “code edits could not be included.” Repeated conflicts suggest the theme carries significant code edits.
  2. Ask what has been changed in the theme. A developer can compare the theme against a fresh copy of the same version and list every edited file.
  3. Review installed apps. Note which are public and which are custom. Custom apps created in the admin before January 1, 2026 can’t use extensions, which matters if one will need new features.
  4. Look for unsupported app warnings. The admin flags apps that use API versions Shopify no longer supports.
  5. Check App embeds in the theme editor. Theme settings > App embeds shows which apps have embeds turned on.
  6. Find script tags before March 1, 2027. Script tags don’t appear in the theme editor. Any app that still relies on them, including a custom app, needs an app embed block or web pixel before Shopify stops running them.
  7. Look for leftover app code. Apps that edit theme files can leave code behind when they’re uninstalled. Shopify requires those apps to give merchants instructions for removing it, and a developer can check for it during the theme comparison.

If an app vendor, a forum answer or an AI assistant suggests pasting code into a theme file, ask whether the change is design or a feature. Features belong in an app.

When to bring in a developer

The usual signs that a store needs a developer are a business rule no public app supports, an integration with an internal system, or a theme so heavily edited that updates keep failing. A developer can map where the store’s custom work lives, move features out of the theme into a custom app, and check which options the store’s plan allows before anything is built.

If you’d like help, see custom app development. The process and pricing are published, and you can get in touch to talk through what your store needs.

RSS Feed Newsletter
Contact us

Latest Blog Posts