Zero Signup ToolsFree browser tools

Developer Tools

Slack Block Kit Builder

Build Slack Block Kit messages with a live preview, copy the JSON payload, and get curl examples for incoming webhooks and chat.postMessage.

Message

Add block

6/50 blocks
Block 1Header
19/150
Block 2Section
168/3000

Accessory

Block 3Section
110/3000

Accessory

9/75
Block 4Divider

A horizontal divider line. No fields to edit.

Block 5Context

Elements (1/10)

Element 1 (mrkdwn)
Block 6Actions

Buttons (2/25)

Button 112/75
Button 29/75

Validation

0 errors0 warnings

Payload looks good. No issues found.

Preview

Zero Signup ToolsAppJust now

New release shipped

Slack Block Kit Builder is live. Build bold, italic, strikethrough, code, > quotes, lists, and masked links with a live preview.

Pick a block, edit the fields, and copy the JSON payload. Works with incoming webhooks and chat.postMessage.

Open tool

Posted by @here in #releases
View releaseOpen repo

JSON payload

{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "New release shipped",
        "emoji": true
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Slack Block Kit Builder* is live. Build *bold*, _italic_, ~strikethrough~, `code`, > quotes, lists, and <https://zerosignuptools.com|masked links> with a live preview."
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "Pick a block, edit the fields, and copy the JSON payload. Works with incoming webhooks and `chat.postMessage`."
      },
      "accessory": {
        "type": "button",
        "text": {
          "type": "plain_text",
          "text": "Open tool",
          "emoji": true
        },
        "action_id": "button_1",
        "url": "https://zerosignuptools.com/tools/slack-block-kit-builder",
        "style": "primary"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Posted by <!here> in <#C0123456|releases>"
        }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "View release",
            "emoji": true
          },
          "action_id": "button_2",
          "url": "https://zerosignuptools.com",
          "style": "primary"
        },
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "Open repo",
            "emoji": true
          },
          "action_id": "button_3",
          "url": "https://zerosignuptools.com"
        }
      ]
    }
  ],
  "text": "New release shipped",
  "username": "Zero Signup Tools",
  "icon_emoji": ":rocket:"
}

Incoming webhook curl

Replace the URL with your Slack incoming webhook. Slack does not read the channel, username, or icon_emoji set above when posting to a webhook unless the workspace allows overrides.

curl -X POST -H 'Content-Type: application/json' \
  --data '{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "New release shipped",
        "emoji": true
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Slack Block Kit Builder* is live. Build *bold*, _italic_, ~strikethrough~, `code`, > quotes, lists, and <https://zerosignuptools.com|masked links> with a live preview."
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "Pick a block, edit the fields, and copy the JSON payload. Works with incoming webhooks and `chat.postMessage`."
      },
      "accessory": {
        "type": "button",
        "text": {
          "type": "plain_text",
          "text": "Open tool",
          "emoji": true
        },
        "action_id": "button_1",
        "url": "https://zerosignuptools.com/tools/slack-block-kit-builder",
        "style": "primary"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Posted by <!here> in <#C0123456|releases>"
        }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "View release",
            "emoji": true
          },
          "action_id": "button_2",
          "url": "https://zerosignuptools.com",
          "style": "primary"
        },
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "Open repo",
            "emoji": true
          },
          "action_id": "button_3",
          "url": "https://zerosignuptools.com"
        }
      ]
    }
  ],
  "text": "New release shipped",
  "username": "Zero Signup Tools",
  "icon_emoji": ":rocket:"
}' \
  https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

chat.postMessage curl

Replace the bot token and channel ID for the Slack Web API. The channel field above is included automatically if you set it.

