Skip to content
Block Kit for React
Esc
↑↓navigate↵open⌘Jpreview
On this page

Table

A plain grid of rich text cells, for small datasets with no sorting or paging.

table renders a fixed grid: first row as the header, every cell either rich_text or plain text. Reach for it when a dataset is small enough to show in full; for anything that needs sorting or pagination, use data_table instead.

Your AppAPP
NameRole
Ada LovelaceEngineering

Fields

PropType
typestring

Always `table`.

Typestring
rowsCell[][]

The grid, header row first. Each row is an array of cells. Slack allows up to 100 rows, with up to 20 cells per row.

TypeCell[][]
column_settings?ColumnSetting[]

Per-column alignment and wrapping, matched to `rows` by index. Slack allows up to 20 entries; columns past the end of this array use the default behavior.

TypeColumnSetting[]
block_id?string

A unique identifier for the block, up to 255 characters. Slack generates one if omitted.

Typestring

Cell

Each cell is one of three shapes, picked by type:

PropType
rich_text?RichTextBlock

A Slack rich text node: bold, italic, links, emoji, and other inline styles.

TypeRichTextBlock
raw_text?{ type: "raw_text", text: string }

Plain text.

Type{ type: "raw_text", text: string }
raw_number?{ type: "raw_number", value: number, text: string }

A number with its own display text.

Type{ type: "raw_number", value: number, text: string }

ColumnSetting

PropType
align?"left" | "center" | "right"

Text alignment for every cell in the column.

Type"left" | "center" | "right"
Defaultleft
is_wrapped?boolean

Wraps cell text onto multiple lines instead of clipping to one.

Typeboolean
Defaultfalse

Examples

Basic table

The preview above is adapted from fixtures/catalog/table/simple-table.json, a header row and one data row, both rich_text cells.

Alignment and wrapping

column_settings[i] controls the column at that index. Here the first column wraps long text and the second is right-aligned:

Your AppAPP
TaskOwnerHours
Rewrite the onboarding flow end to endGrace Hopper12
Fix the flaky release pipelineAlan Turing3

Mixed cell types

raw_text, raw_number, and rich_text cells can sit side by side in the same table:

{ "blocks": [ { "type": "table", "rows": [ [ { "type": "raw_text", "text": "Account" }, { "type": "raw_text", "text": "Stage" }, { "type": "raw_text", "text": "Value" } ], [ { "type": "raw_text", "text": "Acme Inc." }, { "type": "rich_text", "elements": [ { "type": "rich_text_section", "elements": [ { "type": "text", "text": "Negotiation", "style": { "bold": true } } ] } ] }, { "type": "raw_number", "value": 42000, "text": "$42,000" } ], [ { "type": "raw_text", "text": "Nimbus Corp." }, { "type": "rich_text", "elements": [ { "type": "rich_text_section", "elements": [ { "type": "text", "text": "Closed Won", "style": { "bold": true } } ] } ] }, { "type": "raw_number", "value": 8500, "text": "$8,500" } ] ] } ] }

Hovering the table also shows Slack’s download-as-CSV and copy buttons, same as data_table.

Was this page helpful?