MiniApp Standardization White Paper version 2

W3C Group Draft Note

More details about this document
This version:
https://www.w3.org/TR/2022/DNOTE-mini-app-white-paper-20220511/
Latest published version:
https://www.w3.org/TR/mini-app-white-paper/
Latest editor's draft:
https://w3c.github.io/miniapp/white-paper/
History:
https://www.w3.org/standards/history/mini-app-white-paper
Commit history
Editors:
Anqi Li (W3C)
Qing An (Alibaba)
Dan Zhou (Baidu, Inc)
Wanming Lin (Intel Corporation)
Kaining Yuan (Intel Corporation)
Yinli Chen (Xiaomi)
Xiaowei Jiang (Xiaomi)
Fuqiao Xue (W3C)
Former editors:
Dapeng Liu (Alibaba)
Hongru Zhu (Alibaba)
Qingqian Tao (Baidu, Inc)
Zhixing Lei (Baidu, Inc)
Zhiqiang Yu (Huawei)
Lei Zhao (China Mobile)
Feedback:
GitHub w3c/miniapp (pull requests, new issue, open issues)
public-miniapps-wg@w3.org with subject line [mini-app-white-paper] … message topic … (archives)

Abstract

This document introduces a new format for mobile application, named MiniApp, which is a very popular hybrid solution relying on Web technologies but also integrates with capabilities of Native Apps.

Status of This Document

This section describes the status of this document at the time of its publication. 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 Group Draft Note using the Note track.

Group Draft Notes are not endorsed by W3C nor its Members.

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.

The W3C Patent Policy does not carry any licensing requirements or commitments on this document.

This document is governed by the 2 November 2021 W3C Process Document.

1. Introduction

1.1 Problems

Native Apps are well received in our daily life, but there are still many things that can be done better for users.

The Web is an ideal platform to avoid these problems, but by far, it's still imperfect.

1.2 What is MiniApp?

MiniApp is a new format of mobile application, a hybrid solution which relies on Web technologies (especially CSS and JavaScript) but also integrates with capabilities of Native Apps.

A super app is a software platform that hosts and supports other applications (i.e., MiniApps), enabling their execution through the use of the platform's resources.

MiniApps got popular from their usage on a few super apps, as it was born with a few characters that help to fill the gap of the Web and the Native.

1.3 Gap between MiniApps and PWA

MiniApps are not aimed to replace PWA, or the Web, or the Native.

MiniApps and PWAs are composed of the same resources (i.e., scripts, markup-language-based documents, stylesheets, multimedia, etc.). The type of documents and their coding languages are similar, but MiniApps implement specific dialects and built-in services that are not standard.

Apart from the format, MiniApp's resources are usually packed in a self-contained physical structure that enables a flexible distribution from app marketplaces to offline exchange.

The main difference between PWAs and MiniApps is the execution environment. MiniApp user agents are super-apps or platforms implemented on the operating system, while PWA user agents are usually web browsers.

Although both technologies have similar APIs and services, there is a significant gap between the API specifications in each application type. PWAs rely on standard Web APIs while MiniApps implement non-standard APIs to maximize the platform's capabilities, such as device-specific features and vendor-exclusive services.

MiniApp vendors define similar UI (User Interface) elements that do not always have a direct equivalent in HTML.

Depending on the implementation, a MiniApp user agent could be an operating system, a super-app, or any other hosting platform, based on different and various rendering engines and WebViews. The architecture of a MiniApp user agent differs from PWA user agents, as we can see in the following picture.

The architecture of MiniApps and PWA
Figure 1 The architecture of MiniApps and PWA

The main differences between them can be summarized as the following table.

Feature Progressive Web App MiniApp
Source code Standard markup languages (HTML), stylesheets (CSS), and scripts (JavaScript). Non-standard dialects of HTML, CSS and JavaScript
Deployed Format Web resources (mainly: HTML, CSS, JavaScript code, and WebAssembly modules) HTML, CSS, JavaScript, and other resources packed in a container.
Packaging No. Resources linked on the Web. Yes. Different package formats per vendor.
Needs to host files on web server Yes No
Installation-free usage Yes, running in the browser. Running in a super app or on the OS.
Installation with standalone icon From the browser or app store (optional) No
Services Access to Web APIs Access to non-standard Web APIs, including some system native APIs

1.4 Case studies

1.4.1 Case 1: Shared Bicycle Service

The popularization of MiniApps helps to make the shared bike a seamless service instead of a cumbersome application.

  • User chooses any of the miniapp platforms on their mobile device, which, is usually a super app that he/she already logined;
  • User scans the QR-code label attached on a shared bicycle within the super app;
  • The hosted-app will automatically navigate to the shared bicycle miniapp and unlocks the bicycle instantly;
  • Upon arrival, user locks the bike on the miniapp;
  • Transaction completes, a message of the payment detail is sent to the user.
Shared Bicycle Service
Figure 2 Shared Bicycle Service with MiniApp

For users, miniapps can bring convenient from a few perspectives:

the Web Native App MiniApp
Download/Install No Yes No
Verified/Trusted No Yes Yes
Login/Register Yes Yes User permission
Payment Send a payment request Register a credit card or navigate to another app Complete within the hosted-app

