Skip to content

Setup: CLI, Dev Dashboard, dev store ​

What you need ​

  • Node.js 20+ (LTS) and npm, pnpm or yarn
  • Git
  • A Shopify developer account. Apps and dev stores now live in the Dev Dashboard (dev.shopify.com), which replaces the old Partner Dashboard flow for app management. The Partner Dashboard is still used for payouts and App Store listings.
  • The Shopify CLI, which is installed per project by the template. You can also install it globally:
bash
npm install -g @shopify/cli@latest

Create a dev store ​

In the Dev Dashboard, create a development store. It's a free, private Shopify store for testing your app. It can't take real orders or real payments, and app charges on it are always test charges.

The "Create store" form, field by field ​

FieldWhat it meansWhat to pick
Dev vs Client transferDev is a test store that stays yours and never goes live. Client transfer is for agencies: you build a real store, then hand ownership to a client, who starts paying for a Shopify plan.Dev
Store nameBecomes the store's permanent address, your-store-name.myshopify.com. You can rename the store later, but that address stays.Something clear, e.g. ajmal-dev-store
Shopify planWhich paid plan the dev store pretends to be on, so you can test that plan's features for free. Plans go up from Basic → Grow → Advanced → Plus.Grow for most app work. Plus if you'll test Plus-only things, like checkout UI extensions on the information, shipping or payment steps, or B2B
Generate test dataFills the store with sample products, customers and orders. It also sets up the Bogus Gateway, a fake payment provider so you can place test orders.✅ Tick it. Your app needs orders and products to work with
Test a feature previewTurns on Shopify features and APIs that aren't released yet, so the store behaves differently from what merchants have.☐ Leave unticked. Use a separate store when you need a preview

Placing test orders with the Bogus Gateway

At checkout, use 1 as the card number for a successful payment, 2 for a declined one and 3 for an error. Any name, future expiry date and CVV work. This is how you trigger orders/create webhooks while testing.

One store per developer

Use a separate dev store per developer. Shared stores make webhooks and installs confusing. Dev stores are free, so make a second one (e.g. a Plus one) rather than changing your main store.

Scaffold an app ​

bash
shopify app init

The first question is what kind of app to build:

text
>  Build a React Router app (recommended)
   Build an extension-only app
React Router appExtension-only app
What you getA full web app (your own server + database) plus a folder for extensionsOnly the extensions/ folder, with no server
Who hosts itYou host the server; Shopify hosts the extensionsShopify hosts everything, so there's nothing to deploy or pay for
Admin pages in Shopify✅ Your own pages, built with Polaris❌ No app home pages. Only small admin extensions, like an action menu
Own backend logic, database, background jobs✅❌
Call your own API (e.g. FlowFlex) on events✅ Webhooks arrive at your server❌ No server to receive them
Theme blocks, checkout UI, Shopify Functions✅✅
Good forReal products: dashboards, integrations, anything that stores data or talks to another systemSmall add-ons that only change the storefront or checkout, e.g. a discount Function or a theme block

Pick React Router. Anything that connects a store to FlowFlex needs a server: it has to receive order webhooks, store which store belongs to which FlowFlex org, and show settings pages. The React Router template is the official default (it replaced the Remix template in 2025), and you can still add extensions to it at any time.

Rule of thumb

If your app needs to remember something or talk to another system, it needs a server, so use React Router. Extension-only is for apps that are pure UI or logic running inside Shopify.

The CLI will:

  1. Create the project folder.
  2. Create (or link) an app in your Dev Dashboard.
  3. Write shopify.app.toml with the app's client_id.

Run it ​

bash
cd my-app
shopify app dev

shopify app dev:

  • starts your server and a tunnel, so Shopify can reach your laptop,
  • updates the app's URLs to that tunnel,
  • installs the app on your dev store (press p to open it),
  • hot-reloads your code and your extensions.

Everyday CLI commands ​

CommandWhat it does
shopify app initScaffold a new app
shopify app devRun locally with a tunnel, hot reload and a preview
shopify app deployRelease a new app version (config + extensions)
shopify app generate extensionAdd an extension (theme, checkout, Function…)
shopify app config linkLink the project to an existing app / a new toml
shopify app config use <name>Switch between shopify.app.<name>.toml files, e.g. staging vs prod
shopify app env showPrint the env vars (API key, secret, scopes)
shopify app infoShow which app, store and config the project is using

Project step: scaffold order-notes-notifier, run shopify app dev, and open it in your dev store.

Check yourself ​

  1. Why does shopify app dev need a tunnel?
  2. What file ties your local code to the app in the Dev Dashboard?