Use a manifest file to configure your app

Learn how to use an app manifest to define your app and manage its features

The app manifest is a manifest.json file that declaratively defines your app’s configuration, including app metadata, OAuth settings, feature definitions, and build references.

You can export a manifest to reuse configuration across versions or environments, and import a manifest to quickly create or update an app. The manifest defines configuration only; it does not deploy code or create deployments.

Use cases

The manifest simplifies app management. You can use it to:

  • Maintain consistent app setup across accounts or environments
  • Compare the configuration between versions and roll back changes
  • Integrate version-controlled manifests into CI/CD pipelines for promotion and testing
  • Track configuration changes over time (what changed and when)

Concepts

Manifest schema

The manifest schema defines the required fields for a valid manifest. Each manifest includes a top-level version field that declares the schema version it uses.

Variable placeholders

You can inject environment variable values into the manifest by using double curly braces {{...}}. During import/export, placeholders are replaced with the matching environment variable value.

Supported in CLI @mondaycom/[email protected] and later.

{
  "app": {
     "name": "{{MY_APP_NAME}}",
     "description": "This app automates tasks. Last updated: {{LAST_UPDATED_DATE}}", 
     "slug": "{{ACCOUNT_SLUG}}_{{APP_SLUG}}"
  }
}

Limitations

  • Unsupported features: Workspace templates and Integration for Sentence Builder are not included in exports, and importing a manifest will not affect them.
  • Feature identifiers: A feature must have a unique key (ID or feature slug) to be exported.

Implementation

Prerequisites

Install the CLI (minimum v4.8.0)

npm i @mondaycom/[email protected]
mapps init -t <YOUR_API_TOKEN>

Export a manifest

Exports the manifest of a specific app into the current directory:

  • mapps manifest:export

Import a manifest

  • Create a new app from a manifest:
    • mapps manifest:import --newApp
  • See all import options:
    • mapps manifest:import

Import using GitHub actions

Use the GitHub action to automatically create a new app version from a manifest file.

Build types and deployments

Each feature uses a build.kind value that determines how the feature is implemented and deployed. The manifest itself doesn't create deployments; it only references preexisting code.

build.kindHosted whereWhat the manifest definesMapping required
monday-codemonday codeURL path to the deployed bundleNo
urlExternal hostingFull public HTTPS URLNo
viewClient-side deploymentOptional subroute onlyYes (during import)

build.kind: "monday-code"

Used for monday code deployments. It loads the feature from a monday code bundle deployed in the Developer Center.

  1. Deploy using the CLI.
  2. After deployment finishes, configure the feature:
"build": {
  "kind": "monday-code",
  "url": "/path/to/app"
}

No mapping is required since the manifest directly references the deployed monday code path.

build.kind: "url"

Used for externally hosted applications. It loads a feature from a public HTTPS URL.

"build": {
  "kind": "url",
  "url": "https://yourapp.com/"
}

No mapping is required as the feature loads directly from the specified URL.

build.kind: "view"

Used for client-side deployments created in the Developer Center.

  • The manifest does not include a deployment ID or base URL. It only declares that the feature uses a view.
  • During import, you map each view feature to an existing client-side deployment.
  • This mapping is stored in the app configuration, not in the manifest.

You can optionally define a subroute so the feature loads from a specific path within your deployment.

"build": {
  "url": "/login",
  "kind": "view"
}

If your deployment base URL is https://example-view-deployment.example.com, the full feature URL becomes https://example-view-deployment.example.com/login.

This allows you to route multiple features within the same view deployment and update those routes directly in the manifest file, as long as the deployed bundle supports the corresponding client-side path.

Reference

Example manifest

// Example manifest showing multiple feature types and build kinds