1.4.2 Case 2: AR Zoo

MiniApp developers can simply use HTML/CSS/JavaScript as the programming language, but MiniApp is more flexible so it excels at quick development of complex features in daily work.

This MiniApp tries to build an AR zoo with AI technologies to recognise the animals. Developers can easily do that by adding a few components or APIs that provide access to the native capabilities or advance features, f.ex., Image Recognition, AR 3D Animal models rendering, a speech API to for speech synthesis, AR navigation provided by the map SDK.

MiniApps can be discovered by the search engines, by the MiniApp store in the hosted-app or by QR-code.

AR zoo
Figure 3 AR Zoo MiniApp

For the developers, the incentive to work on miniapps is very obvious.

the Web Native App MiniApp
Discoverability Search Engine App Store Multiple: search engines + MiniApp store in the hosted-apps + QR-code
Verified/Trusted Still exploring by Native App stores by host App platforms
Deploy/Reload load/reload the webpage installed/reinstalled load/reload as it's using a JS engine
Programming Language Web programming language new/multi languages: iOS and Android at least Web programming language
APIs/Components (AR, Image Recognition, Geolocation, Speech API) very basic complex for web developers very simple high-level APIs and components

1.4.3 Case 3: MiniApp for Vehicle

One of the goals of MiniApp to connect information and services across different platforms, so it's ideal for IoT applications such as Smart Automotive, voice-control speaker and Smart TV.

Nowadays, it's possible to convert some MiniApps to adapt the vehicle screen and system, also, a few MiniApp vendors have built a MiniApp platform specially design for the vehicle system, to help distribute or upgrade applications to various of car model. This brings millions of Web developers to the Automotive application ecosystem.

These Automotive miniapps can service many user scenarios, including gas filling, car washing, Electronic Toll Collection, insurance, restaurant reservation, or entertainment. For example, when the system detects the remaining fuel is less than 20%, it can recommend to the owner a Gas Pumping MiniApp. The user can get the information of the nearest gas station and head there to complete the gas pumping including the payment within MiniApp, "refueling without getting off the vehicle".

smart car
Figure 4 MiniApp for Smart Car(Gas Pumping App)

1.4.4 Case 4: MiniApp for IoT

IoT device is becoming another carrier running MiniApps. MiniApp for IoT intends to enable interoperability across multiple IoT device platforms and IoT operating systems. Rather than having to deal with the difference across the multiple IoT device platforms and IoT operating systems, by introducing MiniApps for IoT, developers only need to focus on the application development on IoT devices.

One example is HVAC (heating, ventilating, and air-conditioning) application switch panel which has a screen and several physical buttons. In this case, by introducing MiniApp for IoT, the switch panel’s screen UI can be designed and developed using Web technologies, to display the HVAC information. For example, the target temperature value inputted by the physical and the measured real-time temperature value can be displayed.

IoT MiniApp
Figure 5 IoT MiniApp running on HVAC application switch panel having a screen and several physical buttons

Another example is smart speakers with a touch screen. In this case, by introducing MiniApp for IoT, the smart speaker’s touch screen UI can be designed and developed using Web technologies, to play music and video, to control the IoT devices at home, to do online shopping.

IoT MiniApp on smart speaker
Figure 6 IoT MiniApp running on smart speaker with a touch screen

1.4.5 Case 5: MiniApp for TV

Unlike MiniApps running on mobile phones where user interaction depends on the touch screen, the user interaction of MiniApps running on TV switches to TV remote panel keyboard plus TV screen focus.

With MiniApp for TV, users can buy merchandise on TV through E-commerce MiniApp.

E-commerce MiniApp running on TV
Figure 7 E-commerce MiniApp running on TV

And also, users can play games on TV through Gaming MiniApps.

Gaming MiniApp running on TV
Figure 8 Gaming MiniApp running on TV

2. MiniApp Overview

2.1 Core Features

2.1.1 Separate the View Layer from the Logic Layer

In a miniapp, the view layer is usually separated from the logic layer.

logic layer and view layer
Figure 9 General Architecture of MiniApp

The View Layer is responsible for rendering MiniApp pages, including Web components rendering and native components rendering, which can be considered as hybrid rendering. For example, Web components rendering can be handled by WebView, but some of the Web components rendering aren't supported by WebView or have performance limitation, MiniApp also relies on some native components, such as map, video, etc.

Logic Layer is implemented with JS Worker. The Worker is responsible for MiniApp’s event processing, API calling and lifecycle management.

Extended native capabilities usually come from the hosting Native App or OS, including payment, file processing, scanning, phone call, etc. These capabilities are called through certain APIs. When a Mini App calls a native API, it transfers the API calling to Extended Native Capabilities for further processing via JS Bridge, and obtains the result from Extended Native Capabilities via JS Bridge.

data flow of MiniApp when an API is called
Figure 10 Data flow of MiniApp when an API is called

Worker establishes connection for each Render, transferring the need-to-be-rendered data to render for further processing.

If an event is triggered by a component in a MiniApp page, this page’s Render will send the event to worker for further processing. At the same time, the Render will wait for the data sent from worker to re-render the MiniApp page.

The rendering can be considered as stateless, and all the states will be stored in the worker.

