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.
Fields
typestring
Always `table`.
stringrowsCell[][]
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.
Cell[][]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.
ColumnSetting[]block_id?string
A unique identifier for the block, up to 255 characters. Slack generates one if omitted.
stringCell
Each cell is one of three shapes, picked by type:
rich_text?RichTextBlock
A Slack rich text node: bold, italic, links, emoji, and other inline styles.
RichTextBlockraw_text?{ type: "raw_text", text: string }
Plain text.
{ type: "raw_text", text: string }raw_number?{ type: "raw_number", value: number, text: string }
A number with its own display text.
{ type: "raw_number", value: number, text: string }ColumnSetting
align?"left" | "center" | "right"
Text alignment for every cell in the column.
"left" | "center" | "right"leftis_wrapped?boolean
Wraps cell text onto multiple lines instead of clipping to one.
booleanfalseExamples
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:
Mixed cell types
raw_text, raw_number, and rich_text cells can sit side by side in the same table:
Hovering the table also shows Slack’s download-as-CSV and copy buttons, same as data_table.