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
- Access to the monday apps CLI
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.kind | Hosted where | What the manifest defines | Mapping required |
|---|---|---|---|
monday-code | monday code | URL path to the deployed bundle | No |
url | External hosting | Full public HTTPS URL | No |
view | Client-side deployment | Optional subroute only | Yes (during import) |
build.kind: "monday-code"
build.kind: "monday-code"Used for monday code deployments. It loads the feature from a monday code bundle deployed in the Developer Center.
- Deploy using the CLI.
- 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"
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"
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.
| Field | Description | Required |
|---|---|---|
version | A string representing the schema version used by this manifest | Yes |
app | An object containing the app’s metadata, OAuth configuration, and feature definitions | Yes |
app
appThese attributes define the configuration and features of your app.
| Field | Description | Required |
|---|---|---|
app.name | A string of the name of your app | No |
app.description | A string of the description of your app | No |
app.color | A string of the hex code of the color of your app icon | No |
app.oauth | The OAuth configuration of your app | No |
app.oauth.scopes | A list of OAuth scope strings | No |
app.oauth.redirectUri | A list of redirect URI strings | No |
app.features | A list of app feature configuration objects that define the app’s capabilities | Yes |
app.slug | A unique identifier for your app | Yes |
app.features
app.featuresA list of app feature configuration objects. The structure of each feature’s data object depends on the feature type.
Field | Description | Required |
|---|---|---|
| A unique string identifier for the feature within the app. Used to track features across imports and exports. | Yes |
| A string identifying the feature type (for example, AppFeatureBoardView), which determines the required structure of the data object | Yes |
| A name for the feature, displayed in the monday UI. | No |
| An object defining how the feature references an existing deployment or hosted implementation | Yes |
| A string describing how this feature is implemented and loaded. Supported values:
Note: You must first deploy your code before mapping the feature to the deployment using | Yes |
| A string representing the URL or path used to load the feature.
This field is optional for | No |
| An object containing feature-specific configuration. The required fields and structure depend on the feature type. | Yes |
Updated 22 days ago
