Skip to main content

Zero-config CLI that transforms Markdown into professional PDF documents using Typst.

Project description

doc-engine-cli

Zero-config Markdown → PDF documentation engine

License: MIT Python 3.10+ PyPI Typst Code style: black

Transform any README.md into a premium, print-ready PDF report — no configuration, no templates, no LaTeX.

pip install doc-engine-cli

Overview

doc-engine-cli is a developer-first CLI tool that converts Markdown files into professionally styled PDF documents using Typst as its rendering backend. It is designed for teams and individual developers who need high-quality documentation artifacts without the complexity of LaTeX or manual typesetting.

The tool auto-detects your README.md, extracts metadata from Git, and produces an IEEE-inspired technical document — complete with cover page, table of contents, and premium typography — in a single command.

doc-engine build

That's it. Zero configuration required.


Features

Feature Description
Zero-Config Auto-detects README.md, Git author, and document title. No setup files needed.
Premium Typography Inter font family with fallback chain, justified text, and optimized line spacing.
Code-Centric Syntax-highlighted code blocks with Cascadia Code font and GitHub-style backgrounds.
Academic Ready IEEE and white paper-inspired layout with cover page and table of contents.
Pure Python No external binaries required (no Pandoc, no LaTeX). Ships as a single pip install.
Cross-Platform Works on Windows, macOS, and Linux with Python 3.10+.

Quick Start

Installation

pip install doc-engine-cli

Generate Your First PDF

Navigate to any project directory containing a README.md and run:

doc-engine build

The tool will:

  1. Auto-detect README.md in the current directory
  2. Extract the document title from the first # heading
  3. Read your Git user.name for the author field
  4. Generate a README_doc.pdf with cover page, ToC, and formatted content

Explicit Options

doc-engine build path/to/file.md -o output.pdf -t "Custom Title" -a "Author Name"

Usage

CLI Reference

Usage: doc-engine build [OPTIONS] [INPUT_FILE]

  Convert a Markdown file into a professional PDF document.

Arguments:
  INPUT_FILE    Path to Markdown file (default: auto-detect README.md)