The benefits of separating the View Layer and the Logic Layer include:

  • Very handy for data sharing and interaction among multiple MiniApp pages.
  • Having the same context within a lifecycle of MiniApp can provide a similar coding experience for those developers coming from native app developement background.
  • Separation and parallel implementation of Render and JS worker can prevent the situation where a JS execution impacts or slows down the page rendering, which can help enhance the performance of rendering.

2.1.2 Rich APIs and Components

MiniApp platform provides many components to help developers build a fancy UI, including basic components like View, Form, Image, and high-level component like Maps.

MiniApp venders also offer a number of APIs for developers to get access to capabilities of both the Web and the native, including basic APIs such as UI display APIs, Image API, and those advanced ones like Account API, Map API, Payment API.

APIs usually work together with components. When user clicks certain component on a MiniApp page, it will call the related API to complete user’s interaction and refresh the current MiniApp page if needed.

2.1.3 MiniApp Constructor

In order to obtain similar user experiences to native apps, MiniApp resources are usually packaged together. After downloading and installing a MiniApp package, all static page templates/CSS/JavaScript files need to present app pages already exist on users' machines. These resources are always available without any redundant downloads until next update.

A MiniApp package is a compressed format (e.g. zip) archive, including:

  • one configuration document, located at the root directory of the package. The config file should include:
    • general description of the entire MiniApp.
    • description of pages and their corresponding paths, for the purpose of page locating and opening.
  • one app-level logic file, containing JavaScript codes, deals with app-level lifecycle callbacks.
  • one or multi page files, containing templates codes for page structure, CSS codes for page style, and JavaScript codes for page logic.
  • support digital signature for validation.

For the purpose of locating a specific MiniApp while searching and executing, a MiniApp must have a package name or an ID on the platform. An icon is also required for user recognization.

2.1.4 MiniApp Widgets

In addition to being presented in the form of an MiniApp page, MiniApp can also be displayed in the form of information fragment, that is, a MiniApp widget. In this form, developers can put their service and/or content to various host scenarios, called host environment, such as assistants, search page, etc.. This feature connects services of the MiniApp with the scenario, providing users with more convenience.

For example, when a user purchases a train ticket for trip, the MiniApp widget on smart assistant shows the train's latest status immediately. The user can click on this widget and jump to a full-screen MiniApp page for more detailed information.

Widget from home screen to MiniApp
Figure 11 Widget from home screen to MiniApp

Same as MiniApp page, widget is also described by URI scheme. The host environment specifies the MiniApp package and the corresponding widget to be loaded through URI path, and passes data to the widget through URI query params. After the widget is loaded, it is displayed and rendered in the host environment. Data from the host and widget, as well as data from different widgets are isolated to ensure security and independence.

In many scenarios, a widget can open a MiniApp page for more complicated operations. In such cases, widgets often need to share data with its corresponding MiniApp, e.g. maintain a consistent login status. Therefore, the data of the widget and the MiniApp can be accessed from each side. In other word, MiniApp widget and page have same data access rights.

widget interaction
Figure 12 MiniApp widget interaction

One of the goals of the widget is to let the user forget the traditional app concept and truly meet the user's needs in the form of service. So in addition to all app invocation paths, widgets can also be triggered by different methods on different scenarios, such as text keywords, voice analysis, picture recognition, scan code, event intent.

Note: Widget is implemented by Quick App in China market.

2.1.5 Single-Instance, Multi-Entries

There are multiple entrances to discover, open and access MiniApps. Unlike Web in multi WebView, only one instance will be created for the same MiniApp, so MiniApp keeps its status and data in a consistent manner globally. For example, after one user opens and logs in a MiniApp through the entrance of QR code for the first time, the user will remain logged in next time when the user returns from another entrance like MiniApp store.

The entries for MiniApps include, but not limit to:

  • MiniApp store
  • Search Engine
  • Smart Assistant
  • QR code
  • SMS/text
  • Physical Object(with AI)
  • Browser
  • Calender items
  • Voice message(with AI)

2.1.6 Performance and User Experience

MiniApps try to improve their performance and user experience with a few mechanisms that have been proved to be effective through practice.

Packaging

With MiniApp's constructor, user only needs to download the package when the MiniApp is first opened, and then the static resources(pages/JavaScript/CSS) in the MiniApp needn't be downloaded again, so that the loading and jumping of the following pages can be more quickly responded. This feature improves user operation experience and save network traffic.

Meanwhile, the MiniApp has a pre-download mechanism, which can download the MiniApp packages in advance, or pre-downloads separately for the first page, and perform streaming decompression in parallel during download to minimize the time-consuming of MiniApp startup phase and balance the loss of the first page performance when openning first time.

Multiple Rendering Views

The MiniApp uses native page stack management between render views, and the page switching is driving by native code. Therefore, the gesture operation in the page, the switching between pages can achieve the exactly same smooth experience as Native.

Because of the isolation of View layer and Logic layer, the View layer can be rendered independently. Without being blocked by JavaScript logic code, the rendering speed of the page can be greatly improved.

Pre-built and reuse of runtime environments

MiniApp's runtime environment is usually pre-built before launching a mini-app, thus reducing the time to launch a MiniApp. Pre-built content includes rendering views, static resources, developer defined prefetch requests, and MiniApps runtime container. After a MiniApp is activated, it will take over the pre-built rendering view, then we continue to pre-built a new render view into the cache pool for the next one. There is a limit on render view quantity, when any render view gets closed or the quantity limit is exceeded, the oldest opened render view will be destroyed. When the MiniApp application exit, the runtime will be destroyed and the application environment and resources can be reused.

Pre-defined Component and API

MiniApp platforms provides very rich components and APIs, these components and APIs are usually well designed and able to help ensure the performance of the general work from developers.

JavaScript framework presets and hot reload

MiniApp's runtime environment contains two major parts, the basic capabilities provided by Native code, and a framework, include developer API and some components, implemented by JavaScript. The JavaScript framework is built in native Apps, and will be loaded into the MiniApp runtime environment in advance before executing MiniApp. The JavaScript framework can be hot reloaded (reload during usage), which brings lots of possibilities to improve performance.

2.1.7 Login

The MiniApp platforms provide a variety of ways for a user to log in to the MiniApp. If the user has already logged in to the platform with identity authentication, the login information of the platform can be shared with MiniApp, quickly realizing the interoperability of MiniApp’s own account system and the platform account system, which makes the access process of the MiniApp more smooth.

For example, the traditional login process with SMS verification is more time-consuming, users need to manually enter their cell phone number first, and then enter the verification code after receiving the SMS to log in. The advantage of MiniApp is that developers can use the components / APIs provided by the platform to obtain users' cell phone numbers securely and conveniently, prompting the user to authorize one-click login process with their cell phone numbers, which makes the entire process simple for the user and reduces the cost of obtaining user information for developers.

Sign in to a MiniApp
Figure 13 Sign in to a MiniApp

2.1.8 Subpackaging

MiniApp subpackaging is a build mechanism for improving the MiniApp package development process. It helps developers divide different business modules into different subpackages.

For developers: a MiniApp has the main package by default, it contains the startup page files and public resources. Subpackage is a building type that flexibly way divided the developer's business modules. Users can open special pages after loading different sub-packages on demand.

For users: when the user starts the MiniApp, the main package will be downloaded by default and the page in the main package will be launched. If the user needs to open a page in the subpackage, the MiniApp Runtime will start to download and load the subpackage and start the subpackage page.

Through such a subpackage building mechanism is better to decouple and collaborate when multiple teams develop together. When users use the MiniApps, the subpackaging mechanism can improve the loading speed of the MiniApp homepage, load subpackages on demand, and optimize the user experience.

2.1.9 Add-ons

In a MiniApp, an add-on / extension is an encapsulated module that adds a specific feature to an existing MiniApp, and it could be a component, a JavaScript module, or a page. The add-on / extension can be only executed in a MiniApp instead of running separately. Developers can develop add-on / extension just like a MiniApp, and upload it to the MiniApp platform for other MiniApps to reuse.

MiniApp supports add-on / extension to:

  • reduce development costs by code reuse and help developers easily add new features
  • update functionality automatically without awareness of developers
  • reduce the package size of MiniApps by not loading unused functions

The add-on / extension mechanism lowers the barriers of developing MiniApps and brings more developers to the MiniApp ecosystem.

2.2 MiniApp Market

This section describes a few current mainstream MiniApp or relevant platforms.

Alipay Mini Program

Alipay Mini Program runs on top of Alipay Native App, which is a hybrid solution of Web and Native. Alipay Mini Program relies on Web technologies as CSS and JavaScript. Meanwhile, it integrates the functionalities of Alipay Native App as payment, credit service, face authentication, etc.

Now there have been more than 1,000,000 Mini Programs running on Alipay Native App and 230 million DAU (Daily Active User). The user scenarios include retails, transportation, medical services, etc.

Baidu Smart Mini Program

Baidu Smart Mini Program refers to an open ecological product that intelligently connects people to information and services, which based on Baidu APP and other partners’ platforms. Through Baidu’s AI abilities, and by understanding all contents in Smart Mini Programs, we connect user and Smart Mini Program accurately. With Baidu’s search and information flow dual engine, users can achieve an APP-like experience within Smart Mini Programs. As of July 2019, we have 150,000+ Smart Mini Programs and 270 million MAU.

Baidu Smart Mini Program is open-sourced within our open source alliance, which has more than 30 cooperators, covered super APPs, mobile OS, car OS, voice-control speakers and TV.

Quick Apps (Quick App Alliance including Xiaomi and Huawei)

Quick App is a MiniApp standard developed by 12 top mobile phone manufacturers in the Quick App Alliance, covering over 200 million MAU. Developers can achieve one-time development and run on all hardware vendors' platforms. Quick Apps, which are deeply integrated in the operating system, can be obtained in multiple scenarios of the mobile phone system, with just one click. By introducing a native rendering path, an effective combination of front-end development and native performance experience is achieved.

Quick Apps can run in two forms: Quick App page form like native app page and a widget form that presents information in the scene. The two are adapted to different user needs, connecting the system and the MiniApp into a whole in multiple forms.

360 PC MiniApp

