Markdown Docs
Renders a product's shipped README.md and CHANGELOG.md, uploaded to a file field, as documentation and release-notes pages: sections, anchors and a table of contents for the manual, a version, date and anchor per release. Free, MIT-licensed.
Version 1.0.0 · released October 29, 2026
Markdown Docs is a free ExpressionEngine 7 plugin that renders a product's shipped documentation on your site. Upload the README.md and CHANGELOG.md that ship with an add-on, a library or any product to a file field, and two template tags render them as a documentation page with sections, anchors and a table of contents, and as release notes with a version, a date and an anchor per release. The files are the single source: replace a file and the page follows, with nothing retyped.
It is the plugin that renders the docs and changelog pages on multimediality.com, including this one.
Requirements
- ExpressionEngine 7.2 or later.
- PHP 8.1 or later with the
mbstringextension (standard on typical EE hosts). - Markdown is rendered with Michelf MarkdownExtra, which ExpressionEngine ships and uses for an add-on's Manual page in the control panel, so nothing else is installed.
What’s new in 1.0.0
First public release. Markdown Docs is the plugin that has rendered the documentation and changelog pages on multimediality.com since the site moved to ExpressionEngine, made general and packaged for the ExpressionEngine add-on store.
Added
- The manual tag
{exp:markdown_docs:manual}: renders aREADME.mdfrom an entry's file field (or a file id) as{manual_title},{manual_intro}, a{manual_toc}and a{manual_sections}pair with a heading, an anchor and a body per##heading;sections=renders a subset. - The changelog tag
{exp:markdown_docs:changelog}: renders aCHANGELOG.mdas one row per release with{release_version},{release_date}(formatted withdate_format=),{release_date_iso},{release_anchor},{release_notes},{release_count}and{release_total};limit=for the newest releases only. Headings that do not start with a version (## Unreleased, prose headings) are skipped with their content. - Rendering rules: Michelf MarkdownExtra (the parser ExpressionEngine uses for an add-on's Manual page); the
# Titleline captured and dropped;<!-- site:skip -->blocks and<style>blocks left out; GitHub-style ids on every h2, h3 and h4, de-duplicated within the document;{and}encoded so examples never run as tags. rewrite_linksrewrites every link under an origin to the site's URL, so a staging copy links to itself;table_classwraps tables for horizontal scrolling. Both take a tag parameter or a$config['markdown_docs']default.- Caching: renders are kept in ExpressionEngine's cache for thirty days, keyed on the file's id, modification time and size and on the rendering version and parameters, so replacing a file shows at once;
cache="no"bypasses it. - A CLI harness (
scripts/test_addon_cli.php) that boots a local ExpressionEngine install and runs the renderer over fixtures, plus the file lookup against a real entry when one is given.