Tables
A table is an arrangement of data with rows and columns. Each row consists of cells containing arbitrary text in which inlines are parsed, separated by pipes |. The rows of a table consist of:
- a single header row
- a delimiter row separating the header from the data
- zero or more data rows
| Country | Capital |
|---|---|
| USA | Washington D.C. |
| Canada | Ottawa |
| Mexico | Mexico City |
| Brazil | Brasília |
| UK | London |
| Country | Capital |
| ------- | --------------- |
| USA | Washington D.C. |
| Canada | Ottawa |
| Mexico | Mexico City |
| Brazil | Brasília |
| UK | London |
- A leading and trailing pipe is recommended for clarity of reading
- Spaces between pipes and cell content are trimmed
- Block-level elements cannot be inserted in a table
| Country | Austria |
| Capital | Vienna |
| Calling code | +43 |
| ISO 3166 code | AT |
| | |
|-------------------|---------|
| **Country** | Austria |
| **Capital** | Vienna |
| **Calling code** | +43 |
| **ISO 3166 code** | AT |
Every table is responsive by default. The table will automatically scroll horizontally when the content is wider than the viewport. Tables that are wider than the content column also get a fullscreen button that opens the table in a fullscreen view with a sticky header row — useful for reference matrices with many scored columns.
| Region | Revenue ($M) | YoY Growth (%) | New Customers | Churn Rate (%) | NPS Score | Retention (%) | Upsell Revenue ($M) | Overall Score |
|---|---|---|---|---|---|---|---|---|
| North America | 42.5 | 12.3 | 1450 | 4.2 | 58 | 91.2 | 6.8 | 8.4 |
| EMEA | 31.2 | 9.8 | 1120 | 5.1 | 52 | 88.7 | 5.2 | 7.6 |
| APAC | 27.8 | 15.6 | 1680 | 6.3 | 47 | 85.4 | 4.1 | 7.1 |
| LATAM | 14.6 | 18.2 | 980 | 7.8 | 41 | 81.9 | 2.9 | 6.3 |
| ANZ | 9.3 | 7.4 | 340 | 3.9 | 61 | 92.5 | 1.8 | 7.9 |
| Nordics | 8.1 | 6.2 | 290 | 3.1 | 64 | 93.8 | 1.5 | 8.1 |
| Southern Europe | 11.4 | 8.9 | 510 | 5.6 | 49 | 86.1 | 2.2 | 6.9 |
| Middle East | 6.7 | 22.1 | 410 | 8.4 | 38 | 78.3 | 1.1 | 5.8 |
| Region | Revenue ($M) | YoY Growth (%) | New Customers | Churn Rate (%) | NPS Score | Retention (%) | Upsell Revenue ($M) | Overall Score |
|--------|---------------|------------------|-----------------|------------------|-----------|-----------------|-----------------------|----------------|
| North America | 42.5 | 12.3 | 1450 | 4.2 | 58 | 91.2 | 6.8 | 8.4 |
| EMEA | 31.2 | 9.8 | 1120 | 5.1 | 52 | 88.7 | 5.2 | 7.6 |
| APAC | 27.8 | 15.6 | 1680 | 6.3 | 47 | 85.4 | 4.1 | 7.1 |
| LATAM | 14.6 | 18.2 | 980 | 7.8 | 41 | 81.9 | 2.9 | 6.3 |
| ANZ | 9.3 | 7.4 | 340 | 3.9 | 61 | 92.5 | 1.8 | 7.9 |
| Nordics | 8.1 | 6.2 | 290 | 3.1 | 64 | 93.8 | 1.5 | 8.1 |
| Southern Europe | 11.4 | 8.9 | 510 | 5.6 | 49 | 86.1 | 2.2 | 6.9 |
| Middle East | 6.7 | 22.1 | 410 | 8.4 | 38 | 78.3 | 1.1 | 5.8 |
The {table} directive's :matrix: option highlights the whole row and column of the hovered cell. It only makes sense for lookup-style tables: a header row across the top and a row-heading first column — like the sprint velocity table below — where readers cross-reference a row label against a column label to find a value. This also applies in the fullscreen view for tables that use :matrix:.
| Team | Sprint 1 | Sprint 2 | Sprint 3 | Sprint 4 | Sprint 5 | Sprint 6 | Sprint 7 | Sprint 8 |
|---|---|---|---|---|---|---|---|---|
| Team Falcon | 34 | 38 | 41 | 36 | 44 | 47 | 42 | 50 |
| Team Nimbus | 28 | 31 | 27 | 33 | 30 | 35 | 38 | 40 |
| Team Orbit | 45 | 42 | 48 | 51 | 47 | 53 | 55 | 58 |
| Team Vertex | 22 | 25 | 24 | 28 | 26 | 30 | 29 | 33 |
| Team Atlas | 38 | 40 | 37 | 42 | 45 | 43 | 48 | 46 |
| Team Comet | 31 | 29 | 34 | 32 | 36 | 38 | 35 | 39 |
| Team Pulse | 50 | 52 | 49 | 55 | 58 | 54 | 60 | 57 |
| Team Nova | 19 | 22 | 21 | 25 | 23 | 27 | 26 | 29 |
:::{table}
:matrix:
| Team | Sprint 1 | Sprint 2 | Sprint 3 | Sprint 4 | Sprint 5 | Sprint 6 | Sprint 7 | Sprint 8 |
|------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|
| Team Falcon | 34 | 38 | 41 | 36 | 44 | 47 | 42 | 50 |
| Team Nimbus | 28 | 31 | 27 | 33 | 30 | 35 | 38 | 40 |
| Team Orbit | 45 | 42 | 48 | 51 | 47 | 53 | 55 | 58 |
| Team Vertex | 22 | 25 | 24 | 28 | 26 | 30 | 29 | 33 |
| Team Atlas | 38 | 40 | 37 | 42 | 45 | 43 | 48 | 46 |
| Team Comet | 31 | 29 | 34 | 32 | 36 | 38 | 35 | 39 |
| Team Pulse | 50 | 52 | 49 | 55 | 58 | 54 | 60 | 57 |
| Team Nova | 19 | 22 | 21 | 25 | 23 | 27 | 26 | 29 |
:::
The {table} directive wraps a pipe table and lets you control column widths using a 12-unit grid system (similar to Bootstrap). Use the :widths: option to specify how space is distributed across columns.
auto(default): Browser determines column widths based on content. Omit:widths:or set it toauto.description: First column 4 units, second column 8 units. Ideal for term/description tables.
Use dash-separated integers that sum to 12. Each number is the grid units for that column:
4-8— two columns: 33% and 67%4-4-4— three equal columns3-3-3-3— four equal columns
Ideal for glossaries, API parameter tables, or key-value lists where the first column is shorter.
| Term | Description |
|---|---|
| Elasticsearch | A distributed search and analytics engine |
| Kibana | A visualization and management platform |
| Fleet | A host management solution for Elastic Agent |
| Beats | Lightweight data shippers for edge monitoring |
:::{table}
:widths: description
| Term | Description |
| --- | --- |
| Elasticsearch | A distributed search and analytics engine |
| Kibana | A visualization and management platform |
| Fleet | A host management solution for Elastic Agent |
| Beats | Lightweight data shippers for edge monitoring |
:::
Two columns with a narrow first column (33%) and wider second column (67%).
| Parameter | Value |
|---|---|
index |
The name of the index to search |
query |
The query DSL defining search criteria |
size |
Maximum number of hits to return (default: 10) |
:::{table}
:widths: 4-8
| Parameter | Value |
| --- | --- |
| `index` | The name of the index to search |
| `query` | The query DSL defining search criteria |
| `size` | Maximum number of hits to return (default: 10) |
:::
| Product | Version | Status |
|---|---|---|
| Elasticsearch | 8.x | Current |
| Kibana | 8.x | Current |
| Logstash | 8.x | Current |
:::{table}
:widths: 4-4-4
| Product | Version | Status |
| --- | --- | --- |
| Elasticsearch | 8.x | Current |
| Kibana | 8.x | Current |
| Logstash | 8.x | Current |
:::
| Q1 | Q2 | Q3 | Q4 |
|---|---|---|---|
| 100 | 120 | 95 | 110 |
| 200 | 180 | 220 | 195 |
:::{table}
:widths: 3-3-3-3
| Q1 | Q2 | Q3 | Q4 |
| --- | --- | --- | --- |
| 100 | 120 | 95 | 110 |
| 200 | 180 | 220 | 195 |
:::
| ID | Name | Description |
|---|---|---|
| 1 | Alpha | First item with a longer description |
| 2 | Beta | Second item with additional details |
:::{table}
:widths: 2-4-6
| ID | Name | Description |
| --- | --- | --- |
| 1 | Alpha | First item with a longer description |
| 2 | Beta | Second item with additional details |
:::
When :widths: is omitted or set to auto, the browser determines column widths based on content. No column width constraints are applied.
| Left | Center | Right |
|---|---|---|
| 1 | 2 | 3 |
:::{table}
:widths: auto
| Left | Center | Right |
| --- | --- | --- |
| 1 | 2 | 3 |
:::
- Widths must sum to 12.
- The number of width values must match the table column count.
- The directive must contain exactly one pipe table.