shopify-remix-template
Shopify Remix Template Guide
This skill provides a guide for building Shopify apps using the official Shopify Remix App Template. This template is the recommended starting point for most new Shopify embedded apps (though React Router is the future direction, Remix is still widely used and supported).
π Getting Started
To create a new app using the Remix template, run:
git clone https://github.com/Shopify/shopify-app-template-remix.git
π Project Structure
A typical Remix app structure:
app/routes/: File-system based routing.app._index.tsx: The main dashboard page.app.tsx: The root layout for the authenticated app.webhooks.tsx: Webhook handler.
shopify.server.ts: Critical. Initializes the Shopify API client, authentication, and session storage (Redis).db.server.ts: Database connection (Mongoose).models/: Mongoose models (e.g.,Session.ts,Shop.ts).root.tsx: The root component for the entire application.
shopify.app.toml: Main app configuration file.
π Authentication & Sessions
The template uses @shopify/shopify-app-remix to handle authentication automatically.
shopify.server.ts
This file exports an authenticate object used in loaders and actions. It is configured to use Redis for session storage.
import { shopifyApp } from "@shopify/shopify-app-remix/server";
import { RedisSessionStorage } from "@shopify/shopify-app-session-storage-redis";
const sessionDb = new RedisSessionStorage(
new URL(process.env.REDIS_URL!)
);
const shopify = shopifyApp({
apiKey: process.env.SHOPIFY_API_KEY,
apiSecretKey: process.env.SHOPIFY_API_SECRET,
appUrl: process.env.SHOPIFY_APP_URL,
scopes: process.env.SCOPES?.split(","),
apiVersion: "2025-10",
sessionStorage: sessionDb,
isEmbeddedApp: true,
});
export const authenticate = shopify.authenticate;
export const apiVersion = "2025-10";
export const addDocumentResponseHeaders = shopify.addDocumentResponseHeaders;
Usage in Loaders (Data Fetching)
Protect routes and get the session context:
import { json } from "@remix-run/node";
import { authenticate } from "../shopify.server";
export const loader = async ({ request }) => {
const { admin, session } = await authenticate.admin(request);
// Use admin API
const response = await admin.graphql(`...`);
return json({ data: response });
};
π‘ Webhooks
Webhooks are handled in app/routes/webhooks.tsx (or individual route files). The template automatically registers webhooks defined in shopify.server.ts.
To add a webhook:
- Add configuration in
shopify.server.ts. - Handle the topic in the
actionofapp/routes/webhooks.tsx.
ποΈ Database (Mongoose/MongoDB)
Use Mongoose for persistent data storage (Shops, Settings, etc.).
app/db.server.ts
Singleton connection to MongoDB.
import mongoose from "mongoose";
let isConnected = false;
export const connectDb = async () => {
if (isConnected) return;
try {
await mongoose.connect(process.env.MONGODB_URI!);
isConnected = true;
console.log("π Connected to MongoDB");
} catch (error) {
console.error("β MongoDB connection error:", error);
}
};
app/models/Shop.ts (Example)
import mongoose from "mongoose";
const ShopSchema = new mongoose.Schema({
shop: { type: String, required: true, unique: true },
accessToken: { type: String, required: true },
isInstalled: { type: Boolean, default: true },
});
export const Shop = mongoose.models.Shop || mongoose.model("Shop", ShopSchema);
Usage in Loaders
Connect to the DB before using models.
import { connectDb } from "../db.server";
import { Shop } from "../models/Shop";
export const loader = async ({ request }) => {
await connectDb();
// ...
const shopData = await Shop.findOne({ shop: session.shop });
// ...
};
π¨ UI & Design (Polaris)
The template comes pre-configured with Polaris, Shopify's design system.
- Wrap your pages in
<Page>components. - Use
<Layout>,<Card>, and other Polaris components for a native feel. - App Bridge is initialized automatically in
app.tsx.
π οΈ Common Tasks
1. Adding a Navigation Item
Update app/routes/app.tsx:
<ui-nav-menu>
<Link to="/app">Home</Link>
<Link to="/app/settings">Settings</Link>
</ui-nav-menu>
2. Fetching Data from Shopify
Use the admin object from authenticate.admin(request) to make GraphQL calls.
3. Deploying
- Hosting: Remix apps can be hosted on Vercel, Fly.io, Heroku, or Cloudflare.
- Database: Ensure you have a persistent database (e.g., Postgres) for production.
- Environment Variables: Set
SHOPIFY_API_KEY,SHOPIFY_API_SECRET,SCOPES,SHOPIFY_APP_URL.
π References
More from toilahuongg/shopify-agents-kit
shopify-polaris-icons
Guide for using Shopify Polaris Icons in Shopify Apps. Covers icon usage patterns, accessibility, tone variants, and common icon categories for commerce applications.
19email-template-design
Design and build professional HTML email templates with inline CSS for broad email client compatibility. Use this skill when the user asks to create, design, or build email templates, newsletters, transactional emails (order confirmations, receipts, shipping notifications, password resets), marketing emails, welcome series, onboarding emails, abandoned cart emails, drip campaigns, or any HTML email layout. Covers responsive design, dark mode support, and compatibility with Gmail, Outlook (desktop + web), Apple Mail, Yahoo, and mobile clients.
18shopify-api
Comprehensive guide for Shopify APIs in Remix apps. Covers Admin GraphQL/REST, Storefront API, all resources (products, orders, customers, inventory, collections, discounts, fulfillments, metafields, files), bulk operations, webhooks, resource pickers, and TypeScript patterns. Use when querying/mutating Shopify data or building integrations.
14code-investigator
Comprehensive code investigation and audit tool. Discovers all project features, then dispatches parallel subagents to analyze issues, risks, dead code, missing functionality, and redundancies. Produces a prioritized risk report. Use this skill when the user asks to "investigate code", "audit project", "find risks", "check code quality", "analyze codebase", "what's wrong with this code", "project health check", "code review entire project", "find dead code", "find redundant code", or any request for a thorough codebase analysis.
11shopify-polaris-design
Design and implement Shopify Admin interfaces using the Polaris Design System. Use this skill when building Shopify Apps, Admin extensions, or any interface that needs to feel native to Shopify.
11rigorous-reasoning
Rigorous reasoning using philosophical theories and scientific methods. Use this skill when analyzing logic, evaluating arguments, constructing proofs, critiquing opinions, or solving complex problems requiring critical thinking. Triggers - debate, proof, critique, logical analysis, argument evaluation, fallacy detection, inference, argumentation, logical fallacy, critical thinking.
10