App structure
Apps are structured to work seamlessly with the Shopify admin and to provide an intuitive experience for merchants.
![An app in the Shopify admin. Numbered indicators show the Shopify admin (labeled 1), app nav (labeled 2), app header (labeled 3), page header (labeled 4), overflow menu (labeled 5), and app body (labeled 6).](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-anatomy.png)
![An app in the Shopify admin. Numbered indicators show the Shopify admin (labeled 1), app nav (labeled 2), app header (labeled 3), page header (labeled 4), overflow menu (labeled 5), and app body (labeled 6).](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-anatomy-mobile.png)
- The Shopify admin
- App nav
- App header
- Page header
- Overflow menu
- App body
Apps consist of a few navigation elements and the app body, which is the center of your app’s experience.
App navigation is strictly configured, and it’s an important part of providing a great merchant experience. For more details, refer to the navigation guidelines.
![The app body highlighted within the Shopify admin.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-body.png)
![The app body highlighted within the Shopify admin.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-body-mobile.png)
The app body is where your app’s main experience lives.
Be sure to follow the layout guidelines when you choose a layout for the app body.
Max modal is a focused environment for specific immersive tasks. Refer to Polaris for guidance on overlays.
The modal utilizes the following areas of the app interface:
-
Modal header
The max modal can contain a top bar element to render a primary and a secondary action. -
App body
The modal body is where you can add all the content for a full-screen experience.
![An empty max modal with the modal header at the top and an empty modal body below.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/max-modal.png)
![An empty max modal with the modal header at the top and an empty modal body below.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/max-modal-mobile.png)
When to use max modal
Use max modal when merchants need to complete a focused task, where leveraging the full viewport improves the user experience.
The following are some example use cases:
- Complex editing experiences, such as an editor for creating newsletter content
- Immersive experiences, such as an editor for cropping and modifying images
- Previews, such as an app that adds elements to a product page and enables merchants to preview changes
![The Puzzlify template editor in a max modal with a wireframed title bar.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/max-modal-when-to-use.png)
![A modal header with a secondary button labeled "Change puzzle template" and a primary button labeled "Save".](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/max-modal-actions.png)
Must Do
Primary navigation for the app should be shown in the top bar of the modal and the primary actions must not be duplicated. This applies to developers using the latest version of App Bridge.![A dialog box that reads "Your template has unsaved changes. Changes will be lost if you leave without saving". There is a primary button that's labeled "Save Changes" and a secondary button that's labeled "Leave without saving".](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/save-dialog.png)
Must Do
If there are unsaved changes, prompt merchants to save before exiting full-screen mode.![A modal with the title "Are you sure you want to exit?" and text "You're about to leave the template editor and go back to the Puzzlify home page.". The modal has a secondary button with the label "No, I want to stay" and a primary button with the label "Yes, I"m sure".](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/interrupt-dialog.png)
Do Not
Don’t unnecessarily interrupt a merchant’s workflow when exiting modal.![An image of a link in the Shopify navigation bar launching a full-screen experience.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/launch-app-nav.png)
Do Not App Store Requirement
Your app must not launch full-screen or the max modal from the app nav. Instead, they must launch from the app body. This is an app store requirement.![A max modal that contains a fullscreen bar.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/no-fullscreen-bar.png)
Do Not New
Don't use the FullscreenBar within a max modal, as it results in a confusing merchant experience with redundant mechanisms to dismiss the modal.Admin UI extensions
Anchor link to section titled "Admin UI extensions"Use admin UI extensions to integrate more deeply with the Shopify admin and create seamless merchant workflows.
Choose from the following extensions:
Admin block
Admin action
Admin link
Bulk action
Additional admin extensions are available for more specific use cases.
![Admin blocks (labeled 1) live in the body area of the admin. Admin actions (labeled 2) live in the more actions dropdown. And Admin links (labeled 3) also live in the more actions dropdown.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/ui-extension-anatomy.png)
![An admin action modal.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-action.png)
![The bulk action menu at the bottom of an index page.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-bulk.png)
![An app block card being used for promotion. The block is labeled "Install companion app". There is a secondary button that reads "Install companion app" and another secondary button that reads "Write a review".](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/extension-marketing.png)
Do Not App Store Requirement
The extension can't be used to display promotions or advertisements. This includes promoting your app, related apps, or requesting app reviews. This is an app store requirement.App attribution
Anchor link to section titled "App attribution"Shopify will badge all admin UI extensions with the app icon, name, and a link to your app URL.
![Hovering over the app attribution indicator reveals the full app name and color logo.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/app-atribution.png)
When to use admin blocks
Anchor link to section titled "When to use admin blocks"Use admin block extensions to offer your app’s functionality or data in the context of a resource detail page. Merchants have the option to add your app block to a page, and arrange it in the page layout.
App blocks can be embedded into
![The app blocks card featuring a search input and several apps.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/ui-extension-whento.png)
![Guidelines indicate the maximum height of an app block.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/600px-max.png)
Must Do
Contents must be less than600px
in height, to avoid overly tall app blocks. If necessary, implement pagination to ensure that this requirement is met.
![A simple form with several input fields.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/input-field.png)
Must Do
Input fields must be visible at all times. If necessary, app blocks should trigger app actions to ensure that this requirement is met.![An example of an app block featuring an empty state and a non-empty state.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/block-inform.png)
Must Do
Your block must have an empty state that informs merchants about what your app block does. For example, it should tell merchants what data will display in the block.![A simple app block form with the Shopify contextual save bar visible. The bar indicates that there are unsaved changes, and includes buttons to discard or save changes.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/extension-contextualsave.png)
Tip
Inputs in your block can work with the contextual save bar by using the Form component, which provides merchants with a familiar save and validation experience.When to use admin actions
Anchor link to section titled "When to use admin actions"Use admin action extensions to offer merchants quick access to common actions that they might do with your app. Because apps can add an unlimited number of admin actions, use discrete actions for discrete purposes.
App actions can be targeted to these extension targets.
![Multiple admin actions from the same app in the "More actions" menu.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/multi-actions.png)
![An app block modal with height guidelines overlayed.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/1200px-max.png)
Must Do
Don't allow action content to exceed1200px
and don't use more than two steps of pagination. Otherwise, your app can be difficult to navigate.
When to use admin links and bulk actions
Anchor link to section titled "When to use admin links and bulk actions"If your content doesn't fit well within the format of the block or action, then use an admin link or bulk action instead. If an interaction is complex, such as one that requires more screen space, then routing merchants into your app is a better experience.
Examples include a multi-step process, a very long form with multiple dynamic sections, or a complex editor with several columns.
![A wireframe of an open "More actions" menu.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/more-bulk-moreaction.png)
![A wireframe of a listing page with a floating "More actions" menu at the bottom.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/more-bulk-bulk.png)
Combining extensions
Anchor link to section titled "Combining extensions"Use app actions and blocks together to provide a more focused merchant experience.
![An abstracted image of an app block triggering an app action.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/block-action.png)
Tip
An admin block can trigger an admin action. For more information, refer to the extension custom protocol.![An app block and app action with identical content.](https://cdn.statically.io/img/shopify.dev/assets/apps/design-guidelines/app-structure/duplicate-info.png)