App development
Shopify Static Apps, explained: serverless apps with hosting and auth handled
Shopify Static Apps let you ship a real app with no server: Shopify hosts it, App Bridge and Polaris are auto-injected, and auth is handled. Here is when to use one.
Bas Lefeber
Founder, learnshopify.dev · June 19, 2026 · 7 min read
Most small Shopify apps are mostly boilerplate. You want to add a single admin screen that edits a metafield, or a button that triggers a bulk job, and before you write a line of the feature you are provisioning a server, wiring OAuth, validating session tokens, mounting App Bridge, and pulling in Polaris. The interesting part is small. The plumbing around it is large, and it is the part that costs you a hosting bill and a security surface forever.
Shopify's Spring '26 Edition introduced Static Apps to remove exactly that plumbing. They went generally available on June 17, 2026. This post explains what they are, the boilerplate they delete, when to reach for one over a full app, and how the related App Events API ties into the new usage-based app pricing.
TL;DR
A Static App is a Shopify app you build with no server of your own. Shopify hosts the frontend, auto-injects App Bridge and Polaris, and handles authentication through direct API access. You store merchant data in metaobjects and metafields instead of your own database. Reach for one when the app is a frontend over Shopify's own data. Reach for a full hosted app when you need a backend you control: webhooks, third-party integrations, background jobs, or your own datastore.
What Shopify Static Apps are
Per the announcement, you can build and deploy a fully functional Shopify app without running a server. Shopify handles the hosting, App Bridge and Polaris are auto-injected, and authentication is handled by direct API access. In other words: the deliverable is your app's static frontend, and the parts that normally force you to run infrastructure are provided by the platform.
Break the four pieces apart, because each one maps to a chunk of code you no longer write:
- Hosting: Shopify serves your built assets. There is no Node process, container, or serverless function of yours to deploy, scale, or pay for.
- Authentication: handled by direct API access, so you are not writing the OAuth dance or session-token verification yourself.
- App Bridge: auto-injected, so your app is embedded in the admin (navigation, toasts, the resource picker, modals) without you bootstrapping it.
- Polaris: auto-injected, so your UI matches the rest of the admin out of the box. App Bridge makes the app work inside Shopify; Polaris makes it look like Shopify.
The piece people miss is the data layer. A Static App has no backend of yours, so where does merchant data go? Shopify's answer: Static Apps can leverage metaobjects and metafields to store relevant merchant data. Metafields attach custom values to existing resources (a product, a customer, an order). Metaobjects are your own custom data types when nothing built-in fits. Both live in the merchant's store, governed by Shopify, which is why the announcement frames this as a win for agencies: no hosting costs and no separate datastore whose security you own.
This is a real architectural pattern, not a shortcut
Storing custom data in metafields and metaobjects instead of a private database is the platform-native approach Shopify has pushed for years. A Static App is that principle taken to its conclusion: if your data lives in Shopify and your logic is a frontend over it, you do not need a server at all. The constraint forces the right design.
The boilerplate they remove
If you have scaffolded a traditional embedded app, you know the shape of the work before the work. A conventional admin app needs, at minimum:
- A server or serverless backend you provision, deploy, monitor, and pay for.
- The OAuth install flow plus session-token exchange and verification on every request.
- App Bridge setup and a Polaris provider wired into your frontend.
- A database, plus the migrations, backups, and access controls that come with owning merchant data.
For an app whose entire job is "show a screen, read and write some Shopify data," that stack is almost entirely overhead. Static Apps collapse it. You build the frontend; hosting, auth, App Bridge, and Polaris are handled, and your data lives in metafields and metaobjects. The work that remains is the feature, which is the part you actually wanted to build.
Confirm the exact workflow in the docs before you scaffold
Static Apps are new as of the Spring '26 Edition. The CLI commands, project structure, and configuration are evolving, so check the current Shopify developer documentation and the Spring '26 Edition announcement for the authoritative setup steps. This post stays conceptual on tooling on purpose: shipping against a half-remembered command is how you lose an afternoon.
When to use a Static App vs a full app
The deciding question is not "how big is the app." It is where does the logic and data need to live. A Static App is the right tool when the app is a frontend over Shopify's own data and the platform can carry the rest.
Reach for a Static App when:
- The app is mainly an admin UI that reads and writes Shopify data.
- Your custom data fits in metafields and metaobjects (bulk editors, configurators, internal tools for one merchant, agency one-offs).
- You do not want to own hosting, auth, or a database, and you want the build to look native via Polaris with no setup.
Reach for a full hosted app when:
- You need a backend you control: webhook processing, scheduled jobs, or long-running tasks.
- You integrate with third-party services and hold secrets or do server-to-server calls.
- Your data does not fit Shopify's model and genuinely needs your own database.
- You need server-side logic on storefront or checkout traffic, which is often a Shopify Function rather than an app server at all.
That last point is the one developers get wrong most often. "App" is not the only place commerce logic can live. The decision spans theme, app, and Function, and picking the wrong layer is expensive to undo. We have a free lesson on exactly that call.
Learn this properly · free lesson
App vs theme vs Function: which tool for which job
Where should commerce logic live: the theme, an app, or a Shopify Function? This lesson walks the decision with real scenarios so you choose the right layer before you write code. Free to try.
Try this lesson — freeThe App Events API and the new app pricing
Shipping without a server changes how you observe an app in production. The Spring '26 Edition pairs Static Apps with the App Events API, which accepts any event from your app that you want to track. You define an event_handle and attributes (the announcement gives examples like bulk_edit_completed, report_generated, onboarding_completed, and email_sent), and the event flows into your Dev Dashboard Logs automatically. No external analytics tool to switch into to see what your app is doing.
The events are also a billing primitive. Shopify App Pricing runs through this API: you send billable events and custom app events to one endpoint, Shopify meters them automatically, calculates charges based on the pricing model you configured, and puts them on the merchant's Shopify invoice. That is how usage-based pricing works under the new model: charge per report generated, per bulk edit completed, per email sent, and let Shopify do the metering and billing instead of building it yourself.
Why this matters for the no-server model
A Static App has no backend to run your own usage metering or analytics. The App Events API fills that gap: observability and billing both ride on events you emit, metered and invoiced by Shopify. The serverless app and the events API are two halves of the same idea, push the operational concerns onto the platform so you ship the feature.
Where this leaves app developers
Static Apps do not replace full apps. They remove a category of app that never should have needed a server: the admin frontend over Shopify's own data. If you build small apps, internal tools, or agency one-offs, the default just changed. Start by asking whether the data fits metafields and metaobjects and whether the logic is a frontend. If both are yes, you can ship without provisioning anything, and meter usage through the App Events API on top.
The judgment that still matters is the modelling: deciding what is a metafield versus a metaobject, and which resource owns which data. Get that wrong and a serverless app is just as painful to maintain as a server-backed one. That is the durable skill, and it is the one worth learning properly.
Learn this properly · free lesson
Where should this data live: tag, metafield, or metaobject?
Metafield or metaobject? Which resource owns it? This lesson teaches the data-modelling judgment a Static App depends on, the part Shopify does not decide for you.
Try this lesson — freeStatic Apps are one piece of a larger release. For the full developer rundown of the Spring '26 Edition, see our Spring '26 Edition for developers overview.
Frequently asked questions
What are Shopify Static Apps?
Static Apps, introduced in the Shopify Spring '26 Edition (GA June 17, 2026), let you build and deploy a fully functional Shopify app without running a server. Shopify handles hosting, App Bridge and Polaris are auto-injected, authentication is handled by direct API access, and merchant data is stored in metaobjects and metafields rather than your own database.
How are Static Apps different from regular Shopify apps?
A regular app runs on a backend you provision, deploy, and pay for, with your own OAuth flow, App Bridge and Polaris setup, and usually your own database. A Static App removes all of that: Shopify hosts the frontend, handles auth, auto-injects App Bridge and Polaris, and stores your data in metafields and metaobjects. The trade-off is that a Static App has no backend you control, so it suits frontends over Shopify's own data rather than apps needing webhooks, third-party integrations, or background jobs.
Do Static Apps need their own hosting?
No. Shopify hosts the app's frontend for you, which is the point of the feature. There is no server, container, or serverless function of yours to deploy or pay for. The announcement highlights this as a win for agencies, since they no longer carry hosting costs or own the security of a separate datastore.
What is the App Events API?
The App Events API accepts any event you want to track from your app. You define an event_handle and attributes (for example bulk_edit_completed or report_generated), and the event flows into your Dev Dashboard Logs automatically. It also powers Shopify App Pricing: you send billable and custom events to one endpoint, and Shopify meters them, calculates charges from your configured pricing model, and adds them to the merchant's Shopify invoice.
On the launch list
Get updates on the platform.
Same waitlist as the homepage. New posts plus a heads-up when v1 launches. No drip, no spam.
About the author
Bas Lefeber, Founder, learnshopify.dev
Bas builds learnshopify.dev, where developers learn production-grade Shopify theme development against a live storefront. He writes about Liquid, theme architecture, and the parts of the job that still matter now that AI writes the code.
Keep going in the curriculum
