Tables

Ordinary GFM table syntax maps to Slack's two table blocks by size:

Table shapeBecomes
≤ 50 rows (incl. header), ≤ 20 columnstable block
≤ 200 data rows, ≤ 20 columnsdata_table block (paginated, 5 rows per page)
> 200 data rowsdata_table with the first 200 data rows + a degradation
> 20 columnsPipe-syntax markdown block, else preformatted text

Column alignment (:---:) carries into the native block, columns with long cells wrap automatically, and a data_table takes its caption from the nearest preceding heading. Cells run through the full inline pipeline, so mentions, emoji, links, and styling work inside table cells; purely numeric cells become typed number cells.

| Region | Errors | Owner |
| --- | ---: | --- |
| us-east-1 | 412 | <@U0123456789> |
| eu-west-1 | 17 | <@U0123456780> |
Block Kit JSON

Past 50 rows the block changes. Here is the same markdown with 56 data rows, which Slack renders as a paginated data_table with a caption lifted from the heading above it:

### Error budget by region

| Region | Errors | p95 |
| --- | ---: | ---: |
| us-east-1-01 | 5 | 120 |
| eu-west-1-02 | 42 | 173 |
| ap-south-1-03 | 79 | 226 |
| eu-central-1-04 | 116 | 279 |
| us-west-2-05 | 153 | 332 |
| sa-east-1-06 | 190 | 385 |
| ap-northeast-1-07 | 227 | 138 |
| us-east-1-08 | 264 | 191 |
| eu-west-1-09 | 301 | 244 |
| ap-south-1-10 | 338 | 297 |
| eu-central-1-11 | 375 | 350 |
| us-west-2-12 | 12 | 403 |
| sa-east-1-13 | 49 | 156 |
| ap-northeast-1-14 | 86 | 209 |
| us-east-1-15 | 123 | 262 |
| eu-west-1-16 | 160 | 315 |
| ap-south-1-17 | 197 | 368 |
| eu-central-1-18 | 234 | 121 |
| us-west-2-19 | 271 | 174 |
| sa-east-1-20 | 308 | 227 |
| ap-northeast-1-21 | 345 | 280 |
| us-east-1-22 | 382 | 333 |
| eu-west-1-23 | 19 | 386 |
| ap-south-1-24 | 56 | 139 |
| eu-central-1-25 | 93 | 192 |
| us-west-2-26 | 130 | 245 |
| sa-east-1-27 | 167 | 298 |
| ap-northeast-1-28 | 204 | 351 |
| us-east-1-29 | 241 | 404 |
| eu-west-1-30 | 278 | 157 |
| ap-south-1-31 | 315 | 210 |
| eu-central-1-32 | 352 | 263 |
| us-west-2-33 | 389 | 316 |
| sa-east-1-34 | 26 | 369 |
| ap-northeast-1-35 | 63 | 122 |
| us-east-1-36 | 100 | 175 |
| eu-west-1-37 | 137 | 228 |
| ap-south-1-38 | 174 | 281 |
| eu-central-1-39 | 211 | 334 |
| us-west-2-40 | 248 | 387 |
| sa-east-1-41 | 285 | 140 |
| ap-northeast-1-42 | 322 | 193 |
| us-east-1-43 | 359 | 246 |
| eu-west-1-44 | 396 | 299 |
| ap-south-1-45 | 33 | 352 |
| eu-central-1-46 | 70 | 405 |
| us-west-2-47 | 107 | 158 |
| sa-east-1-48 | 144 | 211 |
| ap-northeast-1-49 | 181 | 264 |
| us-east-1-50 | 218 | 317 |
| eu-west-1-51 | 255 | 370 |
| ap-south-1-52 | 292 | 123 |
| eu-central-1-53 | 329 | 176 |
| us-west-2-54 | 366 | 229 |
| sa-east-1-55 | 403 | 282 |
| ap-northeast-1-56 | 40 | 335 |
Block Kit JSON

Ragged rows are normalized the way GFM specifies: short rows are padded and extra cells are dropped, each with a degradation. Malformed model output cannot produce a misaligned table.