MiniApp Manifest

W3C Working Draft

This version:
https://www.w3.org/TR/2021/WD-miniapp-manifest-20210624/
Latest published version:
https://www.w3.org/TR/miniapp-manifest/
Latest editor's draft:
https://w3c.github.io/miniapp-manifest/
Previous version:
https://www.w3.org/TR/2021/WD-miniapp-manifest-20210606/
Editors:
Martin Alvarez-Espinar (Huawei)
Yongjing Zhang (Huawei)
Former editors:
Shouren Lan (Huawei)
Zhiqiang Yu (Huawei)
Xiaofeng Zhang (Huawei)
Participate:
GitHub w3c/miniapp-manifest
File an issue
Commit history
Pull requests

Abstract

This specification is a registry of supplementary members for the Web Application Manifest and the Web App Manifest - Application Information specifications that provide additional metadata to an application manifest to describe MiniApps. This JSON-based manifest file enables developers to set up basic information, window style, page route, and other information of a MiniApp. The manifest also includes information about the window style like the navigation bar, title, window background color, page routing information, and the widgets that are part of a MiniApp.

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.

This document was published by the MiniApps Working Group as a Working Draft. This document is intended to become a W3C Recommendation.

GitHub Issues are preferred for discussion of this specification.

Publication as a Working Draft does not imply endorsement by the W3C Membership.

This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.

This document is governed by the 15 September 2020 W3C Process Document.

1. MiniApp Manifest

A MiniApp manifest is a [JSON] document that extends and profiles the Web App Manifest [APPMANIFEST] and the Web App Manifest - Application Information [MANIFEST-APP-INFO], to describe metadata associated with a MiniApp.

1.1 Conformance

A MiniApp manifest MUST contain the following members at its root:

Each image resource object within the MiniApp manifest's icons member MUST contain:

A MiniApp manifest MAY contain a widgets member at its root. This member MUST contain an array of MiniApp widget resources. Each MiniApp widget resource object MUST contain the following members:

A MiniApp manifest MAY contain a req_permissions member at its root. This member MUST contain an array of MiniApp permission resources. Each MiniApp permission resource object MUST contain the following member:

The presence of other members in a MiniApp manifest is optional, but vendor-specific extensions MAY modify this.

As the application manifest is JSON, this specification relies on the [JSON] specification. This specification includes members typed as number, boolean literals, object, array, and string.

1.2 Summary of Members

The following table shows a summary of the MiniApp manifest's members:

Members at root
Member Type Required Description
app_id string Yes Identifier
description string No Description
dir string No Direction of texts
icons image resource array Yes MiniApp icons
lang string No Primary language
platform_version platform version resource Yes Platform version supported
name string Yes App name
pages array Yes Page routing information
req_permissions permission resource array No Required permissions
short_name string No MiniApp short name
version version resource Yes MiniApp Version
widgets widget resource array No Widgets
window window resource No Window style
Members of image resource objects
(icons array)
Member Type Required Description
label string No Accessible text
sizes string No Resolution sizes of the icon
src string Yes Source of the icon
Members of platform version resource objects
(platform_version object)
Member Type Required Description
min_code number Yes Indicates the minimum platform version required for running the MiniApp.
target_code string No Indicates the target platform version required for running the application.
release_type string No Indicates the release type of the target platform version required for running the application. For example, it can be CanaryN, BetaN, or Release. N represents a positive integer. In these examples, 1) Canary: indicates a restrictedly released version. 2) Beta: indicates a publicly released beta version. 3)Release: indicates a publicly released official version.
Members of permission resource objects
(req_permissions array)
Member Type Required Description
name string Yes Permission name
reason string No Reason to request the permission
Members of version resource objects
(version object)
Member Type Required Description
code number Yes Version code
name string Yes Version Name
Members of widget resource objects
(widgets array)
Member Type Required Description
name string Yes Widget name
path string Yes Widget path
min_code number No Minimum platform version supported
Members of window resource objects
(window object)
Member Type Required Description
auto_design_width boolean No Enables/disables auto-calculation of page's design_width
background_color string No Window background color
background_text_style string No Background text style
design_width number No The baseline page design width
enable_pull_down_refresh boolean No Enable pull-to-refresh event
fullscreen boolean No Full screen display
navigation_bar_background_color string No Navigation bar background color
navigation_bar_text_style string No Text style of the navigation bar
navigation_bar_title_text string No Navigation bar title
navigation_style string No Navigation bar style
on_reach_bottom_distance number No Distance for pull-up bottom event triggering
orientation string No Screen orientation settings
Note

