Architecture
Reviewed 25 August 2026
Build vs buy: when a Shopify app is enough
A public app, a custom app, a Shopify Function, a Flow workflow, and a Hydrogen storefront are five different purchases. Mixing up the nouns is how a 40-SKU brand ends up paying for a headless team to replace a discount.
Who this is for
Operators who have been quoted a six-figure Hydrogen rebuild to solve a wholesale price list, and developers who need a merchant-readable way to say no. If the job is “which apps do we install in year one,” start with new-store categories instead.
Build vs buy on Shopify is not “hire developers or open the App Store.” It is choosing the smallest surface that can own the job: a public app, Shopify Flow, a Function inside an app, a custom app (often Plus if it contains Functions or checkout UI), or a custom storefront with Hydrogen.
Shopify’s Functions docs are explicit about plan gates: stores on any plan can use public App Store apps that contain Functions; only Plus can use custom apps that contain Function APIs. Some Function capabilities are Plus-only even in public apps. Checkout UI custom apps sit in the same Plus bucket. Hydrogen is a storefront decision, not a checkout-logic decision. Keep those boxes separate.
How this was researched
Checked 25 August 2026 against About Shopify Functions (public vs custom app availability, Rust recommendation for large carts) and Function API availability notes. Agency “Hydrogen vs Liquid” posts often sell the rebuild. We keep Hydrogen on the last rung.
Key takeaways
- Buy the app when the vendor’s network is the product (deliverability, subscriptions dunning, helpdesk, reviews syndication).
- Use Flow when the if/then lives entirely in Shopify objects you already have (Basic and higher).
- Use Functions when you need cart/checkout backend logic that must be fast and upgrade-safe.
- Custom Functions and custom checkout UI apps: Plus. Do not promise them on Basic or Grow.
- Hydrogen is for teams that need to own routing, data fetching, and storefront UX. It does not replace Klaviyo, and it does not add Plus checkout blocks to a non-Plus shop.
- Never rebuild a commodity category in month six because a pitch deck said “composable.”
The decision ladder
Walk from the top. Stop at the first rung that holds.
- Native Admin — tags, metafields, markets, native SEO, checkout branding, Shopify Messaging. Cost: attention.
- Shopify Flow — automations on Basic and higher. Cost: a workflow someone must own.
- Public app — App Store, review process, billing through Shopify. Cost: monthly + scopes. Use the install protocol.
- Theme work — OS 2.0 blocks, a developer on a duplicate theme. Cost: theme debt. Good for presentation; bad for billing engines.
- Functions via a public app — you configure; Shopify executes WebAssembly at cart/checkout. Cost: the app’s bill. Availability: all plans for many discount functions; check each API.
- Custom app — your (or your agency’s) app, installed on your shop. Custom Function APIs and custom checkout UI: Plus. Tokens: see data access.
- Hydrogen / headless — you own the storefront. Admin, checkout (Shopify-hosted), and apps still exist. Cost: an engineering team forever.
First two rungs, from Shopify’s own App Store listings.
Hydrogen does not delete the App Store. It moves the theme problem into a React problem.
When a Shopify app is enough
Buy when the hard part is not your business logic. Reviews need collection UX, fraud fighting, and Google syndication. Email needs deliverability and a flow editor. Helpdesk needs a board on top of orders. Subscriptions need dunning and a portal. You will not beat those teams on a 12-week contract.
Buy the network. These are category examples from apps.shopify.com, not a recommended stack.
Buy also when Shopify already did the platform work and you only need configuration: selling plans, Checkout Extensibility blocks on the surfaces your plan allows, pixels in customer events. “We should build our own review widget” is usually theme nostalgia, not strategy.
The App Store review process and Built for Shopify bar exist so you are not the QA department for a random script. Custom code in the theme has no review team. That is not a reason to never write Liquid; it is a reason not to write a second ESP.
Functions and Flow: backend without a storefront rewrite
Shopify Functions inject logic into Shopify’s backend. Input is a GraphQL query; output is JSON operations; runtime is WebAssembly. Shopify recommends Rust for large carts; JavaScript is supported. Merchants never hit a Function URL. Shopify runs it when a customer carts or checks out.
Typical Function jobs: custom discount types, cart/checkout validation (block checkout when quantity rules fail), bundles (cart transform), delivery option rename/hide (often Plus), payment customization (often Plus), order routing. After Shopify Scripts died on 30 June 2026, Functions are the replacement path—not a new Script Editor.
Flow is the sibling for async Admin events: order created → tag → Slack. Flow is not a discount calculator at checkout. If you try to use Flow as a checkout gate, you will lose the race. If you try to use a Function to send a marketing email, you are in the wrong tool—Functions are constrained and are not a general HTTP worker (network access for Functions is a special, tightly limited capability).
| Need | Tool | Notes |
|---|---|---|
| Tag wholesale orders | Flow | Basic and higher |
| Tiered discount on cart | Function (often via app) | Public app: all plans; custom Function app: Plus |
| Hide a payment method for a tag | Payment Function | Check Plus on the API page |
| Gift message on checkout | Checkout UI extension | In-checkout: Plus; Thank you is not the same |
| ERP sync every 15 minutes | Custom or public app | Jobs, queues, retries—not a Function |
| Unique storefront UX across many channels | Hydrogen or other headless | Team required |
Custom apps: when buy-the-logo fails
Commission a custom app when the logic is yours and no listing will stay in scope: a B2B pricebook in metafields that must validate at checkout, a 3PL that is not in the App Store, an internal allocation tool. Write the job as if it were an App Store listing. If you cannot, you do not have a spec.
Plan gate: custom apps that contain Shopify Function APIs are Plus. Custom checkout UI that sits on information/shipping/payment is Plus. A custom Admin app that only talks to the Admin API (export, sync, internal UI) can exist on non-Plus shops, but you still hold the tokens. Staff access and rotation are the security model.
Do not let a partner hide a Function inside a “private app” on Basic and then act surprised when Shopify refuses the capability. Read Function API availability before the statement of work.
When Hydrogen is the job (and when it is vanity)
Hydrogen is Shopify’s toolkit for custom storefronts, commonly hosted on Oxygen (Shopify’s hosting) via the Hydrogen channel. You can also go headless with the Headless channel and host elsewhere. Liquid Online Store remains the default: Shopify renders and caches HTML; you theme it.
Consider Hydrogen when: you have a dedicated storefront team, you need routes and content models the theme editor cannot express, you are stitching multiple sales channels into one UX, and you accept that app compatibility, analytics, and SEO become your code. Do not consider Hydrogen because Core Web Vitals on a neglected theme are poor—fix embeds first (bloat). Do not consider Hydrogen to “customize checkout”; checkout stays Shopify-hosted, with the same Plus vs non-Plus rules.
A 20-SKU brand with three apps and no engineer should not be on Hydrogen. Community threads about migrating Hydrogen back to Liquid exist for a reason: the backend (products, orders, customers) was always Shopify. You were paying to rebuild the window display.
SOW filter (ask the agency)
- Which rung on the ladder did you skip, and why?
- Is this a Function, a UI extension, a theme task, or a storefront rewrite?
- Which plan features does this require (Plus, Thank you blocks only, custom Functions)?
- What is the monthly cost to keep this running in 18 months?
- What is the uninstall / rollback if it fails?
Year-one stores should almost always stop at native + a few public apps. That list is in app types for a new store. Architecture vanity is just bloat with a Git repository.
Frequently asked questions
When is a Shopify app enough instead of custom development?
When the job is a known category (reviews, email, helpdesk, subscriptions, pixels) and a vendor already operates the network. Custom work wins when the rule is unique to your catalog and must run inside Shopify’s cart or Admin with no listing in scope. Start with Flow and public Function apps before a custom app.
Do I need Shopify Plus to use Shopify Functions?
Not for many public App Store apps that include Functions, especially discounts. You do need Plus to use a custom app that contains Function APIs, and some Function types are Plus even when packaged in a public app. Check the specific API’s availability table.
Does Hydrogen replace Shopify apps?
No. Hydrogen replaces the Liquid storefront layer. Checkout, Admin, billing, and most operational apps remain. Some storefront embeds will not port; you will re-implement or drop them. Treat Hydrogen as a frontend program, not as an app cull.
Should I migrate Shopify Scripts to custom code in the theme?
No. Scripts stopped executing 30 June 2026. Theme JavaScript cannot securely enforce checkout discounts or payment rules. The replacement is Shopify Functions, usually via an app, with custom Function apps limited to Plus.
What to do next
Build vs buy on Shopify is a ladder, not a slogan. Stop at the first rung that holds. If you are buying, buy thinly. If you are building Functions or checkout UI, confirm Plus on the API page before the contract.