Apps

Fields
idstringrequired

ID of the app, used to identify itself in code. For example, my_app.

namestringrequired

Name of the app.

typestring

Type of the app. Some configurations apply differently based on the type of app, for example, theme apps cannot define models, content, functions, or settings.

  • admin: Enhances functionality of the Swell Admin dashboard or API.
  • integration: Integrates with an external service. E.g., an email provider or payment gateway.
  • storefront: Implements a storefront experience. E.g., a store website, page builder, or checkout.
  • theme: A theme created for a specific storefront app, for example Proxima.
  • channel: Implements an external sales channel. E.g. Amazon marketplace.
versionstring

Semver-formatted version number. This value can be automatically incremented using the swell app version CLI command. Defaults to "1.0.0".

descriptionstringrequired

A brief description of the app, shown as the tagline in the App Store catalog. Maximum 70 characters. Required to release.

permissionsarray of permission

An array of permission scopes limiting which store data the app can access. When a merchant installs the app, Swell issues it an access token restricted to the scopes declared here.

Defaults to [], which grants unrestricted access to store data. Apps published to the Swell App Store must declare the specific scopes they need.

Each scope combines an access level with a collection name:

  • read_{collection}: grants read access. For example, read_orders.
  • write_{collection}: grants read and write access. write_orders also covers read_orders, so there is no need to declare both.

Use the base collection name. read_accounts also covers its child collections, such as accounts:cards.

It is not necessary to declare scopes for resources your app defines. An app always has full access to its own models, settings, and app record.

Permissions are recorded with each version of your app. The scopes granted on install are those declared by the version the merchant installs, so changing them takes effect with your next released version.

storefrontobject

For storefront apps only, configures storefront properties including menu and theme structure.

themeobject

For theme apps only, configures theme properties including storefront app compatibility and style presets.

preview_srcstring

For storefront and theme apps only, relative path of an image asset representing the main desktop preview of the app in the App Store catalog. For example, assets/preview-desktop.jpg. Required to release storefront apps, unless the storefront's theme is provided by an app.

preview_mobile_srcstring

For storefront and theme apps only, relative path of an image asset representing the main mobile preview of the app in the App Store catalog. For example, assets/preview-mobile.jpg.

imagesarray of image

Gallery images shown in the App Store catalog. Each item describes one image and points to a file in the app folder with image_src. Images are shown in array order and the first four are displayed. At least one image is required to release, except for theme apps.

  • id: Required. Unique identifier for the image.
  • title: Optional. Maximum 40 characters.
  • description: Optional. Maximum 140 characters.
  • image_src: Required. Path to the image file relative to the app root, for example assets/screenshots/dashboard.png. The file can live anywhere in the app folder.
highlightsarray of highlight

For theme apps only, list of feature highlights shown in the Storefront Theme catalog. Each highlight has a title, an optional description and an optional image. Highlights are not shown for other app types.

featuresarray of features

For storefront and theme apps only, list of enumerated features to associate with in the App Store catalog.

  • multi_currency: Multi-currency apps support selling in multiple currencies.
  • multi_language: Multi-language apps support selling in multiple languages.
  • bulk_pricing: Bulk pricing apps support selling in bulk.
  • account_pricing: Account pricing apps support selling to different customer groups.

More feature enumerations are coming soon.

use_casesarray of use_case

For storefront and theme apps only, list of enumerated use-cases to associate with in the App Store catalog.

  • direct_to_consumer: Direct to consumer apps are designed for selling directly to consumers.
  • wholesale: Wholesale apps are designed for selling to other businesses.
  • marketplace: Marketplace apps are designed for selling products from multiple vendors.
  • digital_goods: Digital goods apps are designed for selling digital products.

More use-case enumerations are coming soon.

purchase_optionsarray of purchase_option

For storefront and theme apps only, list of enumerated purchase-options to associate with in the App Store catalog.

  • standard: Sell one-time purchases.
  • subscription: Sell recurring purchases on a schedule.
  • preorder: Sell products before they're available for delivery.

More purchase-option enumerations are coming soon.

full_descriptionstring

A longer text description of the app's features and capabilities, displayed in the App Store catalog. Optional.

Set from DESCRIPTION.md in the app root, truncated at 20,000 characters. It cannot be set in swell.json.

demo_urlstring

URL of a website where users can see a demonstration of the app's features and capabilities.

preview_video_urlstring

URL of a video demonstrating the app, shown in the App Store catalog.

support_urlstring

If the app developer offers support to merchants, URL of the website where a user can get help with the app.

support_emailstring

Email address merchants can contact for help with the app. When empty, the support email of your partner account is shown instead.

documentation_urlstring

If the app provides written documentation to merchants, URL of the website where a user can get read the docs.

repository_urlstring

If the app is open-source, URL of the website where a user can find a Git repository of the app's code base.

pricecurrency

Price the merchant must pay to use the app, charged according to price_interval. Defaults to 0 (free).

price_externalboolean

Indicates the app is paid for through an external service. When true, the merchant pays for access to the app's features externally and Swell does not charge the price. Defaults to false.

price_intervalstring

Interval on which the app price is charged. When price is greater than 0, defaults to monthly.

  • once: The merchant is charged a one-time price for the app.
  • monthly: The merchant is charged the app price on a monthly subscription basis.
price_trial_daysint

Optional number of free trial days before the merchant is first charged for the app. Defaults to no trial period.

extensionsarray of extension

List of extensions the app implements to integrate with core platform features such as payments, shipping, and tax calculation. Extension events are handled by app functions. See the Extensions guide for details.

integrationsarray of integration

An array of identifiers for the areas the app operates in, used to detect conflicts with other apps and with Swell integrations. Values can be the ids of Swell integrations or your own custom ids, such as ["klaviyo", "algolia", "myownid"].

A conflict is reported when an integration is already running under one of the listed ids, or when a running app lists one of this app's ids in its own integrations. Each conflict can be ignored, or the conflicting integrations and apps can be disabled.

Swell checks for conflicts when an app is installed from the marketplace, when a disabled app is enabled again, and when an integration is enabled. The Swell CLI runs the same check when an app is pushed for the first time, when a pushed app's integrations list has changed, and when an app is installed.

No checks are performed when integrations is omitted.

The swell.json model
{
  "id": "honest_reviews",
  "name": "Honest Reviews",
  "description": "Honest reviews from honest people",
  "version": "1.0.6",
  "type": "admin",
  "permissions": [
    "read_orders",
    "write_products",
    "write_accounts"
  ]
}