Architecture
Markdown example
This entire page is a .md file — no PHP. Bolt rendered it to HTML with Parsedown and flowed it through the same layout pipeline a .php page uses.
A page with no PHP
This page lives at pages/markdown-example/index.md. Bolt read the frontmatter
above into $page['config'], rendered everything below the --- to HTML with
Parsedown, and wrapped it in the chosen header, layout, and footer — the same
pipeline a .php page flows through.
The frontmatter is not fenced: the Key: Value lines come first and a single
line that is exactly --- closes the block. Keys are normalized to lowercase with
spaces turned into underscores, so Page Title becomes page_title (which the
default layout reads for the heading above).
What Parsedown renders
- Bold, italic, and
inline code - Ordered and unordered lists
- Tables, blockquotes, and fenced code blocks
- Links, e.g. the Parsedown project
A fenced code block
$page['config']['layout'] = 'default';
ob_start();
// a .php page would build its markup here
$page['content'] = ob_get_clean();
A table
| Page type | Produced by | Best for |
|---|---|---|
.php |
output buffering | anything dynamic |
.md |
frontmatter + Parsedown | static prose |
Reach for Markdown when a page is mostly text and needs no logic. The moment you need data, conditionals, forms, or includes, use a
.phppage — both produce the same$pageshape, so switching a page's type later never changes its URL.
Resolution
A .php file at the same route (markdown-example.php or
markdown-example/index.php) would take over immediately, because PHP wins a tie
with Markdown. See the Page types doc for the full four-candidate resolution
order.