MiniApps on PC is still in an early exploration stage. 360 PC MiniApp is a light application running in their PC browser. Compared to the traditional webpages, it's served with more functionalities and easier interaction with the PC operation system.

PC miniapps are only available to those validated as an enterprise account, most of the features are under tough regulations, so that they can be considered as highly trusted web contents.

PWAs

PWAs are the latest term to summarize modern web applications. As a counterpart of native apps, a PWAs app looks and feels like a native app, and can be installed to home screen / launcher / start menu; it can send push notification to re-engage user; it can be used when offline and behaves under poor network condition; it works with devices of wide ranging capabilities and it's still evolving to works with new capabilities defined by open web standards; payment can be made by user inside PWAs apps; and PWAs apps are search-engine-friendly and work perfectly with hyper-links. PWAs are successful on both the technical aspect and business aspect (widely adopted by many web sites, esp. consumer facing ones).

3. Working with the Web

This section selects some typical use cases and proposes a few APIs that MiniApps would like to have support from the Web.

3.1 Application Lifecycle

3.1.1 Hybrid Rendering

MiniApp is a hybrid solution of Web rendering and Native rendering. It'd be great if there is a good way to combine the rendering results from the Web and from the Native.

Rendering results coming from both the Web and the Native
Figure 14 Rendering results coming from both the Web and the Native

Proposal: Mini App needs a standardized API to help integrate the native rendering result into Web rendering result.

3.1.2 Transition Animation

MiniApp would like to provide transition animation during page switching so that users can have similar experience as when they are using a Native App, but it's almost impossible to do that now.

Proposal: Mini App needs an API to call add transition animation during MiniApp page switching.

3.1.3 Standardise the Package Constructor of MiniApp

MiniApp can form a package and parsing convention for multiple MiniApp hosting platforms through a standardized distribution format. Currently, each MiniApp hosting platform provides different development tools (different packaging methods), and the MiniApp is parsed differently in different MiniApp hosting environments.

Proposal: The MiniApp is actually a packaged (compressed) collection of files during the distribution process. We can describe a MiniApp (.ma) with a uniform file suffix and specify how to create the .ma file and how to parse the .ma file.

3.1.4 Standardise the navigation to a MiniApp page

For a hot page in a MiniApp, it may be referenced in another MiniApp, and it is expected to be accurately evoked when the user visits.

Proposal: Define a standardized protocol (URI scheme) to access MiniApp.

3.1.5 MiniApp Widgets

Like Android widgets or apple dashboard, users can directly get information and/or finish their task by a MiniApp widget without opening any web or app pages. A MiniApp widget can be displayed in an environment outside of web browsers, such as desktop or dashboard.

Proposal:

  • A MiniApp widget can be displayed within a host environment, which could be either webview or a native app page. The host environment loads a widget with its corresponding URI path, which describes a package and widget page.
  • A MiniApp widget can access local data or data from server. Meanwhile, a MiniApp widget can communicate with MiniApp in the same package.
  • A MiniApp widget should be interactive, meaning that it should be responsive to any user behaviors/interactions. A MiniApp widget should have the ability to open a web or app page.

3.2 Performance and Tuning

3.2.1 Define an event of time to interactive in MiniApp

MiniApp needs to know when the MiniApp page Time to Interactive (TTI) has been completed.

Proposal: A standardized event to notify that the MiniApp page Time to Interactive has been completed.

3.3 Graphics and Media

3.3.1 3D Model Element

3D models become more and more popular thanks to its rich details, and combined with AR, it will provide a much better user experience than 2D. The business cases might include online shopping, advertisement, education, etc. However, the current web lacks a standard and convenient way to deal with 3D model. In this document, we propose to define a HTML tag to directly handle 3D model, similar to the way we handle audio, video, image with corresponding HTML tags:

  • 360 view

    User can view a 3D model from different angles via gestures. And the 3D model can be zoom in/out as well. It can be viewed in full screen, or it can be embedded in a HTML page, shown together w/ other HTML contents.

  • View with AR

    User can place the 3D model in the real world environment with camera. User can specify different locations to place the model.

Proposal: A <xmodel> Element to specify a 3D model on the web and to power interactive 3D contents with AR.

3.3.2 Face Tracking

Face tracking can be used in many 3D scenarios.

Face Effects in Live Video
Add effects on the face in live video. These effects include full-screen filter, face reshape and makeup, 2d sticker, 3d headdress, etc. Most of these effects depend heavily on the real-time face tracking from video source.
Gaming
Game developers can design game strategies based on the tracked face. Like triggering a specific game logic when the eye is blinked, or check if the dropping fruit is in the opened mouth.
Virtual Makeup
Let users try lipsticks, eye shadows, glasses, hats on the product page to help them make the decision.

Proposal: A Face Tracking API use a video element as input and updates face tracking output every frame, which includes:

  • Bounding box of each face
  • 4x4 pose matrix of each face
  • Normalized (x, y) landmarks points
  • ace geometry data including vertices, normals, texture coordinates

3.3.3 Hand gestures tracking and recognition

Hand gestures can be used in video effect and AR/VR games scenario which can make apps more impressive and interactive.

Proposal: A high-level API to track hands movement, get hands outline.

3.3.4 Low level AR APIs based on ARCore and ARKit