Other application manifest members such as scope, theme_color, related_applications, prefer_related_applications, and shortcuts are not currently supported by MiniApp user agents.

1.3 Example

This section is non-normative.

The following code represents a MiniApp manifest example:

Example 1: Manifest document
{
  "dir": "ltr",
  "lang": "en-US",
  "app_id": "org.example.miniapp",
  "name": "MiniApp Demo",
  "short_name": "MiniApp",
  "version": {
    "name": "1.0.1",
    "code": 11
  },
  "description": "A Simple MiniApp Demo",
  "icons": [
    {
      "src": "common/icons/icon.png",
      "sizes": "48x48"
    }
  ],
  "platform_version":{
    "min_code": "1",
    "target_code": "2",
    "release_type": "Beta1"			
  },
  "pages": [
    "pages/index/index",
    "pages/detail/detail"
  ],
  "window": {
    "navigation_bar_text_style": "black",
    "navigation_bar_title_text": "My MiniApp",
    "navigation_bar_background_color": "#f8f8f8",
    "background_color": "#ffffff",
    "fullscreen": false
  },
  "widgets": [
    {
      "name": "widget",
      "path": "widgets/index/index",
      "min_code": "2"
    }
  ],
  "req_permissions": [
    {
      "name": "system.permission.LOCATION",
      "reason": "To show user's position on the map"
    },
    {
      "name": "system.permission.CAMERA",
      "reason": "To scan a QR code"
    }
  ]
}

1.4 Web Application Manifest members

The MiniApp manifest uses the following essential application manifest's members.

1.4.1 dir member

The MiniApp manifest's dir member, while specifying the base direction of the localizable members of the manifest, also specifies the default base text direction of the whole MiniApp.

The dir member's value can be set to one of the text-direction values as specified in [APPMANIFEST]. The text-direction values are the following:

"ltr"
Left-to-right text.
"rtl"
Right-to-left text.
"auto" (default)
No explicit directionality.
Note: Processing the `dir` member

When processing a MiniApp manifest, the process the dir member algorithm is used to process the dir member, according to the [APPMANIFEST] specification.

1.4.2 icons member

The MiniApp manifest's icons member describes images that serve as iconic representations of MiniApps. This member is an array of image resource objects.

As specified in [IMAGE-RESOURCE], an image resource consists of:

label
An optional string representing the accessible name of the image.
sizes
An optional string representing the sizes of the image, expressed using the same syntax as link's sizes attribute.
src
A URL from where to obtain the image data.
Note: Processing the `icons` member

When processing a MiniApp manifest, the process image resources algorithm is used to process the icons member, according to the [APPMANIFEST] specification.

1.4.3 lang member

The MiniApp manifest's lang member, while specifying the primary language of the localizable members, also specifies the primary language of the whole MiniApp. This member is a string in the form of a language tag, a string that matches the production of a Language-Tag [BCP47], as defined in [APPMANIFEST].

Note: Processing the `lang` member

When processing a MiniApp manifest, the process the lang member algorithm is used to process the lang member, according to the [APPMANIFEST] specification.

1.4.4 name member

The MiniApp manifest's name member is the descriptive name of the application. This is the name directly displayed to the user. It is used as the display name of MiniApp along with the desktop icon and in the context of MiniApp management.

Note: Processing the `name` member

When processing a MiniApp manifest, the process a text member algorithm is used to process the name member, according to the [APPMANIFEST] specification.

1.4.5 short_name member

The MiniApp manifest's short_name member provides a concise and easy-to-read name for a MiniApp. It can be used when there is insufficient space to display the full MiniApp name provided in name.

Note: Processing the `short_name` member

When processing a MiniApp manifest, the process a text member algorithm is used to process the short_name member, according to the [APPMANIFEST] specification.

1.5 Application Information members