{
  "version": "1.0.0",
  "app": {
    "name": "Manifest Tester App",
    "description": "Import and export app features using the app manifest",
    "slug": "test_manifesttester",
    "color": "#1E7579",
    "oauth": {
      "redirectUri": [
        "https://myserver.com/oauth/callback2",
        "https://myserver.com/oauth/callback"
      ],
      "scopes": [
        "me:read",
        "boards:read"
      ]
    },
    "features": [
      {
        "key": "admin-view",
        "type": "AppFeatureAccountSettingsView",
        "name": "Administration view",
        "build": {
          "kind": "view"
        },
        "data": {
          "name": "Administration view",
          "mode": "iframe",
          "description": "Admin configuration that uses the Audit Log API to display recent security or activity events, helping admins track changes and investigate issues"
        }
      },
      {
        "key": "widget",
        "type": "AppFeatureDashboardWidget",
        "name": "Dashboard Widget - Quickstart React",
        "build": {
          "url": "https://abcdef123456.apps-tunnel.monday.app/",
          "kind": "url"
        },
        "data": {
          "boards": "with",
          "header": "without",
          "name": "Dashboard Widget - Quickstart React",
          "description": "A Quickstart web application build using ReactJS"
        }
      },
      {
        "key": "item-view",
        "type": "AppFeatureItemView",
        "name": "Item View - Quickstart React",
        "build": {
          "url": "https://abcdef123456.apps-tunnel.monday.app/",
          "kind": "url"
        },
        "data": {
          "name": "Item View - Quickstart React",
          "mode": "iframe",
          "query_params": true,
          "description": "A Quickstart web application build using ReactJS"
        }
      },
      {
        "key": "object",
        "type": "AppFeatureObject",
        "name": "Object feature - React",
        "build": {
          "url": "https://abcdef123456.apps-tunnel.monday.app/",
          "kind": "url"
        },
        "data": {
          "mode": "iframe",
          "query_params": true,
          "name": "Object feature - React",
          "uploading": false,
          "learnMoreLink": "https://abcdef123456.apps-tunnel.monday.app/learn-more"
        }
      },
      {
        "key": "doc-action",
        "type": "AppFeatureDocActions",
        "name": "Doc Actions - Quickstart App",
        "build": {
          "url": "https://abcdef123456.apps-tunnel.monday.app/",
          "kind": "url"
        },
        "data": {
          "mode": "iframe",
          "query_params": true,
          "modalSize": "medium",
          "supportedLocations": [
            "contextualToolbar",
            "addBlockMenu"
          ],
          "name": "Doc Actions - Quickstart App",
          "description": "A simple app to show how Doc Actions work",
          "uploading": false
        }
      },
      {
        "key": "board-view",
        "type": "AppFeatureBoardView",
        "name": "Board View feature",
        "build": {
          "url": "https://abcdef123456.apps-tunnel.monday.app/",
          "kind": "url"
        },
        "data": {
          "mode": "iframe",
          "query_params": true,
          "name": "Board View feature",
          "uploading": false,
          "feedbackLink": "https://yourapp.com/feedback",
          "description": "Shows a board view inside monday"
        }
      }
    ]
  }
}

Manifest schema

File

Top-level attributes are required in every manifest file.

FieldDescriptionRequired
versionA string representing the schema version used by this manifestYes
appAn object containing the app’s metadata, OAuth configuration, and feature definitionsYes

app

These attributes define the configuration and features of your app.

FieldDescriptionRequired
app.nameA string of the name of your appNo
app.descriptionA string of the description of your appNo
app.colorA string of the hex code of the color of your app iconNo
app.oauthThe OAuth configuration of your appNo
app.oauth.scopesA list of OAuth scope stringsNo
app.oauth.redirectUriA list of redirect URI stringsNo
app.featuresA list of app feature configuration objects that define the app’s capabilitiesYes
app.slugA unique identifier for your appYes

app.features

A list of app feature configuration objects. The structure of each feature’s data object depends on the feature type.

Field

Description

Required

key

A unique string identifier for the feature within the app. Used to track features across imports and exports.

Yes

type

A string identifying the feature type (for example, AppFeatureBoardView), which determines the required structure of the data object

Yes

name

A name for the feature, displayed in the monday UI.

No

build

An object defining how the feature references an existing deployment or hosted implementation

Yes

build.kind

A string describing how this feature is implemented and loaded. Supported values:

  • monday-code: Loaded from a monday code deployment
  • url: Loaded from an external URL
  • view: Uses a client-side deployment that already exists for this app. The manifest does not include a URL or deployment reference; instead, you select the deployment in the Developer Center during the import flow.

Note: You must first deploy your code before mapping the feature to the deployment using build.kind: "view". The deployment mapping is stored in the app configuration, not in the manifest file.

Yes

build.url

A string representing the URL or path used to load the feature.

  • If the app is served from a custom URL, it should be the full URL.
  • If the app is served from monday code, it should be the URL path only.

This field is optional for build.kind: "view" and may be used only to define a subroute.

No

data

An object containing feature-specific configuration. The required fields and structure depend on the feature type.

Yes