Options:
  -o, --output  TEXT    Output PDF file path (default: <input>_doc.pdf)
  -t, --title   TEXT    Document title override (default: first # heading)
  -a, --author  TEXT    Author name override (default: git user.name)
  --open                Open PDF after generation
  --version             Show version and exit
  --help                Show this message and exit

Examples

Basic — zero-config mode:

cd my-project
doc-engine build
# → Generates README_doc.pdf

Specify input and output:

doc-engine build CONTRIBUTING.md -o contributing_guide.pdf

Override metadata:

doc-engine build -t "API Reference v2.0" -a "Engineering Team"

Generate and open immediately:

doc-engine build --open

Use as Python module:

python -m doc_engine build README.md

Architecture

                    ┌─────────────┐
                    │  README.md  │
                    └──────┬──────┘
                           │
                    ┌──────▼──────┐
                    │   CLI Layer  │  click + rich
                    │  (cli.py)    │  arg parsing, git detection
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              │                         │
       ┌──────▼──────┐          ┌───────▼──────┐
       │  Converter   │          │   Compiler   │
       │(converter.py)│          │(compiler.py) │
       │              │          │              │
       │ Markdown AST │          │  Typst → PDF │
       │  → Typst     │          │  via typst-py│
       └──────┬──────┘          └───────┬──────┘
              │                         │
              │    ┌──────────────┐     │
              └────► report.typ   ◄─────┘
                   │  (template)  │
                   └──────┬──────┘
                          │
                   ┌──────▼──────┐
                   │  output.pdf  │
                   └─────────────┘

Pipeline

Stage Module Responsibility
1. Input Resolution cli.py Locate Markdown file, detect Git metadata
2. Markdown Parsing converter.py Parse Markdown AST via mistune, emit Typst markup
3. Template Injection compiler.py Merge converted content with report.typ template
4. PDF Compilation compiler.py Compile via typst Python bindings

How It Works

Markdown → Typst Conversion

The converter module parses Markdown using mistune and generates equivalent Typst markup:

Markdown Typst Output
# Heading = Heading
**bold** *bold*
*italic* _italic_
`code` `code`
[text](url) #link("url")[text]
- item - item
1. item + item
> blockquote #block(...)
--- #line(...)

Special characters (#, $, @, *, _, etc.) are automatically escaped to prevent Typst interpretation.

PDF Template

The included report.typ template provides:

  • Cover page with title, author, and date
  • Table of contents with depth-3 navigation
  • Running headers with document title and author
  • Page footer with page numbers and engine attribution
  • Code blocks with rounded corners and subtle borders
  • Heading hierarchy with accent-colored H2 sections

Project Structure

doc-engine-cli/
├── doc_engine/
│   ├── __init__.py          # Package version
│   ├── __main__.py          # python -m doc_engine entrypoint
│   ├── cli.py               # Click-based CLI + Git detection
│   ├── converter.py         # Markdown → Typst transpiler
│   ├── compiler.py          # Typst → PDF compilation engine
│   └── templates/
│       └── report.typ       # Professional Typst report template
├── tests/
│   ├── __init__.py
│   └── test_converter.py    # Unit tests for converter module
├── pyproject.toml            # Package configuration + dependencies
├── LICENSE                   # MIT License
├── .gitignore
└── README.md

Dependencies

Package Purpose License
click CLI framework BSD-3
rich Terminal formatting and progress indicators MIT
mistune Markdown parser (pure Python) BSD-3
typst Typst compiler bindings Apache-2.0

All dependencies are pure Python — no external binaries (Pandoc, LaTeX, etc.) are required.


Development

Setup

git clone https://github.com/leonardosalasd/doc-engine-cli.git
cd doc-engine-cli
pip install -e ".[dev]"

Run Tests

python -m pytest tests/ -v

Project Commands

# Generate PDF from this project's README
python -m doc_engine build

# Run with verbose error output
python -m doc_engine build README.md -o docs_output.pdf

Supported Markdown Elements

  • Headings (H1–H6)
  • Bold, italic, strikethrough
  • Inline code and fenced code blocks (with language hints)
  • Links
  • Ordered and unordered lists
  • Nested lists
  • Blockquotes
  • Tables
  • Horizontal rules
  • Line breaks (<br>)
  • Images (rendered as alt-text; remote images not embedded)
  • Footnotes
  • Math blocks

Roadmap

  • Custom template injection via --template flag
  • Multi-file documentation merge
  • GitHub Actions integration for CI/CD pipelines
  • Dark-mode PDF theme variant
  • Image downloading and embedding for remote URLs
  • YAML front-matter support for metadata override
  • PDF/A compliance for archival

Contributing

Contributions are welcome. Please follow these guidelines:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-feature)
  3. Write tests for new functionality
  4. Ensure all tests pass (python -m pytest tests/ -v)
  5. Submit a pull request

License

This project is licensed under the MIT License.


Built with Typst · Parsed with mistune · Styled with Rich

Project details


Download files

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

Source Distribution

doc_engine_cli-0.1.0.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

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

doc_engine_cli-0.1.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file doc_engine_cli-0.1.0.tar.gz.

File metadata

  • Download URL: doc_engine_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for doc_engine_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e6e43341035b50ed3ceb9f956174939a9392cc2a9faa8ee37f92f270a8786f3e
MD5 e45f6d234652a9873d7bbeb22c980097
BLAKE2b-256 f4fc7544295739e1df5b60501af3b53e29566f7c2dc47f41d04cc7e1423ccb46

See more details on using hashes here.

File details

Details for the file doc_engine_cli-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: doc_engine_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for doc_engine_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 947dc63197f3db6041ced977d923584cfbc9ec5bfb9a129033da17dbd964472a
MD5 baed2f832e81c59729ed2b0a7a9fa3b0
BLAKE2b-256 8ede617e827cbe33f35d78ca537eae57eabdbc90a93201c5cacfd0bb50ffce61

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page