---
title: Overflow menu
description: A kebab (⋮) menu that opens a short list of actions or links.
---

`overflow` renders as a "⋮" button that opens a dropdown of up to 5 options. Reach for it when an
`actions` row or section accessory has more actions than fit as buttons.

<Preview
  payload={{
    blocks: [
      {
        type: "section",
        text: { type: "mrkdwn", text: "This is a section block with an overflow menu." },
        accessory: {
          type: "overflow",
          action_id: "overflow-action",
          options: [
            { text: { type: "plain_text", text: "Edit", emoji: true }, value: "value-0" },
            { text: { type: "plain_text", text: "Duplicate", emoji: true }, value: "value-1" },
            {
              text: { type: "plain_text", text: "Open docs", emoji: true },
              value: "value-2",
              url: "https://api.slack.com",
            },
            { text: { type: "plain_text", text: "Archive", emoji: true }, value: "value-3" },
            { text: { type: "plain_text", text: "Delete", emoji: true }, value: "value-4" },
          ],
        },
      },
    ],
  }}
  actions
/>

## Fields

| Prop | Type | Default | Description |
| - | - | - | - |
| `type` | `string` | - | Always `overflow`. |
| `options` | `PlainTextOption[]` | - | The menu's items, in order. Slack allows up to 5. |
| `action_id?` | `string` | - | Identifies this action in the interaction payload. Must be unique within the block. Maximum length is 255 characters. |
| `confirm?` | `ConfirmationDialog` | - | Shows a confirmation dialog before the selection is dispatched. See Confirmation dialogs. |

Each option is a [plain-text option](/elements/select-menus) object:

| Prop | Type | Default | Description |
| - | - | - | - |
| `text` | `PlainTextElement` | - | The option's label. Maximum length is 75 characters. |
| `value?` | `string` | - | Sent back in the interaction payload when this option is picked. Maximum length is 75 characters. |
| `url?` | `string` | - | Only valid on overflow options. Opens in a new tab when the option is clicked, in addition to dispatching the action. Maximum length is 3000 characters. |

## Examples

### In an actions block

<Preview
  payload={{
    blocks: [
      {
        type: "actions",
        block_id: "more",
        elements: [
          {
            type: "overflow",
            action_id: "more_menu",
            options: [
              { text: { type: "plain_text", text: "Edit" }, value: "edit" },
              {
                text: { type: "plain_text", text: "Open docs" },
                value: "docs",
                url: "https://api.slack.com",
              },
            ],
          },
        ],
      },
    ],
  }}
  actions
/>

### With a confirmation dialog

<Preview
  payload={{
    blocks: [
      {
        type: "section",
        text: { type: "mrkdwn", text: "Row actions" },
        accessory: {
          type: "overflow",
          action_id: "row_menu",
          options: [
            { text: { type: "plain_text", text: "Edit" }, value: "edit" },
            { text: { type: "plain_text", text: "Delete" }, value: "delete" },
          ],
          confirm: {
            title: { type: "plain_text", text: "Are you sure?" },
            text: { type: "mrkdwn", text: "This applies to the row immediately." },
            confirm: { type: "plain_text", text: "Continue" },
            deny: { type: "plain_text", text: "Cancel" },
          },
        },
      },
    ],
  }}
  actions
/>

## Interactivity

Picking an item (after any confirm dialog is accepted) closes the menu, calls `onAction` with the
chosen option under `selected_option`, and opens the option's `url` in a new tab if it has one:

```json
{
  "type": "overflow",
  "action_id": "overflow-action",
  "block_id": "b1",
  "action_ts": "1706000000.000100",
  "selected_option": {
    "text": { "type": "plain_text", "text": "Open docs", "emoji": true },
    "value": "value-2",
    "url": "https://api.slack.com"
  }
}
```

The menu also supports arrow keys, Home/End, and Enter for keyboard navigation, and closes on
Escape or an outside click. Like a button, overflow doesn't write to `state.values`: it's a
one-shot action, not a persisted value.

## Related

**[Button](/elements/button)**

A single, always-visible action instead of a menu.

**[Select menus](/elements/select-menus)**

Static, external, users, conversations and channels selects.

**[Confirmation dialogs](/elements/confirmation-dialogs)**

Add a confirm step to any element with the `confirm` object.

**[Elements overview](/elements/index)**

Where each element can live, and how `action_id` and `block_id` fit together.