The following member is defined in the Web App Manifest - Application Information specification [MANIFEST-APP-INFO].

1.5.1 description member

The MiniApp manifest's description member provides a textual description for the MiniApp representing the purpose of the web application in natural language, as defined in [MANIFEST-APP-INFO]

To process the description member, given object json and ordered map manifest:

  1. If the type of json["description"] is not string, return.
  2. Set manifest["description"] to json["description"].

1.6 Supplementary members

The following members are defined under the scope of the MiniApp manifest, addressing specific aspects of MiniApp.

1.6.1 app_id member

The MiniApp manifest's app_id member is a string that identifies the MiniApp univocally. This member is mainly used for package management, and it supports the update and release process of MiniApp versioning.

The format of app_id is RECOMMENDED to be a string defined by the following rule:

appIdRule = name *("." name)
name = ALPHA [*( ALPHA / DIGIT / "-" ) ( ALPHA / DIGIT)]
Note: Usage

One common practice is to use the reverse-domain-name-like convention (e.g., org.example.miniapp).

To process the app_id member, given object json and ordered map manifest:

  1. If json["app_id"] does not exist, or if the type of json["app_id"] is not string, return.
  2. Set manifest["app_id"] to json["app_id"].

1.6.2 platform_version member

The MiniApp manifest's platform_version member contains a MiniApp platform version resource object to represent the min_code, target_code, and release_type.

To process the platform_version member, given object json and ordered map manifest:

  1. If json["platform_version"] does not exist, or if the type of json["platform_version"] is not object, return.
  2. Let platform_version be a new ordered map.
  3. Process the platform version's min_code member passing json["platform_version"] and platform_version.
  4. Process the platform version's target_code member passing json["platform_version"] and platform_version.
  5. Process the platform version's release_type member passing json["platform_version"] and platform_version.
  6. If platform_version["min_code"] does not exist, return failure.
  7. Set manifest["platform_version"] to platform_version.

1.6.3 pages member

The MiniApp manifest's pages member is an array of relative-url string used for specifying the collection of pages that are part of a MiniApp. Each item in the array represents a page route.

A MiniApp page route is the relative path and filename of a MiniApp Page.

During the MiniApp development process, adding or deleting MiniApp pages is done by configuring the array. When configuring the page routes, the file name extension MAY be omitted (e.g., /component/mypage).

The first item in the pages array defines the homepage of a MiniApp.

Note: Usage

For compatibility with the Web platform, it is RECOMMENDED to use pages along with the Web application manifest's start_url and scope members. These members will be set with the following values:

  • start_url SHOULD be set with the same value of the first item in the pages member; and
  • scope SHOULD be set with the value ".".

To process the pages member, given object json and ordered map manifest:

  1. If json["pages"] does not exist, or if the type of json["pages"] is not list, return.
  2. Let pages be a new list.
  3. For each item of json["pages"]:
    1. If the type of item is not string, return.
    2. Let url be the result of parsing item.
    3. If url is failure, continue.
    4. Append pages to url.
  4. Set manifest["pages"] to pages.

1.6.4 req_permissions member

The optional MiniApp manifest's req_permissions member is an array of MiniApp permission resources objects.

