Getting started

What you get

The Embedded App SDK has a robust window.postMessage API that provides:

  • Custom modal windows
  • Alert, confirm and input dialogs
  • Top bar with icon, breadcrumbs, buttons, pagination and dropdown menus
  • Flash messages

Shopify's Polaris design system includes content guidelines, a component library, and a UI kit that you can use to build the Shopify look and feel into your own apps.

Enabling the Embedded App SDK

First, follow the Getting Started guide to create a development store and an app. Next, follow these steps to enable the Embedded App SDK for your Shopify app:

  1. From your Partner dashboard, click Apps.
  2. Click on the name of your app.
  3. From the app overview screen, click Extensions.
  4. Next to Embed in Shopify Admin, click Enable.
  5. Click Save at the top of the screen to confirm the changes to your app.
Enable easdk


Enabling this for existing apps that are not designed to use the SDK will result in users being unable to use your app. Once enabled, Shopify will attempt to load your app inside an iframe.

HTTPS, SSL Certificates and mixed content restrictions

The Shopify Admin uses HTTPS for all pages. Mixed content restrictions in web browsers requires all embedded applications to also run on HTTPS.

Publishing an embedded app in the App Store requires the app to have an SSL certificate. Failure to use SSL when running an embedded app will cause errors in web browsers, due to mixed content restrictions.


Apps can be developed locally using an SSL tunnel to localhost such as ngrok.


OAuth will behave normally in your app, as it would for any other Shopify apps or other OAuth enabled services with one caveat:

Since the application is loaded inside an iframe it is critical that the initial OAuth request redirect escapes the iframe to make the requests. Shopify returns the X-Frame-Options=DENY header and prevents any Shopify admin pages from being loaded inside an iframe.

This means that where the OAuth process would normally begin with:

redirect_to "/auth/shopify?shop=myshopname"

It should now return a page containing:

<script type='text/javascript'>
  // If the current window is the 'parent', change the URL by setting location.href
  if ( == window.self) { = "/auth/shopify?shop=myshopname";

  // If the current window is the 'child', change the parent's URL with postMessage
  } else {
    message = JSON.stringify({
      message: "Shopify.API.remoteRedirect",
      data: { location: window.location.origin + "/auth/shopify?shop=myshopname" }
    window.parent.postMessage(message, "");


The above example assumes you're using the Shopify Omniauth gem. If not, replace /auth/shopify with the supported endpoint.

Read more about how to use OAuth with Shopify ›