
Shopify Apps
Install when you are starting or extending a Shopify app with Remix/React Router, App Bridge, webhooks, and Admin API patterns.
Overview
shopify-apps is an agent skill for the Build phase that supplies expert Shopify app patterns—CLI scaffold, embedded App Bridge, webhooks, GraphQL Admin API, Polaris, billing, and extensions.
Install
npx skills add https://github.com/sickn33/antigravity-awesome-skills --skill shopify-appsWhat is this skill?
- React Router / Remix Shopify app template and npm init @shopify/app@latest bootstrap
- shopify.app.toml configuration for application_url, access_scopes, and webhooks api_version
- Embedded app patterns with App Bridge and Polaris components
- Webhook handling route patterns and GraphQL Admin API usage
- Billing and app extensions guidance for merchant-facing Shopify apps
Adoption & trust: 764 installs on skills.sh; 40.1k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are building a Shopify app and need a coherent Remix/React Router layout, auth, scopes, and webhook handling without piecing together scattered forum answers.
Who is it for?
Indie developers launching their first paid or custom Shopify app who already know React and want agent-guided structure for OAuth, APIs, and extensions.
Skip if: Merchants configuring a theme-only store with no custom app, or teams building generic SaaS with no Shopify OAuth and billing requirements.
When should I use this skill?
Starting a new Shopify app or when the user mentions Remix/React Router Shopify apps, App Bridge, webhooks, GraphQL Admin API, Polaris, billing, or app extensions.
What do I get? / Deliverables
You get a documented project skeleton, configuration examples, and integration patterns aligned with Shopify’s app model so implementation can proceed feature by feature.
- Shopify app repo layout with routes for app, auth, and webhooks
- Configured shopify.app.toml with scopes and webhook API version
Recommended Skills
Journey fit
Shopify app construction is core product build work—auth, APIs, and merchant-facing UI—not distribution or ops monitoring. Integrations is the right shelf because the skill centers on App Bridge, webhooks, GraphQL Admin API, billing hooks, and platform extensions.
How it compares
Pattern and template guidance for Shopify’s official app stack—not a generic ecommerce REST tutorial or a storefront theme skill.
Common Questions / FAQ
Who is shopify-apps for?
Solo and small-team builders creating Shopify apps with React Router, embedded admin UI, and Admin API integrations who want procedural patterns in the agent context.
When should I use shopify-apps?
Use it in Build (integrations) when starting a new Shopify app, wiring webhooks and scopes, or adding billing and extensions before you ship to the App Store or a single merchant.
Is shopify-apps safe to install?
The skill is labeled safe and sourced from Apache 2.0 material; still review the Security Audits panel on this Prism page and validate webhook and OAuth handling against current Shopify platform policies.
SKILL.md
READMESKILL.md - Shopify Apps
# Shopify Apps Expert patterns for Shopify app development including Remix/React Router apps, embedded apps with App Bridge, webhook handling, GraphQL Admin API, Polaris components, billing, and app extensions. ## Patterns ### React Router App Setup Modern Shopify app template with React Router **When to use**: Starting a new Shopify app ### Template # Create new Shopify app with CLI npm init @shopify/app@latest my-shopify-app # Project structure # my-shopify-app/ # ├── app/ # │ ├── routes/ # │ │ ├── app._index.tsx # Main app page # │ │ ├── app.tsx # App layout with providers # │ │ ├── auth.$.tsx # Auth callback # │ │ └── webhooks.tsx # Webhook handler # │ ├── shopify.server.ts # Server configuration # │ └── root.tsx # Root layout # ├── extensions/ # App extensions # ├── shopify.app.toml # App configuration # └── package.json // shopify.app.toml name = "my-shopify-app" client_id = "your-client-id" application_url = "https://your-app.example.com" [access_scopes] scopes = "read_products,write_products,read_orders" [webhooks] api_version = "2024-10" [webhooks.subscriptions] topics = ["orders/create", "products/update"] uri = "/webhooks" [auth] redirect_urls = ["https://your-app.example.com/auth/callback"] // app/shopify.server.ts import "@shopify/shopify-app-remix/adapters/node"; import { LATEST_API_VERSION, shopifyApp, DeliveryMethod, } from "@shopify/shopify-app-remix/server"; import { PrismaSessionStorage } from "@shopify/shopify-app-session-storage-prisma"; import prisma from "./db.server"; const shopify = shopifyApp({ apiKey: process.env.SHOPIFY_API_KEY!, apiSecretKey: process.env.SHOPIFY_API_SECRET!, scopes: process.env.SCOPES?.split(","), appUrl: process.env.SHOPIFY_APP_URL!, authPathPrefix: "/auth", sessionStorage: new PrismaSessionStorage(prisma), distribution: AppDistribution.AppStore, future: { unstable_newEmbeddedAuthStrategy: true, }, ...(process.env.SHOP_CUSTOM_DOMAIN ? { customShopDomains: [process.env.SHOP_CUSTOM_DOMAIN] } : {}), }); export default shopify; export const apiVersion = LATEST_API_VERSION; export const authenticate = shopify.authenticate; export const sessionStorage = shopify.sessionStorage; ### Notes - React Router replaced Remix as recommended template (late 2024) - unstable_newEmbeddedAuthStrategy enabled by default for new apps - Webhooks configured in shopify.app.toml, not code - Run 'shopify app deploy' to apply configuration changes ### Embedded App with App Bridge Render app embedded in Shopify Admin **When to use**: Building embedded admin app ### Template // app/routes/app.tsx - App layout with providers import { Link, Outlet, useLoaderData, useRouteError } from "@remix-run/react"; import { AppProvider } from "@shopify/shopify-app-remix/react"; import polarisStyles from "@shopify/polaris/build/esm/styles.css?url"; export const links = () => [{ rel: "stylesheet", href: polarisStyles }]; export async function loader({ request }: LoaderFunctionArgs) { await authenticate.admin(request); return json({ apiKey: process.env.SHOPIFY_API_KEY! }); } export default function App() { const { apiKey } = useLoaderData<typeof loader>(); return ( <AppProvider isEmbeddedApp apiKey={apiKey}> <ui-nav-menu> <Link to="/app" rel="home">Home</Link> <Link to="/app/products">Products</Link> <Link to="/app/settings">Settings</Link> </ui-nav-menu> <Outlet /> </AppProvider> ); } export function ErrorBoundary() { const error = useRouteError(); return ( <AppPro