There are a few AR APIs in MiniApps we would migrate to the Web, as they help to provide better AR experience in gaming, 3d model preview, interactive ads.

Proposal: Provide low-level AR APIs based on ARCore and ARKit, which includes:

Camera view matrix for world tracking
Provide the 4x4 view matrix of the spatial location and orientation of the mobile phone, which can be used to update the camera matrix in their 3D virtual world in real time by developers. Thereby the position of the real world can be correlated with the position of the object in the virtual world.
Plane detection and tracking
Detect planes in the real world and track these planes in real-time. Provide the 4x4 transform matrix which represents the center position and orientation of each plane. It can be used for placing 3D virtual object on the ground/desktop.
Anchor
Anchor defines a fixed position and orientation in the real world. Developers can create an anchor from a 4x4 transform matrix, which can be got by hit test. This matrix will be updated each frame to ensure that the virtual object corresponding to the matrix can be fixed in one position and direction in the real scene.
Hit test
Get a 4x4 transform matrix representing a position and orientation in the real world space corresponding to the screen position to implement functions such as clicking and placing virtual objects.
Better support for AR
Figure 15 APIs to better support AR

4. Current standards work, the WG work

4.1 Lifecycle

[MINIAPP-LIFECYCLE] defines the MiniApp lifecycle events and the process to manage MiniApp and each page's lifecycle. Implementing this specification enables the user agent to manage the lifecycle events of both the global application lifecycle and the page lifecycle.

As described in 2.1.1 Separate the View Layer from the Logic Layer, in a MiniApp, the View layer is separated from the Logic layer. The View layer is responsible for rendering MiniApp pages, including Web rendering and native rendering, which can be considered as hybrid rendering. The Logic layer is implemented with JavaScript Worker. The Logic layer is responsible for MiniApp’s event processing, API calling, and lifecycle management.

MiniApp lifecycle mechanism provides a means to manage MiniApp's View layer and Logic layer through the MiniApp global application lifecycle events and MiniApp page lifecycle events. Developing MiniApp with knowledge of the MiniApp global application lifecycle states and MiniApp page lifecycle states can lead to improved user experiences. MiniApp lifecycle includes a set of events, with which MiniApp can choose to alter its behavior based on its state.

4.2 Manifest

[MINIAPP-MANIFEST] is the specification that defines the set of metadata to describe MiniApps. The MiniApp Manifest extends the [APPMANIFEST] and the [MANIFEST-APP-INFO] specifications by providing additional mechanisms to set up basic information of a MiniApp, like identification, human-readable descriptions, versioning data, and styling information. The MiniApp manifest also configures the routing of the pages and widgets that are part of a MiniApp.

A MiniApp manifest is a JSON document that uses some basic elements of the Web App Manifest to describe a MiniApp (name, short_name, description, and icons), adding nine supplementary members to specify technical details about the MiniApp (app_id, version, platform_version, device_type, pages, req_permissions, and widgets) and configure the look and feel of the app (color_scheme and window).

4.3 Packaging

[MINIAPP-PACKAGING] defines the semantics and conformance requirements for a MiniApp package and the structure of the container that holds the resources of a MiniApp, including the page components (i.e., templates, stylesheets, and JavaScript logic), the manifest, and other media files or configuration resources.

This specification determines the logic and physical structures of MiniApps, holding the requirements in terms of file system organization and processing of the ZIP-based container that packs a MiniApp. Instances of the MiniApp package facilitate the MiniApp distribution and execution in runtime environments or MiniApp user agents.

4.4 Addressing

[MINIAPP-ADDRESSING] is a Note defines a standard MiniApp protocol for accessing MiniApps. It aims to solve the problem that currently, each MiniApp vendor has its own way to describe a MiniApp resource, and uses very different methods to obtain the MiniApp package, which makes it very difficult to access MiniApps across platforms and difficult to reach a unified understanding from both user and developer perspectives.

The document refers to mobile deep linking technology and defines two ways to access MiniApp, one with the HTTPS protocol and the other with a custom protocol. In addition, MiniApp Addressing defines the syntax of MiniApp URIs, including uri-prefix for cross-environment access, uri-infix "miniapp" for MiniApps, and id and version to uniquely identify a MiniApp.

MiniApp Addressing also describes how the user agent obtains the corresponding mini-app package based on MiniApp URI, as well as some error handling, and gives an example procedure for downloading MiniApp packages over the network.

4.5 Widget

MiniApp Widget is a special form of MiniApp Page. Same as a page, a widget runs in a host environment that is called the User Agent. Unlike a page, a widget can occupy a certain area instead of the entire screen. The [MINIAPP-WIDGET-REQ] document describes the initial design considerations for developing a MiniApp Widget, including user agent, packaging, manifest, addressing, lifecyle, UI components, API, and communication between MiniApp and MiniApp Widget etc. The detailed Widget Specification will be described in a separate document, which will describe the detailed technical requirement and capabilities of User Agent. For example, the potential dependencies of Widget running environment, the potential changes of API and UI Components brought by Widget, new features bright by Widget such as requirement of communication between MiniApp and MiniApp Widget. Both User Agent developers and Widget developers can refer to the Widget Specification for technical development.

4.6 Implementation, converting tools

