Skip to main content

Beautiful markdown viewer and renderer for CLI, CI/CD, and automated workflows

Project description

Markdown Viewer

View, export, and translate markdown files โ€” straight from the terminal

License: MIT Python PyPI Security

Open any markdown file in a full browser UI with one command. Supports PDF and Word export, Mermaid diagrams, math equations, syntax highlighting, and content translation.


๐Ÿ“ฆ Installation

pip install markdown-viewer-app
playwright install chromium

playwright install chromium is a one-time setup (~140 MB) required for PDF export. Skip it if you don't need PDF export.


๐Ÿš€ Quick Start

# Open a file in your browser
mdview README.md

# Export to PDF
mdview README.md --export-pdf

# Export to Word
mdview README.md --export-word

# Export to both at once
mdview README.md --export-pdf --export-word

# Render to HTML only (no browser โ€” useful for CI/CD)
mdview README.md --no-browser

# Save HTML to a specific file
mdview README.md -o output.html

# Use a custom port (default is 5000)
mdview README.md -p 5001

# Stop the background server on a custom port
mdview --stop -p 5001

When you run mdview <file>, the app:

  1. Starts a background server on port 5000 (silently โ€” no extra window opens)
  2. Opens your browser directly to the rendered file
  3. Returns you to the terminal immediately

The server keeps running in the background. Subsequent mdview calls reuse it instantly. Use -p/--port to run multiple servers on different ports simultaneously.


๐Ÿ–ฅ๏ธ CLI Reference

mdview [file] [options]

Arguments

Argument Description
file Path to the markdown file to render (optional โ€” prompts interactively if omitted in a terminal)

Options

Flag Default Description
-o, --output <path> (temp file) Save rendered HTML to this path instead of a temporary file
--no-browser off Render without opening a browser window
--keep off Keep the HTML output file after rendering (saved as <filename>.html next to the source)
--export-pdf [path] โ€” Export to PDF; optionally specify an output path
--export-word [path] โ€” Export to Word (.docx); optionally specify an output path
--share-pdf โ€” Export to PDF and open your email client with it attached
--share-word โ€” Export to Word and open your email client with it attached
-p, --port <port> 5000 Port for the background Flask server
--stop โ€” Stop the background server and release the port
--version โ€” Print the installed version and exit

Examples

# --- Viewing ---
mdview README.md                        # Open in browser (default)
mdview README.md --no-browser           # Render without opening browser
mdview README.md --no-browser --keep    # Render and save README.html next to the source

# --- HTML output ---
mdview README.md -o docs/out.html           # Save rendered HTML to a specific path
mdview README.md --no-browser -o out.html   # Save HTML, no browser

# --- PDF export ---
mdview README.md --export-pdf               # Export to README.pdf (same directory)
mdview README.md --export-pdf ~/docs/out.pdf  # Export to a specific path

# --- Word export ---
mdview README.md --export-word              # Export to README.docx
mdview README.md --export-word ~/docs/out.docx

# --- Export both at once ---
mdview README.md --export-pdf --export-word

# --- Email sharing ---
mdview README.md --share-pdf   # Export PDF and open email client
mdview README.md --share-word  # Export Word and open email client

# --- Server / port management ---
mdview README.md -p 5001       # Open using a custom port
mdview --stop                  # Stop the default server (port 5000)
mdview --stop -p 5001          # Stop a server on a custom port

# --- CI/CD (non-interactive) ---
# When stdout is not a TTY, browser and server are skipped automatically
mdview README.md -o output.html

# --- Version ---
mdview --version

โœจ Features

๐Ÿ“ Rich Markdown Rendering

  • Full GitHub Flavored Markdown (GFM) support
  • Syntax highlighting for 180+ programming languages
  • Tables, task lists, footnotes, blockquotes, and more
  • Emoji support with correct Unicode rendering

๐Ÿ“Š Diagram Support

  • Mermaid: flowcharts, sequence diagrams, pie charts, Gantt charts, state diagrams
  • Diagrams are preserved in all export formats

๐Ÿ”ข Math Equations

  • KaTeX integration for beautiful math rendering
  • Inline: $E = mc^2$
  • Block equations with full LaTeX syntax

๐Ÿ“„ Export

  • PDF โ€” high-quality, print-ready (powered by Playwright/Chromium)
  • Word (.docx) โ€” editable documents with preserved formatting
  • Silent: no popup dialogs, status bar updates on completion

๐ŸŒ Translation

  • Translate content to 15+ languages directly from the UI
  • Preserves markdown formatting and code blocks
  • Powered by MyMemory (free API, no key needed)

๐Ÿ”’ Security

  • CSRF protection on all API endpoints
  • Content Security Policy (CSP) headers
  • Input validation with Marshmallow schemas
  • Path traversal protection
  • Localhost-only server binding (127.0.0.1)

๐Ÿ› ๏ธ Productivity Tools

  • Copy all content with one click
  • Share via email
  • Keyboard shortcuts: Ctrl+O (open), Ctrl+Shift+C (copy), F5 (refresh), F11 (fullscreen)