Each MiniApp permission resource declares a request for using a concrete system feature (e.g., access to device's location, user contacts, sensors, and camera) required for the proper execution of the MiniApp.

To process the req_permissions member, given object json and ordered map manifest:

  1. If json["req_permissions"] does not exist, or if the type of json["req_permissions"] is not list, return.
  2. Let permissions be a new list.
  3. For each item of json["req_permissions"]:
    1. If the type of item is not object, continue.
    2. Let permission be an ordered map.
    3. Process the permission resource's name member passing item and permission.
    4. If permission["name"] does not exist, continue.
    5. Process the permission resource's reason member passing item and permission.
    6. Append permission to permissions.
  4. Set manifest["req_permissions"] to permissions.
Note: Protection of user's privacy

User agents will ask for the user's consent to protect their privacy during access to these specific features. This information in the req_permissions member may be used by app stores or hosting platforms to filter MiniApps according to the user's preferences, privacy policy, or device capabilities.

1.6.5 version member

The MiniApp manifest's version member contains a MiniApp version resource object to represent the code and name.

To process the version member, given object json and ordered map manifest:

  1. If json["version"] does not exist, or if the type of json["version"] is not object, return.
  2. Let version be a new ordered map.
  3. Process the version's code member passing json["version"] and version.
  4. Process the version's name member passing json["version"] and version.
  5. Set manifest["version"] to version.

1.6.6 widgets member

The optional MiniApp manifest's widgets member is an array of MiniApp widget resources that are a part of a MiniApp.

A MiniApp Package MAY include MiniApp pages and Widgets concurrently.

A widget, as part of a MiniApp, applies some of the members of the MiniApp manifest, including:

However, a widget also has its exclusive fields as defined in the MiniApp widget resource.

To process the widgets member, given object json and ordered map manifest:

  1. If json["widgets"] does not exist, or if the type of json["widgets"] is not list, return.
  2. Let widgets be a new empty list.
  3. For each item of json["widgets"]:
    1. If the type of item is not object, continue.
    2. Let widget be an ordered map.
    3. Process the widget's name member passing item and widget.
    4. Process the widget's path member passing item and widget.
    5. Process the widget's min_code member passing item, manifest, and widget.
    6. If widget["name"] does not exist, or if item["path"] does not exist, continue.
    7. Append widget to widgets.
  4. Set manifest["widgets"] to widgets.

1.6.7 window member

The optional MiniApp manifest's window member contains a MiniApp window resource object to describe the look and feel of the MiniApp frame, including the styles of the status bar, navigation bar, title, background colors, among other visual configuration elements.

The window object members inherit the text direction and language configuration from the dir and lang members at the root of the MiniApp manifest.

To process the window member, given object json and ordered map manifest:

  1. If json["window"] does not exist, or if the type of json["window"] is not object, return.
  2. Let window be a new ordered map «[ "auto_design_width" → false, "background_color" → "#ffffff", "background_text_style" → "dark", "design_width" → 750, "enable_pull_down_refresh" → false, "fullscreen" → "false", "navigation_bar_background_color" → "#000000", "navigation_bar_text_style" → "white", "navigation_bar_title_text" → "default", "on_reach_bottom_distance" → 50, "orientation" → "portrait" ]».
  3. Process the window's auto_design_width member passing json["window"] and window.
  4. Process a color member passing json["window"], window and "background_color".
  5. Process the window's design_width member passing json["window"] and window.
  6. Process the window's enable_pull_down_refresh member passing json["window"] and window.
  7. Process the window's fullscreen member passing json["window"] and window.
  8. Process a color member passing json["window"], window and "navigation_bar_background_color".
  9. Process the window's navigation_bar_text_style member passing json["window"] and window.
  10. Process the window's navigation_bar_title_text member passing json["window"] and window.
  11. Process the window's on_reach_bottom_distance member passing json["window"] and window.
  12. Process the window's orientation member passing json["window"] and window.
  13. Process the window's auto_design_width member passing json["window"] and window.
  14. Set manifest["window"] to window.

1.7 Processing the manifest

The MiniApp manifest, as an extension of the Application manifest, provides a supplementary algorithm to be processed at the extension point of the processing a manifest algorithm defined in [APPMANIFEST]. Thus, the user agent starts by processing the Application manifest's members and, at the extension point, continues with processing the MiniApp manifest members using the following algorithm.

To process a MiniApp manifest at the extension point, given object json and ordered map manifest:

  1. If manifest["name"] does not exist, throw a TypeError.
  2. If manifest["icons"] does not exist, throw a TypeError.
  3. Let icons be manifest["icons"].
  4. If icons["src"] does not exist, throw a TypeError.
  5. If manifest["icons"] does not exist, throw a TypeError.
  6. Process the app_id member passing json and manifest.
  7. If manifest["app_id"] does not exist, throw a TypeError.
  8. Process the description member passing json and manifest.
  9. Process the platform_version member passing json and manifest.
  10. If manifest["platform_version"] does not exist, throw a TypeError.
  11. Process the pages member passing json and manifest.
  12. If manifest["pages"] does not exist, throw a TypeError.
  13. Process the req_permissions member passing json and manifest.
  14. Process the version member passing json and manifest.
  15. If manifest["version"] does not exist, throw a TypeError.
  16. Process the widgets member passing json and manifest.
  17. Process the window member passing json and manifest.

2. MiniApp platform version resources

A MiniApp platform version resource is an object that indicates the minimum and target platform versions to be used by the MiniApp.

The following members are defined under the scope of the MiniApp manifest, addressing specific aspects of a platform version resource.

2.1 min_code member

The MiniApp platform version resource's min_code member is a non-negative integer number that indicates the minimum supported version of the MiniApp user agent's platform to ensure the regular operation of a MiniApp.

To process the platform version's min_code member, given object json and ordered map platform_version:

  1. If json["min_code"] does not exist, or if the type of json["min_code"] is not number, return failure.
  2. Set platform_version["min_code"] to json["min_code"].

2.2 target_code member

The MiniApp platform version resource's target_code member is a non-negative integer number that indicates the target supported version of the MiniApp user agent's platform to ensure the regular operation of a MiniApp.

To process the platform version's target_code member, given object json and ordered map platform_version:

  1. If json["target_code"] does not exist, or if the type of json["target_code"] is not number, return.
  2. Set platform_version["target_code"] to json["target_code"].

2.3 release_type member

The MiniApp platform version resource's release_type member is a string that indicates the release type of the MiniApp user agent's target platform version that is required for running the application. For example, the value can be set to CanaryN, BetaN, or Release. N represents a positive integer, such as "Beta1".

To process the platform version's release_type member, given object json and ordered map platform_version:

  1. If json["release_type"] does not exist, or if the type of json["release_type"] is not string, return.
  2. Set platform_version["release_type"] to json["release_type"].

3. MiniApp permission resources

A MiniApp permission resource is an object that describes a request for using a concrete system feature (e.g., access to device's location, user contacts, sensors, and camera) required for the proper execution of a MiniApp.

The following members are defined under the scope of the MiniApp manifest, addressing specific aspects of a permission resource.

3.1 name member

The MiniApp permission resource's name member is a string that indicates the name of the feature requested.

To process the permission resource's name member, given object json and ordered map permission:

  1. If json["name"] does not exist, or
    if the type of json["name"] is not string, or if json["name"] is the empty string, return.
  2. Set permission["name"] to json["name"].

3.2 reason member

The optional MiniApp permission resource's reason member is a string that indicates the reason given to request the feature specified in the name attribute.

To process the permission resource's reason member, given object json and ordered map permission:

  1. If json["reason"] does not exist, or
    if the type of json["reason"] is not string, or if json["reason"] is the empty string, return.
  2. Set permission["reason"] to json["reason"].

4. MiniApp version resources

A MiniApp version resource is an object that describes the version code and version name of a MiniApp.

The following members are defined under the scope of the MiniApp manifest, addressing specific aspects of a version resource.

4.1 code member

The MiniApp version resource's code member is a non-negative integer number that represents the version of a MiniApp. It is mainly used for enhancing the maintainability and security of MiniApp (e.g., compatibility among incremental versions). The code member aims at supporting the development and deployment process, and it is not usually displayed to the end-user.

To process the version's code member, given object json and ordered map version:

  1. If json["code"] does not exist, or if the type of json["code"] is not number, return failure.
  2. Let version be a number, initially 1.
  3. If json["code"] is greater than 0, then:
    Set version to json["code"].
  4. Set version["code"] to version.

4.2 name member

The MiniApp version resource's name member is a string mainly used for describing information on the version of a MiniApp, playing an essential role in version control, MiniApp application, and platform compatibility. It is usually considered as the version that is shown publicly and displayed to the user.

Note: Usage

The RECOMMENDED format for this member is X.Y.Z, where X, Y, and Z are non-negative integer values (e.g., 1.10.0), as specified in Semantic Versioning [SEMANTIC-VERSIONING].

To process the version's name member, given object json and ordered map version:

  1. If json["name"] does not exist, or if the type of json["name"] is not string, return failure.
  2. Set version["name"] to json["name"].

5. MiniApp widget resource members

A MiniApp widget resource is an object that defines and configures a widget that is part of a MiniApp.

The following members are defined under the scope of the MiniApp manifest, addressing specific aspects of a widget resource.

5.1 name member

The MiniApp widget resource's name member is a string that indicates the title of a widget.

To process the widget's name member, given object json and ordered map widget:

  1. If json["name"] does not exist, or if the type of json["name"] is not string, return.
  2. Set widget["name"] to json["name"].

5.2 path member

The MiniApp widget resource's path member is a relative-url string that defines the corresponding page route of a widget, represented as in the pages array.

To process the widget's path member, given object json and ordered map widget:

  1. If json["path"] does not exist, or if the type of json["path"] is not string, return.
  2. Let url be the result of parsing json["path"].
  3. If url is failure, return.
  4. Set widget["path"] to url.

5.3 min_code member

The optional MiniApp widget resource's min_code member is a number that indicates the minimum platform version supported for a MiniApp widget.

Note: Usage

Since Widget APIs and MiniApp APIs may differ, the declaration of the minimum version of the platform may be different. Thus, if the widgets member omits min_code explicitly, the user agent will consider the same requirement as the specified in the min_code member in the platform_version object.

To process the widget's min_code member, given object json, ordered map widget and ordered map manifest:

  1. Set widget["min_code"] to manifest["min_code"].
  2. If json["min_code"] does not exist, or if the type of json["min_code"] is not string, return.
  3. Set widget["min_code"] to json["min_code"].

6. MiniApp window resource members

A MiniApp window resource is an object that defines and configures the window that contains a MiniApp.

The following members are defined under the scope of the MiniApp manifest, enabling the description of the MiniApp window resource.

6.1 auto_design_width member

The auto_design_width member is a boolean that indicates whether the design_width of the page is auto-calculated by the user agent. When auto_design_width is true, the value of design_width is ignored. In this case, the system's baseline width is automatically determined according to the pixel density of the screen.

Value by default: false.

To process the window's auto_design_width member, given object json and ordered map window:

  1. If json["auto_design_width"] does not exist, or if the type of json["auto_design_width"] is not boolean, return.
  2. Set window["auto_design_width"] to json["auto_design_width"].

6.2 background_color member

The background_color member is a string that specifies the background color of the window that contains a MiniApp.

This member supports sRGB colors, and it is equivalent to the application manifest's background_color.

Value by default: "#ffffff".

Note: Processing the `background_color` member

When processing a MiniApp manifest, the process a color member algorithm is used to process the window's background_color member, according to the [APPMANIFEST] specification.

6.3 background_text_style member

The background_text_style member is a string that specifies the background text style, indicating a light or dark color theme.

This member supports the values of prefers-color-scheme and MUST contain one of the following background text style values:

"light"
For light style.
"dark" (default)
For dark style.

To process the window's background_text_style member, given object json and ordered map window:

  1. If json["background_text_style"] does not exist, or
    if the type of json["background_text_style"] is not string, or
    if json["background_text_style"] doesn't match one of the background text style values, return.
  2. Set window["background_text_style"] to json["background_text_style"].

6.4 design_width member

The design_width member is a number that indicates the baseline width of the page design in pixel unit. It is used for visually adjusting the page components.

The value is a non-negative integer and the value by default is 750.

To process the window's design_width member, given object json and ordered map window:

  1. If json["design_width"] does not exist, or
    if the type of json["design_width"] is not number, or if the type of json["design_width"] is less than 0, return.
  2. Set window["design_width"] to json["design_width"].

6.5 enable_pull_down_refresh member

The enable_pull_down_refresh member is a boolean that specifies if the pull-to-refresh event is enabled during the interaction with the MiniApp.

Value by default: false.

To process the window's enable_pull_down_refresh member, given object json and ordered map window:

  1. If json["enable_pull_down_refresh"] does not exist,
    or if the type of json["enable_pull_down_refresh"] is not boolean, return.
  2. Set window["enable_pull_down_refresh"] to json["enable_pull_down_refresh"].

6.6 fullscreen member

The fullscreen member is a boolean that indicates if the MiniApp is shown in full-screen display mode.

Note: Usage

When this member takes the true value, it is equivalent to the fullscreen value on the application manifest's display member. When it takes false as value, it is equivalent to minimal-ui.

Value by default: false.

To process the window's fullscreen member, given object json and ordered map window:

  1. If json["fullscreen"] does not exist,
    or if the type of json["fullscreen"] is not boolean, return.
  2. Set window["fullscreen"] to json["fullscreen"].

6.11 on_reach_bottom_distance member

The on_reach_bottom_distance member is a number that defines the vertical offset from the bottom of the window required to trigger a page pull-up event. Values for this member are non-negative integers expressed in pixel unit.

Value by default: 50.

To process the window's on_reach_bottom_distance member, given object json and ordered map window:

  1. If json["on_reach_bottom_distance"] does not exist, or
    if the type of json["on_reach_bottom_distance"] is not number, or
    if if the type of json["on_reach_bottom_distance"] is less than 0, return.
  2. Set window["on_reach_bottom_distance"] to json["on_reach_bottom_distance"].

6.12 orientation member

The orientation member is a string that specifies the configuration of the screen orientation for the MiniApp.

This member supports the orientation values: "portrait" and "landscape" defined in OrientationLockType [SCREEN-ORIENTATION].

Note: Usage

This member is equivalent to the application manifest's orientation.

Value by default: "portrait".

To process the window's orientation member, given object json and ordered map window:

  1. If json["orientation"] does not exist, or
    if the type of json["orientation"] is not string, or
    if json["orientation"] doesn't match one of the orientation values, return.
  2. Set window["orientation"] to json["orientation"].
Issue 8: About window.orientation

The description of window.orientation is currently:

Screen orientation settings, valid values: portrait and landscape.

It is not clear to me if this is just a default orientation when the user opens a MiniApp (the user can change it when using the MiniApp), or a locked orientation (the user can't change it).

7. Localizable members

A localizable member is a manifest member whose content may be adapted to specific linguistic, geographical, and cultural aspects. These localizable members share the language tag (lang) and display direction (dir) defined at manifest's root.

The following members are localizable members:

8. Dependencies

As a crucial part of a MiniApp Package, the manifest.json file describes several important aspects of the MiniApp by referring to the MiniApp Package resources in different file types, such as the page scripts and visual configuration files in the pages directory and the images in the common directory. Details are specified in [MINIAPP-PACKAGING].

The regular operation of a MiniApp relies on the proper configuration in the manifest and the MiniApp Package availability of resources. Such dependency needs to be checked during both the development phase and deployment phase.

9. Security and Privacy Considerations

9.1 Content constraint

As the manifest is a JSON document and will commonly be encoded using [UNICODE], the security considerations described in [[JSON] and [UNICODE-SECURITY] apply. In order to prevent developers from including custom/unrestrained data in a manifest, implementors may use a more strict schema than that defined in JSON Schema to impose their implementation-specific limits on the member names, types, and value ranges (e.g., to guard against memory overflow, or to meet platform-specific limitations).

9.2 Local resource access

Members like icons, pages, and widgets contain paths referring to local resources on the hosting platform. Implementors and the hosting platform should check the validity of those paths to prevent illegal access out of the scope of the MiniApp Package. On the other hand, the MiniApp itself (e.g., using scripting code) may provide mechanisms to access external resources either on the hosting platform or on remote websites (e.g., through a URI). In this case, the hosting platform is responsible for providing a clear indication to an end-user about such a context switch.

Additionally, the req_permissions member provides a specific means to control the access the local software, hardware, and data resources on the user's device. User's consent should be asked when it comes to privacy-related or high-level privileged resources.

9.3 Integrity

The integrity of the manifest document is protected by a cryptographic hash mechanism as part of the whole MiniApp Package, as detailed in [MINIAPP-PACKAGING].

9.4 Transparency

The user agent SHOULD provide the end-user with transparent metadata about a MiniApp (i.e., app_id, name, short_name, icons, name, description), offering users enough information, allowing them to make a conscious decision about its usage. This practice could also help to identify spoofing MiniApps.

A. Conformance

As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.

The key words MAY, MUST, RECOMMENDED, and SHOULD in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

This specification uses the Augmented Backus-Naur Form (ABNF) as defined in [RFC5234].

The MiniApp Manifest specification depends on the Infra Standard [INFRA] to describe algorithms.

B. JSON Schema

Developers interested in validating the MiniApp manifest document can use the JSON Schema defined at https://w3c.github.io/miniapp-manifest/manifest_schema.json.

Note: MiniApp Manifest JSON Schema

C. Acknowledgements

This section is non-normative.

Editor's note
To include contributors here!

D. Extensibility

This section is non-normative.

This specification is based on the application manifest extensibility principle.

Although proprietary extensions are undesirable, they may be included as a manifest extension. In this case, it is RECOMMENDED to use vendor prefixes for the new members.

We encourage implementors to add proprietary extensions to the Extensions Registry. This allows the community to track what extensions vendors and/or the web community have defined and documented.

Issue 9: Proprietary extensions of the manifest

The Web App Manifest allows adding new proprietary manifest members using vendor prefixes: https://www.w3.org/TR/appmanifest/#proprietary-extensions

We probably need something similar.

The following is an example of three hypothetical vendor extensions.

Example 2: Proprietary extensions
{
  ...
  "wechat_new_feature": "foo",
  "ali_new_url_system": "http://example.org",
  "coolminiapp_menu_color": "#FA0000"
  ...
}

E. References

E.1 Normative references

[APPMANIFEST]
Web Application Manifest. Marcos Caceres; Kenneth Christiansen; Mounir Lamouri; Anssi Kostiainen; Matt Giuca; Aaron Gustafson. W3C. 23 June 2021. W3C Working Draft. URL: https://www.w3.org/TR/appmanifest/
[BCP47]
Tags for Identifying Languages. A. Phillips, Ed.; M. Davis, Ed.. IETF. September 2009. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc5646
[css-color-4]
CSS Color Module Level 4. Tab Atkins Jr.; Chris Lilley. W3C. 1 June 2021. W3C Working Draft. URL: https://www.w3.org/TR/css-color-4/
[css-values]
CSS Values and Units Module Level 3. Tab Atkins Jr.; Elika Etemad. W3C. 6 June 2019. W3C Candidate Recommendation. URL: https://www.w3.org/TR/css-values-3/
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[IMAGE-RESOURCE]
Image Resource. Aaron Gustafson; Rayan Kanso; Marcos Caceres. W3C. 4 June 2021. W3C Working Draft. URL: https://www.w3.org/TR/image-resource/
[INFRA]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[JSON]
The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL: https://datatracker.ietf.org/doc/html/rfc8259
[MANIFEST-APP-INFO]
Web App Manifest - Application Information. Aaron Gustafson. W3C. 24 March 2021. W3C Note. URL: https://www.w3.org/TR/manifest-app-info/
[mediaqueries-5]
Media Queries Level 5. Dean Jackson; Florian Rivoal; Tab Atkins Jr.. W3C. 31 July 2020. W3C Working Draft. URL: https://www.w3.org/TR/mediaqueries-5/
[MINIAPP-PACKAGING]
MiniApp Packaging. URL: https://w3c.github.io/miniapp-packaging/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC5234]
Augmented BNF for Syntax Specifications: ABNF. D. Crocker, Ed.; P. Overell. IETF. January 2008. Internet Standard. URL: https://datatracker.ietf.org/doc/html/rfc5234
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
[SCREEN-ORIENTATION]
The Screen Orientation API. Mounir Lamouri; Marcos Caceres; Johanna Herman. W3C. 17 June 2021. W3C Working Draft. URL: https://www.w3.org/TR/screen-orientation/
[UNICODE]
The Unicode Standard. Unicode Consortium. URL: https://www.unicode.org/versions/latest/
[UNICODE-SECURITY]
Unicode Security Considerations. Mark Davis; Michel Suignard. Unicode Consortium. 19 September 2014. Unicode Technical Report #36. URL: https://www.unicode.org/reports/tr36/tr36-15.html
[url]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[webidl]
Web IDL. Boris Zbarsky. W3C. 15 December 2016. W3C Editor's Draft. URL: https://heycam.github.io/webidl/

E.2 Informative references

[SEMANTIC-VERSIONING]
Semantic Versioning. URL: https://semver.org/