In 2021, the Working Group published two documents, [MINIAPP-MANIFEST] and [MINIAPP-LIFECYCLE]. Meanwhile, various vendors have some pre-standard implementations. To verify the feasibility of the standards, and to be compatible with pre-standard implementations, the working group developed a tool for converting MiniApp standard Manifest to different pre-standard manifest files, such as Baidu's App.json and HarmonyOS FA's config.json. And in a 2021 TPAC breakout session, the working group demonstrated a demo of the tool.

As the standards and pre-deployment progress, the working group plans to refine the tools to support a complete, standardized development approach that may include Packaging, Addressing, Lifecycle, UI components, and APIs.

5. New ideas incubated, the CG work

5.1 UI components

MiniApp components are the building blocks to define the structure, content, and logic of the pages that form a MiniApp. Each component encapsulates functionality, data, and styles, enabling developers to build reusable and customizable items.

The MiniApp UI Components specification collects a set of essential elements that developers can use to build homogeneous but customized user interfaces across MiniApp platforms.

This specification does not reference specific versions of HTML and CSS. It points to the latest W3C recommendations in order to guarantee the adoption and implementation of the changes to the HTML and CSS standards. Both MiniApp user agent vendors and developers will need to keep track of changes to these specifications to ensure that their processes and systems are kept up to date.

This specification defines a set of predefined elements that are common in all the MiniApp specifications, based on Web Components.

5.2 MiniApps for IoT

MiniApp for IoT describes the use cases of MiniApp for IoT. Derived from the use cases, this specification defines the architecture of MiniApp for IoT. How to reuse and extend the MiniApp Packaging and MiniApp Lifecycle is specified. Also, several APIs are specified for MiniApp APIs for IoT.

MiniApp for IoT shares similar architecture of MiniApp running on the cell phone and PC. But since IoT device has different hardware capabilities, MiniApp for IoT has its unique features, including:

6. Security and Privacy Consideration

MiniApp utilizes HTTPs to support secure connection. Multiple MiniApps within same host environment are independent with each other.

User interactions within MiniApp needs different level of user permissions:

Permission User Interactions
default(no extra action needed) Page sharing, clipboard, vibration, compass, motion sensors, map, screen brightness, screen capture, battery status
permission on first-time usage Geolocation, camera(qr code), network status, Bluetooth, NFC
permission on every usage Contacts, file-apis, add to home screen, photo picker, phone call
Validate with token Push
Callback/messaging Password-free Payment
request password Payment

From different perspectives and according to different security levels, the MiniApp framework provides the following methods.

6.1 Capability authentication

For capabilities with high privacy risks, MiniApp requires developers to apply for permission to use such capabilities on the MiniApp Developer Platform. The application includes application reason, a detailed description of the usage scenario, and the demo of usage. Then the platform will review applications according to the MiniApp usage requirements. Only approved MiniApps are allowed to invoke such interfaces. For example, the ability to obtain the user's mobile phone number is one of the capabilities with high security risks.

6.2 User Authorization

For interfaces involving user privacy, the user's authorization must be required. MiniApp classifies these sensible interfaces into several authorization scopes such as location, album, address, camera, calendar, and so on. For example, a window will be popped up like below when the MiniApp tries to invoke the camera capability but users don't authorize it and users would understand that such privacy-related capability is actually being protected. Meanwhile, MiniApps hosted by different super apps might have some different privacy authorization scopes based on the usage characteristics and usage scenarios of each super app.

User Authorization
Figure 16 User Authorization

6.3 MiniApp Audit Review

All MiniApps packages will be reviewed by MiniApp platforms before publishing. Developers must follow MiniApp Platform Operation Terms because the platform is the only way for them to publish a new version MiniApp. There are many aspects of platform auditing such as data collection, data use, data security and geographic location.

6.4 Domain check

For some container components where could render an online web page like <web-view>, MiniApp has limitations to the URL opened by the component. Only the domain configured in the MiniApp Management Center can be accessed in <web-view>. Also, if the component contains an <iframe>, the URL opened by the iframe should also be configured in the MiniApp Management Center. In this way, MiniApp platform can have stronger control over the dynamic pages opened by the MiniApp.

Similarly, the MiniApp framework verifies the legitimacy of asynchronous request address.

For example, for URLs launched by request, download, upload, etc., their domain must belong to the domain configured in the MiniApp Management Center, and their protocols must be HTTPS protocols to ensure the security of data transmission.

7. MiniApp Standardization in the Globe

Though it originated in China, MiniApp is increasing in popularity around the globe. Similar product forms are raised in other parts of the world, including Japan, Korea, Southeast Asia, the US, Europe, and Africa. The standardization of MiniApp technologies has drawn considerable attention from the global Web community. Thus, the collaboration on MiniApp standards becomes a joint international effort.

7.1 Broader Web Community Discussions on MiniApp

The first global Web community discussion on MiniApp standardization was during TPAC 2019 in Fukuoka. A breakout session was organized during which MiniApp vendors introduced MiniApp technologies and the necessity for MiniApp standards. The participants discussed the possible directions for MiniApp standardizing such as packaging, manifest, lifecycle, and widget. Special efforts were made to avoid the overlapping between MiniApp standards and the current Web standards efforts, and enhance the interoperability between MiniApp platforms and the Web, and between different MiniApp platforms. The MiniApps Ecosystem Community Group was launched right after this discussion and the incubation of MiniApp specifications started.