curl -X POST https://slack.com/api/chat.postMessage \
  -H 'Authorization: Bearer xoxb-your-bot-token' \
  -H 'Content-Type: application/json; charset=utf-8' \
  --data '{
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "New release shipped",
        "emoji": true
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Slack Block Kit Builder* is live. Build *bold*, _italic_, ~strikethrough~, `code`, > quotes, lists, and <https://zerosignuptools.com|masked links> with a live preview."
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "Pick a block, edit the fields, and copy the JSON payload. Works with incoming webhooks and `chat.postMessage`."
      },
      "accessory": {
        "type": "button",
        "text": {
          "type": "plain_text",
          "text": "Open tool",
          "emoji": true
        },
        "action_id": "button_1",
        "url": "https://zerosignuptools.com/tools/slack-block-kit-builder",
        "style": "primary"
      }
    },
    {
      "type": "divider"
    },
    {
      "type": "context",
      "elements": [
        {
          "type": "mrkdwn",
          "text": "Posted by <!here> in <#C0123456|releases>"
        }
      ]
    },
    {
      "type": "actions",
      "elements": [
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "View release",
            "emoji": true
          },
          "action_id": "button_2",
          "url": "https://zerosignuptools.com",
          "style": "primary"
        },
        {
          "type": "button",
          "text": {
            "type": "plain_text",
            "text": "Open repo",
            "emoji": true
          },
          "action_id": "button_3",
          "url": "https://zerosignuptools.com"
        }
      ]
    }
  ],
  "text": "New release shipped",
  "username": "Zero Signup Tools",
  "icon_emoji": ":rocket:",
  "channel": "C0123456789"
}'

How to use

  1. Set the message-level fields at the top: a fallback text for notifications, an optional channel for chat.postMessage, an optional username override, and an optional icon_emoji like :rocket:. Webhooks ignore channel; the Web API requires it.
  2. Click the block buttons (Section, Header, Divider, Image, Context, Actions) to add the blocks you need. Reorder with Up and Down, and use Remove to drop a block.
  3. Edit each block's fields. Section blocks accept Slack mrkdwn or plain_text and an optional button or image accessory. Header blocks accept up to 150 plain-text characters. Image blocks need an http/https URL and alt text. Context blocks mix small inline text and mini images. Actions blocks hold a row of buttons with optional URLs and a default, primary, or danger style.
  4. Watch the validation card. Errors block a working payload; warnings flag empty blocks Slack will silently drop or missing fallback text.
  5. Copy the JSON payload, the incoming webhook curl example, or the chat.postMessage curl example. Replace the placeholder webhook URL or Bearer token and POST the payload to Slack.

About this tool

Slack Block Kit Builder is a visual editor for the JSON payload that Slack accepts in incoming webhooks, chat.postMessage, and app surfaces. Block Kit is Slack's layout system: a message is an array of typed blocks (section, header, divider, image, context, actions) each with its own schema and limits. Hand-writing this JSON is fiddly because Slack rejects payloads that violate per-field character caps, mixes plain_text and mrkdwn rules differently between blocks, and silently strips empty blocks. This builder exposes every block type with form fields, enforces Slack's published limits (up to 50 blocks per message, 150 characters for header text, 3000 for section text, 75 for button text, 10 context elements, 25 action buttons), and shows a live status pill on every length-bounded field so you see green, amber, or rose without guessing. A faithful Slack-style preview renders next to the JSON so you can see how the message will actually look in a Slack client before you POST it; the preview handles Slack mrkdwn the way Slack does, not as CommonMark, so single asterisks are bold, single underscores are italic, single tildes are strikethrough, backticks are inline code, triple backticks are code blocks, and the special tokens <url|label>, <@U123|name>, <#C123|name>, <!here>, <!channel>, and <!everyone> render the way they would in a real channel. The output panel produces three copy-ready artifacts: the formatted JSON payload (with blocks, optional fallback text, optional channel, optional username, and optional icon_emoji), a curl invocation for an incoming webhook URL, and a curl invocation for the Slack Web API chat.postMessage endpoint with the Bearer token slot already in place. Validation runs on every edit and lists every problem inline (over-limit fields, missing URLs, non-http schemes, empty blocks that Slack will drop, missing fallback text on a no-block message), so the builder catches what Slack would reject before you ever fire a request. Everything happens in your browser: webhook URLs, bot tokens, channel IDs, and message content never leave the page. Useful for SREs writing alert payloads for incident channels, growth teams building drip templates for onboarding webhooks, app developers prototyping Block Kit surfaces against the Slack API, and anyone who wants a no-signup way to compose a Slack message and grab its JSON.

Free to use. Works in your browser. No signup, no login.

Related tools

You may also like

All tools
All toolsDeveloper Tools