Skip to main content

md-adf

Typed Python implementation of the Markdown-ADF converter.

Install

pip install md-adf

Requires Python 3.10 or newer.

API

from md_adf import (
    adf_to_markdown,
    markdown_to_adf,
    parse_adf,
    validate_adf,
)

markdown_result = adf_to_markdown(adf_document)
print(markdown_result.value)
print(markdown_result.diagnostics)

adf_result = markdown_to_adf("## Hello\n\nThis is **ADF**.")
print(adf_result.value)

Results have this shape:

@dataclass(frozen=True)
class ConversionResult(Generic[T]):
    value: T
    diagnostics: list[Diagnostic]

Current ConversionOptions support:

  • markdown_dialect: only gfm is supported; other values are rejected. Dict options may also use markdownDialect.
  • profile: jira, confluence, and portableMarkdown are accepted for API and CLI parity, but do not change Phase 1 conversion behavior yet.
  • validate_adf: defaults to True; set to False to skip pinned schema validation for ADF-to-Markdown input. Dict options may also use validateAdf.
  • normalize_adf: accepted for future normalization controls. It is currently a no-op because Phase 1 Markdown-to-ADF output is already normalized where supported. Dict options may also use normalizeAdf.

ADF-to-Markdown returns a string with trailing whitespace trimmed and no final newline. The CLI writes that string exactly.

CLI

md-adf to-md input.adf.json --output output.md
md-adf to-adf input.md --output output.adf.json
md-adf validate-adf input.adf.json
cat input.md | md-adf to-adf --profile jira

Supported profiles are jira, confluence, and portableMarkdown. Diagnostics are emitted as JSON lines to stderr.

Current Support

  • ADF validation/parsing against a pinned ADF schema.
  • ADF to Markdown for doc, paragraph, heading, blockquote, bulletList, orderedList, listItem, codeBlock, rule, simple GFM tables, task lists, panel blockquotes, expand flattening, card link/text fallback, media link/text fallback, rich inline text fallback for mention, emoji, date, and status, text, and hardBreak.
  • Markdown to ADF for paragraphs, headings, block quotes, lists, GFM task lists, code blocks, thematic breaks, GFM tables, simple <details> / <summary> blocks as expands, text, hard breaks, soft breaks, links, images as link text fallback, and raw HTML as text fallback.
  • Marks for strong, em, strike, code, and link.
  • Structured diagnostics for invalid ADF roots, unsupported ADF nodes/marks, invalid containers, invalid link marks, complex table omission, task-list fallback, malformed details fallback, panel/expand/card fallback, image/media fallback, rich inline fallback, and dropped rich inline attributes.

Known Limitations

  • ADF to Markdown only renders simple rectangular tables as GFM pipe tables; complex tables are omitted with diagnostics.
  • Media is represented as Markdown link/text fallback; no media URL resolver or image emission exists yet.
  • Markdown to ADF maps images to linked text fallback instead of ADF media nodes.
  • Mixed or complex GFM task lists may fall back to ordinary list items with diagnostics.
  • ADF to Markdown renders mentions, emoji, dates, and statuses as text fallbacks; Markdown to ADF keeps that text as normal text and does not recreate rich inline node IDs.
  • ADF to Markdown renders panels, expands, nested expands, and cards as conservative Markdown fallbacks; Markdown to ADF supports simple raw HTML <details> / <summary> blocks as ADF expands but keeps other fallback blockquotes, headings, text, and links as ordinary Markdown structures.
  • ADF to Markdown does not yet render layout nodes, extensions, or color/underline/subscript/superscript marks.
  • Markdown raw HTML is preserved as text fallback except for simple supported <details> / <summary> expand blocks; general raw HTML preservation is not available.
  • Unsupported ADF nodes are omitted with diagnostics.
  • Markdown parser AST access is not exposed as public API yet; conversion uses real Markdown parsers internally.

Development

poetry -C packages/python run python ../../tools/conformance/run-python.py
poetry -C packages/python run pytest
poetry -C packages/python run ruff check --config ../../pyproject.toml src tests ../../tools/conformance/run-python.py
poetry -C packages/python run mypy --config-file ../../pyproject.toml src tests ../../tools/conformance/run-python.py
npm run test:packages

Shared conformance fixtures live in ../../fixtures and are run by the root just test-python command.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

md_adf-0.2.2.tar.gz (30.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

md_adf-0.2.2-py3-none-any.whl (53.7 kB view details)

Uploaded Python 3

File details

Details for the file md_adf-0.2.2.tar.gz.

File metadata

  • Download URL: md_adf-0.2.2.tar.gz
  • Upload date:
  • Size: 30.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.11.4 Darwin/25.5.0

File hashes

Hashes for md_adf-0.2.2.tar.gz
Algorithm Hash digest
SHA256 34f9412d2592b063d8bcd7c414a4dbaa267385ab974d66c9790e2bb4e3c3e08f
MD5 e917ee844a7aada10e163f4c9e72a27f
BLAKE2b-256 af5bc7ebbfb7927464c569ff54e4dc231e58d8e9d1a4183b941e48a084a8b3b4

See more details on using hashes here.

File details

Details for the file md_adf-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: md_adf-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 53.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.11.4 Darwin/25.5.0

File hashes

Hashes for md_adf-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 14ab43d069a96a30e5e3d8cc88dc20d57105500b83fdffdeb15ef3730cfe2ca3
MD5 2ab18f4586bd4ae363904c38c94abc9b
BLAKE2b-256 4d0255d51ac61ffaccb92b9aa82edc9fbe9848aadd7b570975180c2ee2368a2f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.3

2 files

0.1.0

2 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