I tried the new blocks of Slack Block Kit [Data Edition]

I tried the new blocks of Slack Block Kit [Data Edition]

This is an introductory article about new blocks added to Slack Block Kit. It explains the features and implementation examples of the data table block, which allows you to create tables with sorting and pagination support, and the data visualization block, which can render charts using JSON alone.
2026.08.30

This page has been translated by machine translation. View original

Since 2026, new blocks have been added one after another to Slack's Block Kit. In this series, we will introduce these new blocks while actually trying them out.

  • Part 1: Data Edition (this article)
  • Part 2: Display Edition
  • Part 3: Agent Edition
  • Part 4: Streaming Edition
  • Part 5: Validation & CI Edition

For this first installment, we will use the data table block and data visualization block to convert aggregated results into tables and charts and post them to a channel.

For the basics of Block Kit, please refer to the following article.

https://dev.classmethod.jp/articles/slack-building-block-kit/

Overview of the Two Blocks

The data table block is a table block added on May 20, 2026, that supports pagination, sorting, and filtering[1].

Until now, to display a table in Slack, you had to either manually align columns using mrkdwn code blocks or use the table block[^2]. However, neither of these supported interactive operations. With the data table block, on the other hand, you can sort columns and paginate without complex configuration.

The data visualization block is a chart block added on June 16, 2026, that supports four types of charts: pie / bar / area / line[2].

The established approach for charts has been to have the app generate images using matplotlib or similar tools and upload them via the files.upload API. With the data visualization block, however, you simply pass JSON to the blocks parameter of chat.postMessage, and rendering is handled by the Slack client. This means no image generation code and no upload round-trips are needed. How convenient!

data table block Specifications[3]

Item Details
Number of rows Minimum 2, maximum 201, including header
Number of columns Minimum 1, maximum 20. All rows must have the same number of elements
Cell types 3 types: rich_text / raw_text / raw_number
Header First row is the header. rich_text cannot be used in header cells
caption Required. Used as the value of the HTML caption element
page_size 1–100. Default is 5 if omitted
Character limit Total of all cells across 1 table and 1 entire message: 20,000 characters. Split messages if exceeded

Sorting is alphabetical by default, but numeric sorting is used only when all cells in a column are raw_number. The key point is to send numeric columns in aggregated results as raw_number rather than as strings.

data visualization block Specifications[4]

Item Details
Chart types 4 types: pie / bar / area / line
Number of blocks Up to 2 blocks per message
title Required. Maximum 50 characters
pie Minimum 1, maximum 12 segments. value must be greater than 0, and is rendered as a proportion of the total of all segments
bar / area / line Minimum 1, maximum 12 series, axis_config is required. Maximum 20 data points per series
Label character limits segment label, series name, data point label, and each element of axis_config.categories are maximum 20 characters. x_label and y_label are maximum 50 characters

As runtime validation rules, all data point label values must match one of the axis_config.categories values, series cannot omit data points corresponding to categories, and series names must not be duplicated.

Trying It Out

We will use assumed data aggregating the number of inquiries over the past 5 weeks, broken down by Web and app sources. This time, we will not create an app, but instead validate by pasting JSON into the Block Kit Builder.

For details on Block Kit Builder, please refer to the following article.

https://dev.classmethod.jp/articles/tips-slack-bot-block-kit-builder/

data table block

{
  "blocks": [
    {
      "type": "data_table",
      "caption": "Weekly Inquiry Count",
      "page_size": 3,
      "rows": [
        [
          { "type": "raw_text", "text": "Week" },
          { "type": "raw_text", "text": "Web" },
          { "type": "raw_text", "text": "App" }
        ],
        [
          { "type": "raw_text", "text": "Week of 6/29" },
          { "type": "raw_number", "value": 42, "text": "42" },
          { "type": "raw_number", "value": 31, "text": "31" }
        ],
        [
          { "type": "raw_text", "text": "Week of 7/6" },
          { "type": "raw_number", "value": 55, "text": "55" },
          { "type": "raw_number", "value": 28, "text": "28" }
        ],
        [
          { "type": "raw_text", "text": "Week of 7/13" },
          { "type": "raw_number", "value": 38, "text": "38" },
          { "type": "raw_number", "value": 45, "text": "45" }
        ],
        [
          { "type": "raw_text", "text": "Week of 7/20" },
          { "type": "raw_number", "value": 61, "text": "61" },
          { "type": "raw_number", "value": 39, "text": "39" }
        ],
        [
          { "type": "raw_text", "text": "Week of 7/27" },
          { "type": "raw_number", "value": 47, "text": "47" },
          { "type": "raw_number", "value": 52, "text": "52" }
        ]
      ]
    }
  ]
}

data table block

Clicking a column header sorts the table. Also, since page_size is set to 3, the 5 rows of data are split across 2 pages and a pagination UI is displayed. When omitted, it defaults to 5 rows per page.

data visualization block

We will turn the same data into a line chart.

{
  "blocks": [
    {
      "type": "data_visualization",
      "title": "Inquiry Count Trends",
      "chart": {
        "type": "line",
        "series": [
          {
            "name": "Web",
            "data": [
              { "label": "Week of 6/29", "value": 42 },
              { "label": "Week of 7/6", "value": 55 },
              { "label": "Week of 7/13", "value": 38 },
              { "label": "Week of 7/20", "value": 61 },
              { "label": "Week of 7/27", "value": 47 }
            ]
          },
          {
            "name": "App",
            "data": [
              { "label": "Week of 6/29", "value": 31 },
              { "label": "Week of 7/6", "value": 28 },
              { "label": "Week of 7/13", "value": 45 },
              { "label": "Week of 7/20", "value": 39 },
              { "label": "Week of 7/27", "value": 52 }
            ]
          }
        ],
        "axis_config": {
          "categories": ["Week of 6/29", "Week of 7/6", "Week of 7/13", "Week of 7/20", "Week of 7/27"],
          "x_label": "Week",
          "y_label": "Count"
        }
      }
    }
  ]
}

A line chart displayed in the Block Kit Builder preview

Hovering over the chart displays the count for that week in a tooltip.

Differences from the Existing table block

Here we organize the schema-level differences between the table block mentioned in the overview and the data table block.

Item table block data table block
Sorting None Available
Pagination None Available. Number of rows specified with page_size
Column formatting Alignment and wrapping specified with column_settings None
Character limit 10,000 characters 20,000 characters
caption None Required

Since the data table block does not have column_settings, the table block should be used when column formatting such as right-alignment is needed.

Summary

By leveraging the data table block and data visualization block, you can easily display sortable tables and charts in Slack simply by assembling the aggregated results into JSON.

If you have any periodic reporting apps that make use of tables or charts, why not consider migrating to these new blocks?

In the next Part 2, we will try out general-purpose display blocks. Stay tuned!

脚注
  1. https://docs.slack.dev/changelog/2026/05/20/block-kit-more-new-blocks/ ↩︎

  2. https://docs.slack.dev/changelog/2026/06/16/block-kit-data-visualization-block/ ↩︎

  3. https://docs.slack.dev/reference/block-kit/blocks/data-table-block ↩︎

  4. https://docs.slack.dev/reference/block-kit/blocks/table-block ↩︎

Share this article