๐Ÿ“– Markdown Reference

Basic Formatting

# Heading 1
## Heading 2
### Heading 3

**bold**, *italic*, ~~strikethrough~~, ==highlighted==

- Unordered list
  - Nested item

1. Ordered list

[Link text](https://example.com)
![Alt text](https://example.com/image.png)

Code Blocks

```python
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)
```

```sql
SELECT name, COUNT(*) FROM users GROUP BY name;
```

Tables

| Feature        | Markdown Viewer | Typora | VS Code |
|----------------|:---------------:|:------:|:-------:|
| PDF Export     | โœ…              | โœ…     | โŒ      |
| Word Export    | โœ…              | โœ…     | โŒ      |
| Translation    | โœ…              | โŒ     | โŒ      |
| Diagrams       | โœ…              | โœ…     | โœ…      |
| Free & Open    | โœ…              | โŒ     | โœ…      |

Mermaid Diagrams

```mermaid
graph TD
    A[Start] --> B{Working?}
    B -->|Yes| C[Great!]
    B -->|No| D[Debug] --> B
```

```mermaid
sequenceDiagram
    Client->>Server: Request
    Server-->>Client: Response
```

Math Equations

Inline: $x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$

Block:
$$
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
$$

Task Lists

- [x] Install Markdown Viewer
- [x] Open first document
- [ ] Try exporting to PDF

๐Ÿ”ง Development Setup

git clone https://github.com/dimpletz/markdown-viewer.git
cd markdown-viewer
poetry install
poetry run playwright install chromium

Run

# Open a file (server auto-reloads on code changes)
poetry run mdview README.md

# Or start the server standalone
poetry run mdview README.md --no-browser

Tests

# Run all tests
poetry run pytest

# With coverage report
poetry run pytest --cov=markdown_viewer --cov-report=html

Project Structure

markdown-viewer/
โ”œโ”€โ”€ markdown_viewer/
โ”‚   โ”œโ”€โ”€ app.py                # Flask application factory
โ”‚   โ”œโ”€โ”€ routes.py             # API endpoints
โ”‚   โ”œโ”€โ”€ server.py             # Server management
โ”‚   โ”œโ”€โ”€ cli.py                # CLI entry point (mdview)
โ”‚   โ”œโ”€โ”€ electron/             # Browser UI (HTML/JS/CSS)
โ”‚   โ”‚   โ””โ”€โ”€ renderer/
โ”‚   โ”‚       โ”œโ”€โ”€ index.html
โ”‚   โ”‚       โ”œโ”€โ”€ scripts/
โ”‚   โ”‚       โ””โ”€โ”€ styles/
โ”‚   โ”œโ”€โ”€ exporters/            # PDF & Word export
โ”‚   โ”œโ”€โ”€ processors/           # Markdown processing
โ”‚   โ”œโ”€โ”€ translators/          # Translation service
โ”‚   โ””โ”€โ”€ utils/                # File handling
โ”œโ”€โ”€ tests/
โ”œโ”€โ”€ docs/
โ””โ”€โ”€ examples/

๐Ÿ› Known Limitations

  • PDF export requires playwright install chromium (one-time ~140 MB download)
  • Translation requires an internet connection
  • Word export has limited support for complex CSS styling

๐Ÿ“š More Documentation


๐Ÿค Contributing

  1. Fork the repository
  2. Create a branch: git checkout -b feature/my-feature
  3. Make your changes and add tests: poetry run pytest
  4. Open a pull request

๐Ÿ“„ License

MIT License โ€” see LICENSE for details.


๐Ÿ™ Acknowledgments

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

markdown_viewer_app-1.1.3.tar.gz (46.3 kB view details)

Uploaded Source

Built Distribution

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

markdown_viewer_app-1.1.3-py3-none-any.whl (57.0 kB view details)

Uploaded Python 3

File details

Details for the file markdown_viewer_app-1.1.3.tar.gz.

File metadata

  • Download URL: markdown_viewer_app-1.1.3.tar.gz
  • Upload date:
  • Size: 46.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.3 CPython/3.14.3 Windows/11

File hashes

Hashes for markdown_viewer_app-1.1.3.tar.gz
Algorithm Hash digest
SHA256 aaad745758856e2584a0ab2712b785cafbf5d7210d719c48eeaa4b8d38a38972
MD5 6596877f0d34065f84ac666726028410
BLAKE2b-256 2a9ad7b475ffbaf11a77059ac84e1fa1945d23b01bb3bd71ed96fd2408485646

See more details on using hashes here.

File details

Details for the file markdown_viewer_app-1.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for markdown_viewer_app-1.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c8dc74696dcda52b152e36ef88719f7a36d66281c3c288f0ac11a6afbc406e68
MD5 5c8d42527ce0ec5fd99e539c1428fc69
BLAKE2b-256 e759920547d66d6b6a9173351ece02fedd3d9c0bd826091a02f796ff0b6fcf98

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