During virtual TPAC 2020, there was a breakout session titled Learning from Mini Apps at the event. In this breakout session, experts discussed the abstract form of a MiniApp and the powerful features that MiniApps can have. Also, the session shared how one could build a MiniApp via various development tools. Then there was an open discussion focused on what Web developers can learn from MiniApp and their developer experience.

7.2 MiniApp in CJK

MiniApp product forms and technologies in Asian markets share lots of similarities. To gather the global community, especially the Chinese, Japanese and Korean participants, to communicate around the MiniApp ecosystem in each area and discuss the future of standardization effort on MiniApps, W3C MiniApps Working Group and MiniApps Ecosystem Community Group organized the 1st CJK Meeting on MiniApps in April 2021. About 90 participants from over 30 organizations joined the discussion and exchanged ideas about MiniApp ecosystems, technical architecture, frameworks and MiniApps in new scenarios such as MiniApp for vehicles. Rough conclusion about the discussion is that as the development of MiniApp standards go on well in the MiniApps Working Group, it’s time to start the horizontal review of security, privacy, accessibility as well as internationalization of MiniApp standards; also, leveraging IoT technologies in MiniApp can be a very promising direction for the for MiniApp in new scenarios and there will be good opportunity for the global MiniApp community to cooperate on the related standardization work.

7.3 MiniApps in Europe

Although there are only a few cases of MiniApps in Europe, this concept is gaining traction; and the community has started to explore these technologies, looking for new business models and innovations out of the traditional app marketplaces.

In 2021, a group of stakeholders, including three W3C Members, launched the Quick App Initiative, an open-source-oriented interest group open to any organization and individual and driven by open collaboration. This group, hosted by OW2, an independent non-profit organization based in France, is ruled under a transparent process intending to promote the W3C works from a vendor-neutral perspective and focused on outreach, implementations, and standardization requirements gathering from the European market perspective.

8. Way Forward in W3C

To meet the use cases and requirements of MiniApps, make the Web standards better support the MiniApp, and explore innovation of user agent and enrich the Web, we hope to set up a group and include the following work in W3C:

In details, the following technical work shall be studied further:

Note: the further gap between current MiniApp APIs and Web APIs will be analyzed in parallel.

9. Glossary

Chinese English Definition
小程序 Mini Program One format of MiniApp running within Native Apps.
快应用 Quick App A MiniApp standard developed by 12 mobile phone manufacturers in Quick App alliances.
渲染环境 rendering view Native view or WebView.
智能助理(负一屏) smart assistant A smart assistant to provide service for convenience, usually at left of the home screen.
热更新 hot reload No need to be re-installed when fixing or updating feature. In MiniApps, since a part of framework is implemented in JavaScript, MiniApp runtime can be hot reloaded.

A. Gap Analysis

Please look at the comparison table of APIs in MiniApps, W3C specs, and PWAs.

B. Acknowledgments

Many thanks to Guanyu Liu (360), He Du (Xiaomi), Hongguang Dong (Xiaomi), Xiaoqian Wu (W3C), Yi Shen (Baidu), Yefeng Xia (China Mobile) who also contributed to this document.

C. References

C.1 Informative references

[APPMANIFEST]
Web Application Manifest. Marcos Caceres; Kenneth Christiansen; Matt Giuca; Aaron Gustafson; Daniel Murphy; Anssi Kostiainen. W3C. 17 February 2022. W3C Working Draft. URL: https://www.w3.org/TR/appmanifest/
[MANIFEST-APP-INFO]
Web App Manifest - Application Information. Aaron Gustafson. W3C. 30 September 2021. W3C Working Group Note. URL: https://www.w3.org/TR/manifest-app-info/
[MINIAPP-ADDRESSING]
MiniApp Addressing. Dan Zhou; Qian Liu; shuo wang; Tengyuan Zhang. W3C. 11 March 2022. W3C Working Group Note. URL: https://www.w3.org/TR/miniapp-addressing/
[MINIAPP-LIFECYCLE]
MiniApp Lifecycle. Qing An; Haoyang Xu. W3C. 24 March 2022. W3C Working Draft. URL: https://www.w3.org/TR/miniapp-lifecycle/
[MINIAPP-MANIFEST]
MiniApp Manifest. Martin Alvarez-Espinar; Yongjing ZHANG. W3C. 24 March 2022. W3C Working Draft. URL: https://www.w3.org/TR/miniapp-manifest/
[MINIAPP-PACKAGING]
MiniApp Packaging. Martin Alvarez-Espinar; Qing An; Tengyuan Zhang; Yongjing ZHANG; Dan Zhou. W3C. 24 March 2022. W3C Working Draft. URL: https://www.w3.org/TR/miniapp-packaging/
[MINIAPP-WIDGET-REQ]
MiniApp Widget Requirements. Chen Yinli; Canfeng Chen; Bingqing Zhou; Bin Guo. W3C. 8 March 2022. W3C Working Group Note. URL: https://www.w3.org/TR/miniapp-widget-req/