A universal document converter written in Rust. Read a markup format, render it back out in another. A performant and lightweight reimplementation of pandoc.
Warning
carta is an early-stage alpha under active development. Not all of pandoc's formats are implemented yet and the API is still unstable.
- Performance and a smaller binary than pandoc.
- Feature parity with pandoc across all formats and extensions.
- A developer-friendly library, with the CLI as a thin shell over it.
This tracks carta's status of all formats pandoc supports. See STATUS.md for a detailed per-format breakdown including extension coverage, and the full feature backlog.
β usable β basically done; any remaining parity gaps are minor and unlikely to affect regular use Β· π§ in development β large parity gaps or breaking issues (e.g. panics), not recommended for use yet Β· β not started Β· β not applicable (pandoc has no such direction)
Markdown family
| Format | Reader | Writer |
|---|---|---|
CommonMark (commonmark) |
β | β |
CommonMark-X (commonmark_x) |
β | β |
GitHub-Flavored Markdown (gfm) |
β | β |
Pandoc Markdown (markdown) |
β | β |
Markdown strict (markdown_strict) |
β | β |
MultiMarkdown (markdown_mmd) |
β | β |
PHP Markdown Extra (markdown_phpextra) |
β | β |
GitHub Markdown, legacy (markdown_github) |
β | β |
Djot (djot) |
β | β |
Markua (markua) |
β | β |
HTML & slides
| Format | Reader | Writer |
|---|---|---|
HTML (html, html5, html4) |
β | β |
Chunked HTML (chunkedhtml) |
β | β |
reveal.js (revealjs) |
β | β |
Beamer (beamer) |
β | β |
Slidy (slidy) |
β | β |
S5 (s5) |
β | β |
Slideous (slideous) |
β | β |
DZSlides (dzslides) |
β | β |
PowerPoint (pptx) |
β | β |
TeX & typesetting
| Format | Reader | Writer |
|---|---|---|
LaTeX (latex) |
β | β |
Typst (typst) |
β | β |
ConTeXt (context) |
β | β |
Texinfo (texinfo) |
β | β |
PDF (pdf) |
β | β |
Lightweight markup
| Format | Reader | Writer |
|---|---|---|
reStructuredText (rst) |
β | β |
AsciiDoc (asciidoc) |
β | β |
AsciiDoc legacy (asciidoc_legacy) |
β | β |
Asciidoctor (asciidoctor) |
β | β |
Org mode (org) |
β | β |
Textile (textile) |
β | β |
Muse (muse) |
β | β |
Haddock (haddock) |
β | β |
txt2tags (t2t) |
β | β |
Perl POD (pod) |
β | β |
Wikis
| Format | Reader | Writer |
|---|---|---|
MediaWiki (mediawiki) |
β | β |
DokuWiki (dokuwiki) |
β | β |
Jira (jira) |
β | β |
Creole (creole) |
β | β |
TikiWiki (tikiwiki) |
β | β |
TWiki (twiki) |
β | β |
Vimwiki (vimwiki) |
β | β |
XWiki (xwiki) |
β | β |
ZimWiki (zimwiki) |
β | β |
roff
| Format | Reader | Writer |
|---|---|---|
man (man) |
β | β |
mdoc (mdoc) |
β | β |
ms (ms) |
β | β |
vimdoc (vimdoc) |
β | β |
Word processor, ebook & notebook
| Format | Reader | Writer |
|---|---|---|
Word (docx) |
β | β |
OpenDocument Text (odt) |
β | β |
OpenDocument (opendocument) |
β | β |
EPUB (epub, epub2, epub3) |
β | β |
Jupyter Notebook (ipynb) |
β | β |
FictionBook2 (fb2) |
β | β |
InDesign ICML (icml) |
β | β |
Rich Text Format (rtf) |
β | β |
Spreadsheet (xlsx) |
β | β |
XML & publishing
| Format | Reader | Writer |
|---|---|---|
DocBook (docbook, docbook4, docbook5) |
β | β |
JATS (jats, jats_archiving, jats_articleauthoring, jats_publishing) |
β | β |
BITS (bits) |
β | β |
TEI (tei) |
β | β |
Generic XML (xml) |
β | β |
Bibliography
| Format | Reader | Writer |
|---|---|---|
BibTeX (bibtex) |
β | β |
BibLaTeX (biblatex) |
β | β |
CSL JSON (csljson) |
β | β |
RIS (ris) |
β | β |
EndNote XML (endnotexml) |
β | β |
Data, interchange & terminal
| Format | Reader | Writer |
|---|---|---|
Pandoc JSON (json) |
β | β |
Native Pandoc AST (native) |
β | β |
OPML (opml) |
β | β |
CSV (csv) |
β | β |
TSV (tsv) |
β | β |
Plain text (plain) |
β | β |
BBCode (bbcode, bbcode_phpbb, bbcode_steam, β¦) |
β | β |
ANSI terminal (ansi) |
β | β |
Download the archive for your platform from the latest release. Builds are provided for Linux (x86-64 gnu and static musl, arm64), macOS (Intel and Apple Silicon), and Windows (x86-64).
cargo install cartaThis installs the carta binary. For a smaller build, pass --no-default-features with only the formats you need, e.g. --features cli,read-commonmark,write-html.
git clone https://github.com/mfkrause/carta
cd carta
cargo build --release
# binary at target/release/carta# CommonMark to HTML
carta -f commonmark -t html input.md -o output.html
# read from stdin, write to stdout
echo '# Hello' | carta -f commonmark -t html
# inspect the document model
carta -f commonmark -t json input.md
# standalone document with a table of contents and numbered sections
carta -f commonmark -t html -s --toc --number-sections input.md -o output.html
# render HTML math with MathJax (or --katex)
carta -f commonmark -t html -s --mathjax input.md -o output.html
# extract a notebook's embedded images to files, rewriting the references
carta -f ipynb -t markdown --extract-media=media notebook.ipynb -o notebook.md
# transform the document through a JSON filter before writing (repeatable, applied in order)
carta -f commonmark -t html -F ./my-filter.py input.md -o output.html
# discover what this build supports
carta --list-input-formats
carta --list-output-formats
carta --list-extensions # extensions for the Markdown dialect
carta --list-extensions=gfm # extensions and defaults for a given formatuse carta::{convert_text, ReaderOptions, WriterOptions};
let html = convert_text(
"commonmark",
"html",
"# Hello, *world*",
&ReaderOptions::default(),
&WriterOptions::default(),
)?;convert_text is the shortcut for text-to-text conversion. The general entry point is convert, which takes raw bytes and returns an Output that is text or bytes depending on the target format β use it when either side is a binary format.
You can select formats at compile time via per-direction features to make binaries even more lightweight for your individual needs.
cargo build -p carta --no-default-features --features read-commonmark,write-htmlcargo build # build the workspace
cargo nextest run --workspace # run tests
cargo clippy --all-targets # lint
cargo +nightly fuzz run commonmark # fuzz a reader (see fuzz/README.md)The workspace splits into carta-ast (the document model), carta-core (shared traits and options), carta-readers, carta-writers, and carta (the library facade, which also ships the command-line binary behind its cli feature).
Copyright Β© 2026 Maximilian Krause.
carta is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License, version 3, as published by the Free Software Foundation. See LICENSE for the full text.