Column Features

Learn how to create custom columns in your app

Column features let you add custom functionality to board columns. Basic implementations create status or dropdown columns with custom value pickers. Advanced implementations add custom column settings or hover interactions.

Concepts

Column features create custom interactions for status or dropdown columns. When users click or hover over a cell, your app renders custom UI inside a dialog.

Column features have two key components:

  • Base columns: The underlying data structure (currently only status or dropdown column types)
  • Column actions: Interactive dialogs triggered by user actions (click, hover, settings)

Supported Column Actions

Each column action triggers a dialog that renders your app. You can create the following actions:

Action NameTrigger
On Click DialogWhen a user clicks the column cell
On Hover DialogWhen a user hovers over the column cell
Column Settings DialogWhen a user selects Settings in the column info menu (replaces the native column settings)
Additional Settings DialogWhen a user selects Settings in the column info menu (displayed alongside native monday.com settings

Pre-requisites

Before creating a column feature, ensure you have:

  • A monday.com developer account with app creation permissions (recommended)
  • Basic familiarity with the monday.com API
  • A deployment environment configured (for dialog functionality)

Implementation

Step 1: Create a Column Feature

  1. Create a new feature.
  2. Search for Column and select either the Status column or the Dropdown column feature.
  3. Choose Column as the feature type.

Step 2: Configure the Feature

After creating a new Dropdown or Status column feature, you can configure the app's:

  • Basic Information: The app's name
  • Design: Icon details
  • On-Click Dialog: Configure what appears when the column is clicked
  • On-Hover Dialog: Configure what appears when someone hovers above the column
  • Column Settings Dialog: Configure what appears when the column's settings are selected
  • Additional Settings Dialog: Configure what appears when additional settings are selected
  • Views Center Information: Write a description and add links that will appear in the Views Center

Step 3: Add a New Dialog

To add dialogs during configuration:

  1. Select the relevant dialog type to add (e.g., On-Click Dialog, Additional Settings Dialog). This will open a new popup.
  2. In the pop-up, click Create New in the bottom-left corner. This opens a new tab for dialog configuration.
  3. In the new tab, you can configure the dialog's:
  • Basic Settings: Name
  • Deployment: Connect a deployment to populate the dialog
  • Design: Customize the dialog's appearance
  1. Once configured, click Save changes.
  2. Return to the original tab and connect the dialog to the relevant action.

Reference

API Reference

Column features store data in native monday.com columns using the platform API. Review these key API objects:

Example: Update a Status Column

import mondaySDK from "monday-sdk-js";

const monday = mondaySDK();

const mutation = `
  mutation($itemId: ID!, $boardId: ID!, $columnId: String!, $value: String!) {
    change_simple_column_value(
      item_id: $itemId
      board_id: $boardId
      column_id: $columnId
      value: $value
    ) {
      id
    }
  }
`;

const variables = {
  itemId: 9876543210,
  boardId: 1234567890,
  columnId: "status",
  value: "8"
};

const response = await monday.api(mutation, { variables });

App Context

Your app feature will receive info about the connected column and board via the app context. Each context object contains useful details about the column's value, associated board, and user. Here are sample context objects for each feature:

{
  "themeConfig": null,
  "theme": "light",
  "account": {
    "id": "5"
  },
  "user": {
    "id": "4300888",
    "isAdmin": false,
    "isGuest": false,
    "isViewOnly": false,
    "countryCode": "US",
    "currentLanguage": "en",
    "timeFormat": "12H",
    "timeZoneOffset": -5
  },
  "region": "use1",
  "productKind": "core",
  "app": {
    "id": 10180998,
    "clientId": "a667d68ebbceb739ca015146e85aee94"
  },
  "appVersion": {
    "id": 10303119,
    "name": "Column Apps - Dipro",
    "status": "draft",
    "type": "major",
    "versionData": {
      "major": 1,
      "minor": 0,
      "patch": 0,
      "number": 1,
      "type": "major",
      "displayNumber": "v1"
    }
  },
  "appFeature": {
    "type": "AppFeatureDialog",
    "name": "Project priority column - dialog - v1"
  },
  "permissions": {
    "approvedScopes": [
      "boards:read",
      "me:read",
      "docs:read",
      "boards:write",
      "docs:write"
    ],
    "requiredScopes": [
      "boards:read",
      "me:read",
      "docs:read",
      "boards:write",
      "docs:write"
    ]
  },
  "boardId": 108246798,
  "columnId": "project_priority_mkmm73xw",
  "appFeatureId": 11205588,
  "itemId": 256180125,
  "selectedItemIds": [
    256180125
  ],
  "columnType": "color",
  "event": "click",
  "placement": "columnPickers"
}
{
  "themeConfig": null,
  "theme": "light",
  "account": {
    "id": "5"
  },
  "user": {
    "id": "4300888",
    "isAdmin": false,
    "isGuest": false,
    "isViewOnly": false,
    "countryCode": "US",
    "currentLanguage": "en",
    "timeFormat": "12H",
    "timeZoneOffset": -5
  },
  "region": "use1",
  "productKind": "core",
  "app": {
    "id": 10180998,
    "clientId": "a667d68ebbceb739ca015146e85aee94"
  },
  "appVersion": {
    "id": 10303119,
    "name": "Column Apps - Dipro",
    "status": "draft",
    "type": "major",
    "versionData": {
      "major": 1,
      "minor": 0,
      "patch": 0,
      "number": 1,
      "type": "major",
      "displayNumber": "v1"
    }
  },
  "appFeature": {
    "type": "AppFeatureDialog",
    "name": "Project priority column - dialog - v1"
  },
  "permissions": {
    "approvedScopes": [
      "boards:read",
      "me:read",
      "docs:read",
      "boards:write",
      "docs:write"
    ],
    "requiredScopes": [
      "boards:read",
      "me:read",
      "docs:read",
      "boards:write",
      "docs:write"
    ]
  },
  "boardId": 108246798,
  "columnId": "project_priority_mkmm73xw",
  "appFeatureId": 11205572,
  "columnType": "color",
  "placement": "settings"
}
{
  "themeConfig": null,
  "theme": "light",
  "account": {
    "id": "5"
  },
  "user": {
    "id": "4300888",
    "isAdmin": false,
    "isGuest": false,
    "isViewOnly": false,
    "countryCode": "US",
    "currentLanguage": "en",
    "timeFormat": "12H",
    "timeZoneOffset": -5
  },
  "region": "use1",
  "productKind": "core",
  "app": {
    "id": 10180998,
    "clientId": "a667d68ebbceb739ca015146e85aee94"
  },
  "appVersion": {
    "id": 10303119,
    "name": "Column Apps - Dipro",
    "status": "draft",
    "type": "major",
    "versionData": {
      "major": 1,
      "minor": 0,
      "patch": 0,
      "number": 1,
      "type": "major",
      "displayNumber": "v1"
    }
  },
  "appFeature": {
    "type": "AppFeatureDialog",
    "name": "Project priority column - dialog - v1"
  },
  "permissions": {
    "approvedScopes": [
      "boards:read",
      "me:read",
      "docs:read",
      "boards:write",
      "docs:write"
    ],
    "requiredScopes": [
      "boards:read",
      "me:read",
      "docs:read",
      "boards:write",
      "docs:write"
    ]
  },
  "boardId": 108246798,
  "columnId": "project_priority_mkmm73xw",
  "appFeatureId": 11205572,
  "columnType": "color",
  "placement": "settings"
}