Shopify App Development in 2026: What's Changed and What Matters
A current guide to building Shopify apps in 2026, covering Remix, App Bridge, billing, and the latest platform requirements.
The State of Shopify App Development
Shopify's app development ecosystem has matured significantly. If you're starting a new Shopify app today, the landscape looks very different from even two years ago. Here's what you need to know.
The Stack: Remix Is Standard
Shopify's recommended app framework is Remix with React. The Shopify CLI generates a full project scaffold:
npx @shopify/create-app@latest my-app
cd my-app
npm run dev
This gives you:
- Authentication — OAuth flow handled automatically
- Session management — via Prisma with SQLite (dev) or PostgreSQL (prod)
- App Bridge — embedded admin interface
- Polaris — Shopify's React component library
- Webhook handling — boilerplate for common events
Why Not Next.js?
Shopify moved away from their Next.js template. Remix's server-first approach aligns better with Shopify's requirements for authenticated server-side API calls. Loader functions in Remix naturally handle the pattern of fetching Shopify data before rendering.
App Bridge 4.x
App Bridge is the JavaScript library that lets your embedded app communicate with the Shopify admin. Key changes:
- No more Redux-based state — App Bridge 4 uses a simpler event system
- Navigation is declarative — use
NavMenucomponent from@shopify/app-bridge-react - Session tokens replace cookies — more secure, works across all browsers
import { NavMenu } from '@shopify/app-bridge-react';
export default function App() {
return (
<>
<NavMenu>
<a href="/app" rel="home">Dashboard</a>
<a href="/app/settings">Settings</a>
</NavMenu>
<Outlet />
</>
);
}
Billing: App Purchases API
Monetizing your app requires Shopify's billing API. All payments go through Shopify (who takes a commission):
import { authenticate } from '../shopify.server';
export async function action({ request }) {
const { billing } = await authenticate.admin(request);
const billingResponse = await billing.require({
plans: [{
name: 'Pro Plan',
amount: 9.99,
currencyCode: 'USD',
interval: 'EVERY_30_DAYS'
}],
onFailure: async () => {
return redirect('/app/pricing');
}
});
return billingResponse;
}
Free vs Paid: The Strategic Decision
- Free apps get more installs but no direct revenue
- Freemium (free tier + paid features) is the most common model
- Paid only works for niche, high-value apps
- Usage-based billing is available for apps with variable value delivery
Webhooks: Mandatory Compliance
Shopify requires apps to handle specific webhooks for compliance:
customers/data_request— respond with customer datacustomers/redact— delete customer datashop/redact— delete all shop data after uninstall
// app/routes/webhooks.tsx
import { authenticate } from '../shopify.server';
export const action = async ({ request }) => {
const { topic, shop, payload } = await authenticate.webhook(request);
switch (topic) {
case 'CUSTOMERS_DATA_REQUEST':
// Return customer data
break;
case 'CUSTOMERS_REDACT':
// Delete customer data from your database
await deleteCustomerData(shop, payload.customer.id);
break;
case 'SHOP_REDACT':
// Delete all data for this shop
await deleteShopData(shop);
break;
}
return new Response();
};
Theme Extensions: Storefront Presence
If your app needs to display anything on the storefront, use Theme App Extensions:
- App blocks — merchant-configurable UI components
- App embed blocks — scripts that run on every page
- No ScriptTag API — the old approach is being phased out
Performance Requirements
Shopify monitors app performance. Apps that are too slow face warnings or removal:
- Admin page load: Under 3 seconds
- API response time: Under 500ms for GraphQL
- Webhook response: Under 5 seconds (ideally immediate)
Optimization Tips
// Use GraphQL over REST for efficiency
const response = await admin.graphql(`
query {
products(first: 50) {
edges {
node {
id
title
variants(first: 10) {
edges {
node {
id
sku
inventoryQuantity
}
}
}
}
}
}
}
`);
Testing and Review
Development Stores
Always test on a development store created through your Shopify Partner account. These stores have unlimited trial periods and access to all features.
App Review Checklist
Before submitting to the Shopify App Store:
- All compliance webhooks implemented
- Privacy policy and terms of service pages
- App listing with screenshots and description
- GDPR data handling documented
- Performance within Shopify's benchmarks
- No unnecessary API scopes requested
- Proper error handling for rate limits
- Uninstall webhook cleans up all resources
Deployment
Railway is an excellent deployment target for Shopify apps:
- Automatic HTTPS (required by Shopify)
- Managed PostgreSQL for production
- GitHub-based deploys
- Custom domains for your app URL
Getting Started: Minimal Viable App
- Run
shopify app init - Build one core feature
- Add a Theme Extension if needed
- Implement billing
- Handle compliance webhooks
- Deploy to Railway
- Submit for review
The Shopify app ecosystem rewards focused apps that solve one problem well. Don't try to build an everything-app — find a niche, solve it better than existing solutions, and iterate based on merchant feedback.
Conclusion
Shopify app development in 2026 is more structured and opinionated than before, but that's a good thing. The Remix-based stack, App Bridge 4, and Theme Extensions provide a clear path from idea to published app. The platform handles authentication, billing, and admin embedding — you focus on your app's unique value.