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 blocksAccessory
Accessory
A horizontal divider line. No fields to edit.
Elements (1/10)
Buttons (2/25)
Validation
Payload looks good. No issues found.
Preview
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.
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/XXXXXXXXXXXXXXXXXXXXXXXXchat.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
- 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.
- 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.
- 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.
- Watch the validation card. Errors block a working payload; warnings flag empty blocks Slack will silently drop or missing fallback text.
- 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
Discord Embed Builder
Visual editor for Discord embeds with live preview and webhook JSON.
Open tool
ConverterMarkdown to Slack Converter
Two-way converter between Markdown and Slack's mrkdwn message format.
Open tool
Date & TimeSlack Timestamp Formatter
Build Slack <!date^TS^TOKEN|FALLBACK> placeholders with live, zone-aware previews.
Open tool
DeveloperWebhook Signature Generator
Sign webhook payloads with HMAC and copy provider-shaped headers plus a curl command.
Open tool
DeveloperJSON Formatter
Format, minify, and validate JSON in your browser.
Open tool
DeveloperJSON Validator
Strict JSON validation with line and column errors and human-readable hints.
Open tool