Module Manifest

The module manifest – dapplet.json – is a JSON that is placed in the root of the module and contains all the required information that is needed to deploy the module and add it to the dapplet registry. It is a necessary part of every module.

Here is an example of the module's manifest:

1{
2 "name": {
3 "$ref": "package.json#/name"
4 },
5 "branch": "default",
6 "version": {
7 "$ref": "package.json#/version"
8 },
9 "type": "FEATURE",
10 "title": "Dapplet Template Publishing",
11 "description": {
12 "$ref": "package.json#/description"
13 },
14 "main": {
15 "$ref": "package.json#/main"
16 },
17 "icon": "src/icons/example.png",
18 "contextIds": ["twitter-config.dapplet-base.eth"],
19 "config": {
20 "schema": "config/schema.json",
21 "default": "config/default.json"
22 },
23 "overlays": {},
24 "dependencies": {
25 "twitter-config.dapplet-base.eth": "0.1.5"
26 }
27}

Manifest Structure#

Some fields refer to package.json. They have "$ref" children with the field link values. "$ref" is a part of JSON Reference specification. More details:

All these fields are obligatory. Set them in package.json:

  • name – the name of the module. The name is the ID of your module so it must be unique.
  • version – a version of the module. Refer to SemVer format: https://semver.org/
  • description – a brief description of your module. It's displayed in the dapplets list inside the extension's overlay and in the Dapplets Store.
  • main – sets the entry point for the dapp.

Other parameters are specified in dapplet.json:

  • type – indicates the type of module. There are three types:

    • FEATURE – a dapplet, the main part that interacts with the adapter and the Core API
    • CONFIG – a site-specific adapter that allows dapplets to work with site specific contexts
    • INTERFACE – a virtual adapter which provides an interface for dapplets so they are able to use several site-specific adapters
  • title – a module's name. It's displayed in the extension's dapplets list, in the Dapplets Store, on the NFT, etc.

  • icon – a link to the dapplet's icon. It's an optional parameter.

  • contextIds – a list of resources where the module is loaded and activated. You should list site domains or a name of the module (adapter, interface), where domains are already listed.

    For example, you can specify certain domains in the adapter's manifest:

    1// ./adapter/dapplet.json
    2{
    3 "contextIds": ["twitter.com", "www.twitter.com", "mobile.twitter.com"]
    4}

    and specify this adapter in the dapplet's manifest:

    1// ./dapplet/dapplet.json
    2{
    3 "contextIds": ["twitter-config.dapplet-base.eth"]
    4}

    So this dapplet will be loaded and activated with the same resources as the adapter.

    There is an opportunity to specify the dynamic context. It means that this context can appear on the page at any time and the module will start working. It may be a tweet or another type of post:

    {
    "contextIds": ["twitter.com/1551967807428071431"]
    }

    The last way to specify ContextIDs is setting the contexts determined by content detectors. Currently they are specified in the Dapplets extension and only one is available – "video" context:

    {
    "contextIds": ["video"]
    }

    This means that the module works if there are <video> elements on the page. This is also dynamic context.

    note

    Video contextId is currently not working, but it is planned to return in the near future. Follow our news and updates.

  • config – a dapplet's config. It's an optional field that's used only in dapplets. The idea is to add some settings to the dapplet which can be changed in the extension. For more information look here.

  • overlays – a list of the overlays that use the dapplet. If your dapplet uses the overlay you have to add its name/ID and the development server here:

    1{
    2 "overlays": {
    3 "example-04-overlay": "http://localhost:3000"
    4 }
    5}

    An assets-manifest.json should be available at the root of overlay's URL. Example:

    1{
    2 "index.html": "index.html",
    3 "main.js": "main.js"
    4}

Check out how to make a dapplet with an overlay here: Overlays

  • dependencies – adapters which are used in the module. Currently you can set dependencies only for FEATURE modules (dapplets). Set site-specific and virtual adapters which you want to interact with.

  • interfaces – a list of interfaces (virtual adapters) that the adapter implements. It is an optional parameter for site-specific adapters. If some dapplet use a virtual adapter from this list the site-specific adapter runs in supported contexts.

    1{
    2 "interfaces": {
    3 "social-virtual-config.dapplet-base.eth": "0.1.0"
    4 }
    5}

Manifest Update#

The changes in dapplet.json will not be considered in the dapplet registry when you will deploy new module versions. To change some information open the Dapplets extension, connect the wallet of the owner or admin of the module, and go to the Settengs -> Developer. You will see the Registry chapter with your published module. Open its settings.

developers tab

Here you can change: title, description, icon, ownership, admins, context IDs.

module settings