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

Enabling the Embedded App SDK

First, follow the Getting Started guide to create a development store and an app.

Once you have a Partner account and an app, in your Partners dashboard, find the section titled "Embedded settings" and select the "Enabled" radio button.

Partners setting


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 ›