Skip to main content

pymdown-multimd-table

A Python-Markdown extension implementing MultiMarkdown 6 extended table syntax, mirroring the feature set of the markdown-it-multimd-table JavaScript plugin.

Features

Standard (always enabled)

Feature Syntax
Column spanning (colspan) Empty cells || extend the previous cell
Text alignment :---, :---:, ---: in the separator
Wrappable columns ---+ in the separator adds class="extend"
Multiple header rows Multiple rows before the separator
Table captions [caption text] or [caption text][label]
Multiple tbody sections Blank line between data rows (see multibody)
Inline Markdown Bold, italic, code, etc. inside cells

Optional (controlled by config)

Option Default Description
rowspan False ^^ in a cell merges it with the cell above
multiline False Backslash \ at end of row continues cell content on the next row
headerless False Tables without a header/separator row
multibody True Blank lines between data rows create separate <tbody> elements
autolabel True Auto-generate id from caption text
attr_list False Parse {.class #id key=val} attribute blocks on cells and rows

Installation

pip install pymdown-multimd-table

Usage

import markdown

md = markdown.Markdown(extensions=["pymdown_multimd_table"])
html = md.convert(source)

With options:

md = markdown.Markdown(
    extensions=["pymdown_multimd_table"],
    extension_configs={
        "pymdown_multimd_table": {
            "rowspan": True,
            "multiline": True,
            "headerless": True,
            "multibody": True,   # default
            "autolabel": True,   # default
        }
    },
)

In MkDocs (mkdocs.yml):

markdown_extensions:
  - pymdown_multimd_table:
      rowspan: true
      multiline: true

Syntax Examples

Basic table

First Header  | Second Header
------------- | -------------
Content Cell  | Content Cell
First Header Second Header
Content Cell Content Cell

Alignment

| Item      | Value  |
| :-------: | -----: |
| Centered  | Right  |
Item Value
Centered Right

Column spanning

|            | Grouping ||
| Header     | A        | B        |
| ---------- | :------: | -------: |
| Data       | spans    ||
Grouping
Header A B
Data spans

Caption with label

[Sales Data][sales]
| Q1   | Q2   |
| ---- | ---- |
| 100  | 120  |
Sales Data
Q1 Q2
100 120

Row spanning (rowspan: true)

| A      | B  | C  |
| ------ | -- | -- |
| tall   | 1  | x  |
| ^^     | 2  | y  |
A B C
tall 1 x
2 y

Multiline cells (multiline: true)

| Code            | Output  |
| --------------- | ------- |
| ```python      |         |\
| print("hello") | hello   |\
| ```            |         |
Code Output
```python
print("hello")
```
hello

Headerless table (headerless: true)

| -------- | ----- |
| No header| here  |
No header here

Attribute lists on cells and rows (attr_list: true)

Place a {…} block at the end of a cell to add HTML attributes to that cell. The block supports .class, #id, and key="value" tokens — the same syntax as the standard attr_list Markdown extension.

Cell attributes — append {…} inside the cell, before the closing |:

| Header                        |
| ----------------------------- |
| plain cell                    |
| styled cell {.highlight}      |
| id cell {#cell-1}             |
| full {#c2 .bold data-x="1"}   |
<table>
  <thead>
    <tr><th>Header</th></tr>
  </thead>
  <tbody>
    <tr><td>plain cell</td></tr>
    <tr><td class="highlight">styled cell</td></tr>
    <tr><td id="cell-1">id cell</td></tr>
    <tr><td id="c2" class="bold" data-x="1">full</td></tr>
  </tbody>
</table>

Row attributes — append {…} after the last | of a row:

| A | B |
| - | - |
| x | y |{.even}
| p | q |{.odd #row-2}
<table>
  <thead>
    <tr><th>A</th><th>B</th></tr>
  </thead>
  <tbody>
    <tr class="even"><td>x</td><td>y</td></tr>
    <tr class="odd" id="row-2"><td>p</td><td>q</td></tr>
  </tbody>
</table>

Combined — cell and row attributes can be used together:

| H                  |
| ------------------ |
| cell {.myclass} |{.myrow}
<table>
  <thead>
    <tr><th>H</th></tr>
  </thead>
  <tbody>
    <tr class="myrow"><td class="myclass">cell</td></tr>
  </tbody>
</table>

Development

pip install -e ".[dev]"
pytest tests/

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for pymdown-multimd-table 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pymdown-multimd-table 0.1.1
File Size Uploaded
pymdown_multimd_table-0.1.1.tar.gz 21.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pymdown-multimd-table 0.1.1
File Interpreter ABI Platform
pymdown_multimd_table-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 33.3 kB

Release files / pymdown_multimd_table-0.1.1.tar.gz

Download URL pymdown_multimd_table-0.1.1.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
fae94a844d19f5da4dec6294b52de34c5d539a14619799bcc206e2ddfcf924e2
BLAKE2b-256 checksum
How to use checksums
2a437bdbf61093ec2018456837b4cd9c39bc381ac79d0f3a264b07e220213d74
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.

Transparency log

Release files / pymdown_multimd_table-0.1.1-py3-none-any.whl

Download URL pymdown_multimd_table-0.1.1-py3-none-any.whl
Size 11.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eefc9074a46adefe8529d52a7994f546e225bbda37b3071dce8e0dd97b351605
BLAKE2b-256 checksum
How to use checksums
0237101af3a28ada0f1617e7f4bfbc31ac3608be23a80ff62cbf48155f50ca2a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page