> Note: > Most of Shopify App Bridge’s functionality relies on actions. See the [Actions](/docs/api/app-bridge/previous-versions/actions) section to learn more about how to use these. ## Initialization methods ### `createApp(config)` Returns an `app` object. Used to [initialize your app instance](/docs/api/app-bridge/previous-versions/app-bridge-from-npm/app-setup#initialize-shopify-app-bridge-in-your-app). The config object should contain the following keys: | Key | Type | Description | |---|---|---| | `apiKey` | string | The client ID provided for your application in the Partner Dashboard. | | `host` | string | The base64-encoded origin/domain of the Shopify shop, which is provided by Shopify as a query parameter on the initial load of your app in the Shopify Admin. The host is set dynamically and should be stored in the session from the initial load. | > Note > In the following example, `config` is a valid App Bridge configuration object. Learn more about [configuring App Bridge](/docs/api/app-bridge/previous-versions/app-bridge-from-npm/app-setup#initialize-shopify-app-bridge-in-your-app).

## App object methods ### `app.dispatch(action)` Dispatches an action to Shopify App Bridge. Hosts (like Shopify Admin and Shopify Mobile) can subscribe to actions to listen for these dispatches. | Key | Type | Description | |---|---|---| | `action` | Action | One of Shopify App Bridge’s included [actions](/docs/api/app-bridge/previous-versions/actions/).| ```js app.dispatch( Redirect.toRemote({ url: 'http://example.com', }), ); ``` ### `app.error(callback)` Subscribe to all errors, including those that are caused by actions. Returns a method you can use to unsubscribe from all errors. | Key | Type | Description | |---|---|---| | `callback` | function | The function you want to execute when an error occurs. ```js const unsubscribeFromErrors = app.error((data) => { const { type, // the error type action, // the original action including its id message, // additional hints on how to fix the error } = data; // Handle all errors here switch(type) { case Error.Action.INVALID_PAYLOAD: // Do something with the error break; } }); // Unsubscribe from all errors unsubscribeFromErrors(); ``` ### `app.getState()` Returns a Promise which, when resolved, returns information about your app’s current state, including the currently logged in staff member. ```js app.getState().then((data) => { const { appInfo, loading, modal, navigation, pos, resourcePicker, staffMember, titleBar, toast } = data; }); ``` ### `app.subscribe(callback, id?)` Subscribe to all actions. Returns a method you can use to unsubscribe. Arguments: | Key | Type | Description | |---|---|---| | `callback` | function | The function you want to execute when an action is dispatched. | | `id` | int | The ID of a particular action set instance to subscribe to (optional). | ```js const unsubscribeFromAll = app.subscribe((data) => { // Handle all actions here console.log(data); }); // Unsubscribe from all actions unsubscribeFromAll(); ``` ### `app.subscribe(eventNameSpace, callback, id?)` When `eventNameSpace` or `id` are provided, this method subscribes to actions of the provided type. Arguments: | Key | Type | Description | |---|---|---| | `eventNameSpace` | string | Include this to subscribe only to actions of a particular type: for example, `Modal.Action.OPEN`. (optional) | | `callback` | function | The function you want to execute when an action is dispatched. | | `id` | int | The ID of a particular action set instance to subscribe to (optional). | ```js const unsubscribeModalOpen = app.subscribe(Modal.Action.OPEN, (data) => { // Do something whenever a Modal open action is dispatched }); // Unsubscribe from Modal open actions unsubscribeModalOpen(); ``` ## Platform methods The following utility methods, available in the [`app-bridge` package](https://www.npmjs.com/package/@shopify/app-bridge), return `true` or `false` depending on which platform an embedded app is running on: - `isShopifyMobile`: Returns `true` if the app is running on [Shopify Mobile](https://help.shopify.com/manual/shopify-admin/shopify-app). - `isShopifyPOS`: Returns `true` if the app is running on [Shopify POS](https://help.shopify.com/manual/sell-in-person/shopify-pos). - `isShopifyPing`: Returns `true` if the app is running on [Shopify Ping](https://help.shopify.com/manual/ping). - `isMobile`: Returns true if any of the conditions above are true. - `isShopifyEmbedded`: Returns `true` if the app is running as an [embedded app](/docs/api/app-bridge/previous-versions/app-bridge-from-npm/app-setup). ```js import {isMobile, isShopifyEmbedded} from '@shopify/app-bridge/utilities'; if (isShopifyEmbedded()){ if (isMobile()) { // app is running as an embedded on mobile } else { // app is running as an embedded app in a desktop web browser } } else { // app is not running as an embedded app } ```