Skip to main content
MarkItDown’s plugin system allows you to extend its capabilities with custom document converters for file formats not supported by default.

Using Plugins

Enabling Plugins

Plugins are disabled by default and must be explicitly enabled.

Listing Installed Plugins

Check which plugins are installed:
Output:
If no plugins are installed:

Finding Plugins

Discover available plugins:
1

Search GitHub

Look for repositories tagged with #markitdown-plugin:Search GitHub for #markitdown-plugin
2

Check PyPI

Search PyPI for packages starting with markitdown-:
3

Community Resources

Check the MarkItDown repository for plugin recommendations

Installing Plugins

Plugins are installed as Python packages:
Verify installation:

Creating Plugins

Plugin Structure

A MarkItDown plugin is a Python package that implements a specific interface:
1

Create a DocumentConverter

converter.py
2

Create Plugin Interface

__init__.py
3

Configure Entry Point

pyproject.toml

Entry Point Configuration

The entry point is critical for plugin discovery:
  • Entry point group: Must be "markitdown.plugin"
  • Plugin name: Any unique identifier (e.g., rtf_plugin)
  • Package name: The fully qualified package name (e.g., markitdown_rtf_plugin)

Plugin Interface Version

Your plugin must export the interface version:
Currently, only version 1 is supported.

Registration Function

Implement the register_converters function:

Advanced Plugin Development

Converter Priority

Control when your converter is tried:
Lower priority values are tried first. Built-in converters use 0.0 for specific formats and 10.0 for generic formats.

Accessing File Content

The file_stream is seekable:
Always reset the file stream position after reading in accepts(). The convert() method expects the stream to be at the original position.

Using Configuration Options

Access configuration passed to MarkItDown:
Pass configuration when creating MarkItDown:

Error Handling

Handle missing dependencies gracefully:

Example: Sample Plugin

The official sample plugin demonstrates best practices:
Install and use:

Testing Plugins

Test your plugin:

Publishing Plugins

1

Package Your Plugin

2

Test Locally

3

Publish to PyPI

4

Tag Repository

Add #markitdown-plugin topic to your GitHub repository for discoverability

Security Considerations

Plugins execute arbitrary code during conversion. Only install plugins from trusted sources.
Best practices:
  • Review plugin source code before installation
  • Use virtual environments for testing new plugins
  • Keep plugins updated
  • Report security issues to plugin authors

Troubleshooting

Plugin Not Found

If --list-plugins doesn’t show your plugin:

Plugin Fails to Load

Check for errors:

Converter Not Called

Ensure accepts() returns True: