Migrating from Bridgetown

On this page

Migrating from Ruby-based Bridgetown to Rustyll? This guide will help you transition from Bridgetown’s modern Ruby architecture to Rustyll’s high-performance Rust-powered framework while preserving your content and components.

Installation

First, install Rustyll using Cargo (Rust’s package manager):

# Install Rust if you haven't already
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install Rustyll
cargo install rustyll

Automatic Migration

Rustyll provides a built-in migration tool for Bridgetown sites:

rustyll migrate --from bridgetown --source ./my-bridgetown-site --destination ./my-rustyll-site

This command will:

  1. Copy all content files
  2. Convert Bridgetown’s front matter to Rustyll format
  3. Transform Bridgetown’s Liquid/ERB templates to Rustyll’s Liquid templates
  4. Adjust configuration settings
  5. Generate a migration report

Directory Structure Differences

Bridgetown Rustyll Notes
src/ Root directory Content files move to root folder in Rustyll
src/_posts/ _posts/ Blog posts
src/_pages/ Root directory Static pages
src/_layouts/ _layouts/ Layout templates
src/_components/ _includes/ Component templates
src/_data/ _data/ Data files
bridgetown.config.yml _config.yml Configuration file
frontend/ assets/ Frontend assets
output/ _site/ Generated site

Content Conversion

Pages

Bridgetown pages convert to Rustyll pages:

# Bridgetown (src/_pages/about.md)
---
layout: page
title: About Us
permalink: /about/
---

This is the about page content.

Converts to:

# Rustyll (about.md)
---
layout: page
title: About Us
permalink: /about/
---

This is the about page content.

Posts

Bridgetown posts convert to Rustyll posts:

# Bridgetown (src/_posts/2023-01-15-hello-world.md)
---
layout: post
title: Hello World
date: 2023-01-15 12:00:00 -0500
categories:
  - announcements
---

This is my first blog post.

Converts to:

# Rustyll (_posts/2023-01-15-hello-world.md)
---
layout: post
title: Hello World
date: 2023-01-15 12:00:00 -0500
categories:
  - announcements
---

This is my first blog post.

Configuration Conversion

Bridgetown’s YAML configuration converts to Rustyll’s format:

# Bridgetown (bridgetown.config.yml)
url: https://example.com
title: My Bridgetown Site
timezone: America/New_York
permalink: pretty
template_engine: liquid

pagination:
  enabled: true
  per_page: 10

collections:
  projects:
    output: true
    permalink: /projects/:slug/

Converts to:

# Rustyll (_config.yml)
url: https://example.com
title: My Bridgetown Site
timezone: America/New_York
permalink: pretty

# Pagination
paginate: 10
paginate_path: "/page:num/"

# Collections
collections:
  projects:
    output: true
    permalink: /projects/:slug/

Template Conversion

Liquid Templates

Bridgetown Liquid templates are compatible with Rustyll with minor changes:

Bridgetown (Liquid) Rustyll (Liquid)
Page title variable Same page title variable
Loop through collection resources Loop through site posts
Render component with parameters Include partial with parameters
Data access with square brackets Same data access pattern

Components

Bridgetown components convert to Rustyll includes:

# Bridgetown (src/_components/shared/card.liquid)
<div class="card">
  <h3><!--  --></h3>
  <div class="content">
    <!-- <section class="docs-shell container"><div class="docs-mobile-nav"><details class="mobile-docs"><summary>Browse documentation <span aria-hidden="true">⌄</span></summary><div class="mobile-docs-content"><nav class="docs-links" aria-label="Documentation sections"><h2>Getting Started</h2><ul><li><a href="/docs/" >Quickstart</a></li><li><a href="/docs/installation/" >Installation</a></li><li><a href="/docs/rust-101/" >Rust 101 for Rustyll Users</a></li><li><a href="/docs/community/" >Community</a></li><li><a href="/docs/step-by-step/01-setup/" >Step by Step Tutorial</a></li></ul><h2>Build</h2><ul><li><a href="/docs/usage/" >Command Line Usage</a></li><li><a href="/docs/configuration/" >Configuration</a></li><li><a href="/docs/rendering-process/" >Rendering Process</a></li></ul><h2>Content</h2><ul><li><a href="/docs/pages/" >Pages</a></li><li><a href="/docs/posts/" >Posts</a></li><li><a href="/docs/front-matter/" >Front Matter</a></li><li><a href="/docs/collections/" >Collections</a></li><li><a href="/docs/datafiles/" >Data Files</a></li><li><a href="/docs/assets/" >Assets</a></li><li><a href="/docs/static-files/" >Static Files</a></li></ul><h2>Site Structure</h2><ul><li><a href="/docs/structure/" >Directory Structure</a></li><li><a href="/docs/liquid/" >Liquid</a></li><li><a href="/docs/variables/" >Variables</a></li><li><a href="/docs/includes/" >Includes</a></li><li><a href="/docs/layouts/" >Layouts</a></li><li><a href="/docs/permalinks/" >Permalinks</a></li><li><a href="/docs/themes/" >Themes</a></li><li><a href="/docs/pagination/" >Pagination</a></li></ul><h2>Guides</h2><ul><li><a href="/docs/plugins/" >Plugins</a></li><li><a href="/docs/migrations/" >Blog Migrations</a></li><li><a href="/docs/upgrading/" >Upgrading</a></li><li><a href="/docs/deployment/" >Deployment</a></li></ul><h2>Migrating</h2><ul><li><a href="/docs/migrating/" >Migrating to Rustyll</a></li><li><a href="/docs/migrating/assemble-to-rustyll/" aria-current="page">Migrating from Assemble</a></li><li><a href="/docs/migrating/bridgetown-to-rustyll/" >Migrating from Bridgetown</a></li><li><a href="/docs/migrating/cobalt-to-rustyll/" >Migrating from Cobalt</a></li><li><a href="/docs/migrating/docsy-to-rustyll/" >Migrating from Docsy</a></li><li><a href="/docs/migrating/eleventy-to-rustyll/" >Migrating from Eleventy</a></li><li><a href="/docs/migrating/fresh-to-rustyll/" >Migrating from Fresh</a></li><li><a href="/docs/migrating/gatsby-to-rustyll/" >Migrating from Gatsby</a></li><li><a href="/docs/migrating/gitbook-to-rustyll/" >Migrating from GitBook</a></li><li><a href="/docs/migrating/harp-to-rustyll/" >Migrating from Harp</a></li><li><a href="/docs/migrating/hugo-to-rustyll/" >Migrating from Hugo</a></li><li><a href="/docs/migrating/jekyll-to-rustyll/" >Migrating from Jekyll</a></li><li><a href="/docs/migrating/mdbook-to-rustyll/" >Migrating from mdBook</a></li><li><a href="/docs/migrating/middleman-to-rustyll/" >Migrating from Middleman</a></li><li><a href="/docs/migrating/mkdocs-to-rustyll/" >Migrating from MkDocs</a></li><li><a href="/docs/migrating/nanoc-to-rustyll/" >Migrating from Nanoc</a></li><li><a href="/docs/migrating/pelican-to-rustyll/" >Migrating from Pelican</a></li><li><a href="/docs/migrating/slate-to-rustyll/" >Migrating from Slate</a></li><li><a href="/docs/migrating/zola-to-rustyll/" >Migrating from Zola</a></li></ul></nav>
</div></details>
</div><div class="docs-grid"><aside class="docs-sidebar"><div class="docs-sidebar-inner"><a class="search-trigger" href="/search/" data-search-open>Search documentation <span aria-hidden="true">⌕</span></a><nav class="docs-links" aria-label="Documentation sections"><h2>Getting Started</h2><ul><li><a href="/docs/" >Quickstart</a></li><li><a href="/docs/installation/" >Installation</a></li><li><a href="/docs/rust-101/" >Rust 101 for Rustyll Users</a></li><li><a href="/docs/community/" >Community</a></li><li><a href="/docs/step-by-step/01-setup/" >Step by Step Tutorial</a></li></ul><h2>Build</h2><ul><li><a href="/docs/usage/" >Command Line Usage</a></li><li><a href="/docs/configuration/" >Configuration</a></li><li><a href="/docs/rendering-process/" >Rendering Process</a></li></ul><h2>Content</h2><ul><li><a href="/docs/pages/" >Pages</a></li><li><a href="/docs/posts/" >Posts</a></li><li><a href="/docs/front-matter/" >Front Matter</a></li><li><a href="/docs/collections/" >Collections</a></li><li><a href="/docs/datafiles/" >Data Files</a></li><li><a href="/docs/assets/" >Assets</a></li><li><a href="/docs/static-files/" >Static Files</a></li></ul><h2>Site Structure</h2><ul><li><a href="/docs/structure/" >Directory Structure</a></li><li><a href="/docs/liquid/" >Liquid</a></li><li><a href="/docs/variables/" >Variables</a></li><li><a href="/docs/includes/" >Includes</a></li><li><a href="/docs/layouts/" >Layouts</a></li><li><a href="/docs/permalinks/" >Permalinks</a></li><li><a href="/docs/themes/" >Themes</a></li><li><a href="/docs/pagination/" >Pagination</a></li></ul><h2>Guides</h2><ul><li><a href="/docs/plugins/" >Plugins</a></li><li><a href="/docs/migrations/" >Blog Migrations</a></li><li><a href="/docs/upgrading/" >Upgrading</a></li><li><a href="/docs/deployment/" >Deployment</a></li></ul><h2>Migrating</h2><ul><li><a href="/docs/migrating/" >Migrating to Rustyll</a></li><li><a href="/docs/migrating/assemble-to-rustyll/" aria-current="page">Migrating from Assemble</a></li><li><a href="/docs/migrating/bridgetown-to-rustyll/" >Migrating from Bridgetown</a></li><li><a href="/docs/migrating/cobalt-to-rustyll/" >Migrating from Cobalt</a></li><li><a href="/docs/migrating/docsy-to-rustyll/" >Migrating from Docsy</a></li><li><a href="/docs/migrating/eleventy-to-rustyll/" >Migrating from Eleventy</a></li><li><a href="/docs/migrating/fresh-to-rustyll/" >Migrating from Fresh</a></li><li><a href="/docs/migrating/gatsby-to-rustyll/" >Migrating from Gatsby</a></li><li><a href="/docs/migrating/gitbook-to-rustyll/" >Migrating from GitBook</a></li><li><a href="/docs/migrating/harp-to-rustyll/" >Migrating from Harp</a></li><li><a href="/docs/migrating/hugo-to-rustyll/" >Migrating from Hugo</a></li><li><a href="/docs/migrating/jekyll-to-rustyll/" >Migrating from Jekyll</a></li><li><a href="/docs/migrating/mdbook-to-rustyll/" >Migrating from mdBook</a></li><li><a href="/docs/migrating/middleman-to-rustyll/" >Migrating from Middleman</a></li><li><a href="/docs/migrating/mkdocs-to-rustyll/" >Migrating from MkDocs</a></li><li><a href="/docs/migrating/nanoc-to-rustyll/" >Migrating from Nanoc</a></li><li><a href="/docs/migrating/pelican-to-rustyll/" >Migrating from Pelican</a></li><li><a href="/docs/migrating/slate-to-rustyll/" >Migrating from Slate</a></li><li><a href="/docs/migrating/zola-to-rustyll/" >Migrating from Zola</a></li></ul></nav>
</div>
</aside><div class="docs-main"><div class="doc-content"><nav class="breadcrumbs" aria-label="Breadcrumb"><a href="/docs/">Documentation</a><span aria-hidden="true">/</span><span>Migrating from Assemble</span></nav><h1>Migrating from Assemble</h1><details class="mobile-page-toc"><summary>On this page</summary>

<nav class="page-toc " aria-label="On this page"><h2>On this page</h2><ul>

<li class="toc-level-2"><a href="#installation">Installation</a></li><li class="toc-level-2"><a href="#automatic-migration">Automatic Migration</a></li><li class="toc-level-2"><a href="#directory-structure-differences">Directory Structure Differences</a></li><li class="toc-level-2"><a href="#content-conversion">Content Conversion</a></li><li class="toc-level-2"><a href="#template-conversion">Template Conversion</a><ul><li class="toc-level-3"><a href="#handlebars-to-liquid">Handlebars to Liquid</a></li><li class="toc-level-3"><a href="#partials-to-includes">Partials to Includes</a></li></ul></li><li class="toc-level-2"><a href="#configuration-conversion">Configuration Conversion</a></li><li class="toc-level-2"><a href="#data-system-conversion">Data System Conversion</a></li><li class="toc-level-2"><a href="#helpers-to-filters-and-tags">Helpers to Filters and Tags</a></li><li class="toc-level-2"><a href="#collections">Collections</a></li><li class="toc-level-2"><a href="#performance-improvements">Performance Improvements</a></li><li class="toc-level-2"><a href="#troubleshooting-common-issues">Troubleshooting Common Issues</a><ul><li class="toc-level-3"><a href="#template-syntax-differences">Template Syntax Differences</a></li><li class="toc-level-3"><a href="#helper-functions">Helper Functions</a></li><li class="toc-level-3"><a href="#layout-system">Layout System</a></li></ul></li><li class="toc-level-2"><a href="#migration-checklist">Migration Checklist</a></li><li class="toc-level-2"><a href="#need-help">Need Help?</a></li>
</ul></nav>
</details><article class="prose prose-invert max-w-none"><p>Migrating from JavaScript-based Assemble to Rustyll? This guide will help you transition from Assemble’s component-based approach to Rustyll’s high-performance static site generation while preserving your content structure.</p>

<h2 id="installation">Installation</h2>

<p>First, install Rustyll using Cargo (Rust’s package manager):</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install Rust if you haven't already</span>
curl <span class="nt">--proto</span> <span class="s1">'=https'</span> <span class="nt">--tlsv1</span>.2 <span class="nt">-sSf</span> https://sh.rustup.rs | sh

<span class="c"># Install Rustyll</span>
cargo <span class="nb">install </span>rustyll
</code></pre></div></div>

<h2 id="automatic-migration">Automatic Migration</h2>

<p>Rustyll provides a built-in migration tool for Assemble sites:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rustyll migrate <span class="nt">--from</span> assemble <span class="nt">--source</span> ./my-assemble-site <span class="nt">--destination</span> ./my-rustyll-site
</code></pre></div></div>

<p>This command will:</p>
<ol>
  <li>Convert Assemble’s pages and templates to Rustyll format</li>
  <li>Transform Handlebars templates to Liquid templates</li>
  <li>Process YAML front matter</li>
  <li>Adapt Assemble’s data organization to Rustyll’s approach</li>
  <li>Generate a migration report</li>
</ol>

<h2 id="directory-structure-differences">Directory Structure Differences</h2>

<table>
  <thead>
    <tr>
      <th>Assemble</th>
      <th>Rustyll</th>
      <th>Notes</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">pages/</code></td>
      <td>Root directory</td>
      <td>Content pages</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">templates/</code></td>
      <td><code class="language-plaintext highlighter-rouge">_layouts/</code> and <code class="language-plaintext highlighter-rouge">_includes/</code></td>
      <td>Templates are split by purpose</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">partials/</code></td>
      <td><code class="language-plaintext highlighter-rouge">_includes/</code></td>
      <td>Reusable components</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">data/</code></td>
      <td><code class="language-plaintext highlighter-rouge">_data/</code></td>
      <td>Data files (similar functionality)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">dist/</code></td>
      <td><code class="language-plaintext highlighter-rouge">_site/</code></td>
      <td>Generated site</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">assets/</code></td>
      <td><code class="language-plaintext highlighter-rouge">assets/</code></td>
      <td>Static assets (same structure)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">Gruntfile.js</code></td>
      <td><code class="language-plaintext highlighter-rouge">_config.yml</code></td>
      <td>Configuration</td>
    </tr>
  </tbody>
</table>

<h2 id="content-conversion">Content Conversion</h2>

<p>Assemble pages with YAML front matter convert to Rustyll’s format:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Assemble (pages/about.hbs) --&gt;</span>
---
title: About Us
layout: default
---
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"about"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;h1&gt;</span>\{\{title\}\}<span class="nt">&lt;/h1&gt;</span>
  <span class="nt">&lt;p&gt;</span>This is the about page.<span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</code></pre></div></div>

<p>Converts to:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Rustyll (about.html) --&gt;</span>
---
title: About Us
layout: default
---
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"about"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;h1&gt;</span>Migrating from Assemble<span class="nt">&lt;/h1&gt;</span>
  <span class="nt">&lt;p&gt;</span>This is the about page.<span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</code></pre></div></div>

<h2 id="template-conversion">Template Conversion</h2>

<h3 id="handlebars-to-liquid">Handlebars to Liquid</h3>

<p>Assemble’s Handlebars templates convert to Rustyll’s Liquid templates:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Assemble (templates/layouts/default.hbs) --&gt;</span>
<span class="cp">&lt;!DOCTYPE html&gt;</span>
<span class="nt">&lt;html&gt;</span>
<span class="nt">&lt;head&gt;</span>
  <span class="nt">&lt;title&gt;</span>\{\{title\}\}<span class="nt">&lt;/title&gt;</span>
  <span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">"stylesheet"</span> <span class="na">href=</span><span class="s">"\{\{assets\}\}/css/style.css"</span><span class="nt">&gt;</span>
<span class="nt">&lt;/head&gt;</span>
<span class="nt">&lt;body&gt;</span>
  <span class="nt">&lt;header&gt;</span>
    \{\{&gt; header\}\}
  <span class="nt">&lt;/header&gt;</span>
  <span class="nt">&lt;main&gt;</span>
    \{\{&gt; body\}\}
  <span class="nt">&lt;/main&gt;</span>
  <span class="nt">&lt;footer&gt;</span>
    \{\{&gt; footer\}\}
  <span class="nt">&lt;/footer&gt;</span>
<span class="nt">&lt;/body&gt;</span>
<span class="nt">&lt;/html&gt;</span>
</code></pre></div></div>

<p>Converts to:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Rustyll (_layouts/default.html) --&gt;</span>
<span class="cp">&lt;!DOCTYPE html&gt;</span>
<span class="nt">&lt;html&gt;</span>
<span class="nt">&lt;head&gt;</span>
  <span class="nt">&lt;title&gt;</span><span class="c">&lt;!-- Migrating from Assemble --&gt;</span><span class="nt">&lt;/title&gt;</span>
  <span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">"stylesheet"</span> <span class="na">href=</span><span class="s">"&lt;!-- /assets/css/style.css --&gt;"</span><span class="nt">&gt;</span>
<span class="nt">&lt;/head&gt;</span>
<span class="nt">&lt;body&gt;</span>
  <span class="nt">&lt;header&gt;</span>
    <span class="c">&lt;!-- &lt;header class="site-header" id="site-header"&gt;
  &lt;div class="container header-inner"&gt;
    &lt;div class="header-brand"&gt;
      &lt;a href="/" class="brand " aria-label="Rustyll home"&gt;&lt;img class="brand-original" src="/img/logo-2x.png" alt="Rustyll" width="113" height="55"&gt;&lt;/a&gt;

      &lt;span class="header-family"&gt;BETTER WEB&lt;/span&gt;
    &lt;/div&gt;
    &lt;nav class="desktop-nav" aria-label="Main navigation"&gt;
      &lt;a href="/" &gt;Home&lt;/a&gt;&lt;a href="/docs/" aria-current="page"&gt;Docs&lt;/a&gt;&lt;a href="/resources/" &gt;Resources&lt;/a&gt;&lt;a href="/showcase/" &gt;Showcase&lt;/a&gt;&lt;a href="/news/" &gt;News&lt;/a&gt;
    &lt;/nav&gt;
    &lt;div class="header-actions"&gt;
      &lt;a href="/search/" class="search-trigger" data-search-open aria-label="Search documentation"&gt;&lt;svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"&gt;&lt;circle cx="10.5" cy="10.5" r="6.5"/&gt;&lt;path d="m16 16 5 5"/&gt;&lt;/svg&gt;&lt;span&gt;Search&lt;/span&gt;&lt;kbd&gt;⌘ K&lt;/kbd&gt;&lt;/a&gt;
      &lt;a class="header-github" href="https://github.com/betterwebinit/rustyll"&gt;GitHub &lt;span aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;
      &lt;a class="header-start" href="/docs/"&gt;Get started &lt;span aria-hidden="true"&gt;→&lt;/span&gt;&lt;/a&gt;
    &lt;/div&gt;
    &lt;button type="button" class="menu-toggle" id="mobile-menu-button" aria-label="Open navigation menu" aria-expanded="false" aria-controls="mobile-menu"&gt;&lt;span&gt;Menu&lt;/span&gt;&lt;svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor"&gt;&lt;path d="M4 7h16M4 12h16M4 17h16"/&gt;&lt;/svg&gt;&lt;/button&gt;
  &lt;/div&gt;
  &lt;nav id="mobile-menu" class="mobile-menu" aria-label="Mobile navigation" hidden&gt;&lt;div class="container"&gt;
    &lt;a href="/" &gt;Home&lt;/a&gt;&lt;a href="/docs/" aria-current="page"&gt;Docs&lt;/a&gt;&lt;a href="/resources/" &gt;Resources&lt;/a&gt;&lt;a href="/showcase/" &gt;Showcase&lt;/a&gt;&lt;a href="/news/" &gt;News&lt;/a&gt;
    &lt;a href="/search/" data-search-open&gt;Search documentation&lt;/a&gt;
    &lt;a href="https://github.com/betterwebinit/rustyll"&gt;GitHub ↗&lt;/a&gt;
  &lt;/div&gt;&lt;/nav&gt;
  &lt;noscript&gt;&lt;nav class="no-js-nav container" aria-label="Navigation"&gt;&lt;a href="/"&gt;Home&lt;/a&gt;&lt;a href="/docs/"&gt;Docs&lt;/a&gt;&lt;a href="/resources/"&gt;Resources&lt;/a&gt;&lt;a href="/showcase/"&gt;Showcase&lt;/a&gt;&lt;a href="/news/"&gt;News&lt;/a&gt;&lt;/nav&gt;&lt;/noscript&gt;
&lt;/header&gt;

 --&gt;</span>
  <span class="nt">&lt;/header&gt;</span>
  <span class="nt">&lt;main&gt;</span>
    <span class="c">&lt;!-- &lt;section class="docs-shell container"&gt;&lt;div class="docs-mobile-nav"&gt;&lt;details class="mobile-docs"&gt;&lt;summary&gt;Browse documentation &lt;span aria-hidden="true"&gt;⌄&lt;/span&gt;&lt;/summary&gt;&lt;div class="mobile-docs-content"&gt;&lt;nav class="docs-links" aria-label="Documentation sections"&gt;&lt;h2&gt;Getting Started&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/" &gt;Quickstart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/installation/" &gt;Installation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/rust-101/" &gt;Rust 101 for Rustyll Users&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/community/" &gt;Community&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/step-by-step/01-setup/" &gt;Step by Step Tutorial&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Build&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/usage/" &gt;Command Line Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/configuration/" &gt;Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/rendering-process/" &gt;Rendering Process&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Content&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/pages/" &gt;Pages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/posts/" &gt;Posts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/front-matter/" &gt;Front Matter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/collections/" &gt;Collections&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/datafiles/" &gt;Data Files&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/assets/" &gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/static-files/" &gt;Static Files&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Site Structure&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/structure/" &gt;Directory Structure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/liquid/" &gt;Liquid&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/variables/" &gt;Variables&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/includes/" &gt;Includes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/layouts/" &gt;Layouts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/permalinks/" &gt;Permalinks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/themes/" &gt;Themes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/pagination/" &gt;Pagination&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Guides&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/plugins/" &gt;Plugins&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrations/" &gt;Blog Migrations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/upgrading/" &gt;Upgrading&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/deployment/" &gt;Deployment&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Migrating&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/migrating/" &gt;Migrating to Rustyll&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/assemble-to-rustyll/" &gt;Migrating from Assemble&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/bridgetown-to-rustyll/" &gt;Migrating from Bridgetown&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/cobalt-to-rustyll/" &gt;Migrating from Cobalt&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/docsy-to-rustyll/" &gt;Migrating from Docsy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/eleventy-to-rustyll/" &gt;Migrating from Eleventy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/fresh-to-rustyll/" &gt;Migrating from Fresh&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/gatsby-to-rustyll/" &gt;Migrating from Gatsby&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/gitbook-to-rustyll/" &gt;Migrating from GitBook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/harp-to-rustyll/" &gt;Migrating from Harp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/hugo-to-rustyll/" &gt;Migrating from Hugo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/jekyll-to-rustyll/" &gt;Migrating from Jekyll&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/mdbook-to-rustyll/" &gt;Migrating from mdBook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/middleman-to-rustyll/" &gt;Migrating from Middleman&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/mkdocs-to-rustyll/" &gt;Migrating from MkDocs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/nanoc-to-rustyll/" &gt;Migrating from Nanoc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/pelican-to-rustyll/" &gt;Migrating from Pelican&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/slate-to-rustyll/" &gt;Migrating from Slate&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/zola-to-rustyll/" &gt;Migrating from Zola&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/nav&gt;
&lt;/div&gt;&lt;/details&gt;
&lt;/div&gt;&lt;div class="docs-grid"&gt;&lt;aside class="docs-sidebar"&gt;&lt;div class="docs-sidebar-inner"&gt;&lt;a class="search-trigger" href="/search/" data-search-open&gt;Search documentation &lt;span aria-hidden="true"&gt;⌕&lt;/span&gt;&lt;/a&gt;&lt;nav class="docs-links" aria-label="Documentation sections"&gt;&lt;h2&gt;Getting Started&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/" &gt;Quickstart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/installation/" &gt;Installation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/rust-101/" &gt;Rust 101 for Rustyll Users&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/community/" &gt;Community&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/step-by-step/01-setup/" &gt;Step by Step Tutorial&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Build&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/usage/" &gt;Command Line Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/configuration/" &gt;Configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/rendering-process/" &gt;Rendering Process&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Content&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/pages/" &gt;Pages&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/posts/" &gt;Posts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/front-matter/" &gt;Front Matter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/collections/" &gt;Collections&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/datafiles/" &gt;Data Files&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/assets/" &gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/static-files/" &gt;Static Files&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Site Structure&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/structure/" &gt;Directory Structure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/liquid/" &gt;Liquid&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/variables/" &gt;Variables&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/includes/" &gt;Includes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/layouts/" &gt;Layouts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/permalinks/" &gt;Permalinks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/themes/" &gt;Themes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/pagination/" &gt;Pagination&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Guides&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/plugins/" &gt;Plugins&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrations/" &gt;Blog Migrations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/upgrading/" &gt;Upgrading&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/deployment/" &gt;Deployment&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Migrating&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="/docs/migrating/" &gt;Migrating to Rustyll&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/assemble-to-rustyll/" &gt;Migrating from Assemble&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/bridgetown-to-rustyll/" &gt;Migrating from Bridgetown&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/cobalt-to-rustyll/" &gt;Migrating from Cobalt&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/docsy-to-rustyll/" &gt;Migrating from Docsy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/eleventy-to-rustyll/" &gt;Migrating from Eleventy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/fresh-to-rustyll/" &gt;Migrating from Fresh&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/gatsby-to-rustyll/" &gt;Migrating from Gatsby&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/gitbook-to-rustyll/" &gt;Migrating from GitBook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/harp-to-rustyll/" &gt;Migrating from Harp&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/hugo-to-rustyll/" &gt;Migrating from Hugo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/jekyll-to-rustyll/" &gt;Migrating from Jekyll&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/mdbook-to-rustyll/" &gt;Migrating from mdBook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/middleman-to-rustyll/" &gt;Migrating from Middleman&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/mkdocs-to-rustyll/" &gt;Migrating from MkDocs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/nanoc-to-rustyll/" &gt;Migrating from Nanoc&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/pelican-to-rustyll/" &gt;Migrating from Pelican&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/slate-to-rustyll/" &gt;Migrating from Slate&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="/docs/migrating/zola-to-rustyll/" &gt;Migrating from Zola&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/nav&gt;
&lt;/div&gt;
&lt;/aside&gt;&lt;div class="docs-main"&gt;&lt;div class="doc-content"&gt;&lt;nav class="breadcrumbs" aria-label="Breadcrumb"&gt;&lt;a href="/docs/"&gt;Documentation&lt;/a&gt;&lt;span aria-hidden="true"&gt;/&lt;/span&gt;&lt;span&gt;Markdown 101&lt;/span&gt;&lt;/nav&gt;&lt;h1&gt;Markdown 101&lt;/h1&gt;&lt;details class="mobile-page-toc"&gt;&lt;summary&gt;On this page&lt;/summary&gt;

&lt;nav class="page-toc " aria-label="On this page"&gt;&lt;h2&gt;On this page&lt;/h2&gt;&lt;ul&gt;

&lt;li class="toc-level-2"&gt;&lt;a href="#basic-markdown-syntax"&gt;Basic Markdown Syntax&lt;/a&gt;&lt;ul&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#headers"&gt;Headers&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#emphasis"&gt;Emphasis&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#lists"&gt;Lists&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#images"&gt;Images&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#links"&gt;Links&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#blockquotes"&gt;Blockquotes&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#horizontal-rules"&gt;Horizontal Rules&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#code"&gt;Code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#markdown-in-rustyll"&gt;Markdown in Rustyll&lt;/a&gt;&lt;ul&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#front-matter"&gt;Front Matter&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#enhanced-markdown-features"&gt;Enhanced Markdown Features&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#markdown-processors"&gt;Markdown Processors&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#advanced-markdown-features"&gt;Advanced Markdown Features&lt;/a&gt;&lt;ul&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#markdown-includes"&gt;Markdown Includes&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#conditional-markdown"&gt;Conditional Markdown&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#markdown-variables"&gt;Markdown Variables&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#performance"&gt;Performance&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#migration-from-jekyll"&gt;Migration from Jekyll&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/nav&gt;
&lt;/details&gt;&lt;article class="prose prose-invert max-w-none"&gt;&lt;p&gt;Markdown is a lightweight markup language with plain text formatting syntax that Rustyll supports out of the box. This guide provides a quick introduction to Markdown for creating content in your Rustyll site.&lt;/p&gt;

&lt;h2 id="basic-markdown-syntax"&gt;Basic Markdown Syntax&lt;/h2&gt;

&lt;h3 id="headers"&gt;Headers&lt;/h3&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="gh"&gt;# H1&lt;/span&gt;
&lt;span class="gu"&gt;## H2&lt;/span&gt;
&lt;span class="gu"&gt;### H3&lt;/span&gt;
&lt;span class="gu"&gt;#### H4&lt;/span&gt;
&lt;span class="gu"&gt;##### H5&lt;/span&gt;
&lt;span class="gu"&gt;###### H6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="emphasis"&gt;Emphasis&lt;/h3&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="ge"&gt;*This text will be italic*&lt;/span&gt;
&lt;span class="ge"&gt;_This will also be italic_&lt;/span&gt;

&lt;span class="gs"&gt;**This text will be bold**&lt;/span&gt;
&lt;span class="gs"&gt;__This will also be bold__&lt;/span&gt;

&lt;span class="ge"&gt;_You **can** combine them_&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="lists"&gt;Lists&lt;/h3&gt;

&lt;h4 id="unordered"&gt;Unordered&lt;/h4&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="p"&gt;*&lt;/span&gt; Item 1
&lt;span class="p"&gt;*&lt;/span&gt; Item 2
&lt;span class="p"&gt;  *&lt;/span&gt; Item 2a
&lt;span class="p"&gt;  *&lt;/span&gt; Item 2b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id="ordered"&gt;Ordered&lt;/h4&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="p"&gt;1.&lt;/span&gt; Item 1
&lt;span class="p"&gt;2.&lt;/span&gt; Item 2
&lt;span class="p"&gt;3.&lt;/span&gt; Item 3
&lt;span class="p"&gt;   1.&lt;/span&gt; Item 3a
&lt;span class="p"&gt;   2.&lt;/span&gt; Item 3b
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="images"&gt;Images&lt;/h3&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;Alt Text&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="links"&gt;Links&lt;/h3&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Link Text&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="blockquotes"&gt;Blockquotes&lt;/h3&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="gt"&gt;&amp;gt; This is a blockquote.&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; &lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; This is the second paragraph in the blockquote.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="horizontal-rules"&gt;Horizontal Rules&lt;/h3&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="p"&gt;---
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="code"&gt;Code&lt;/h3&gt;

&lt;p&gt;Inline code uses single backticks:&lt;/p&gt;
&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;Use the &lt;span class="sb"&gt;`print()`&lt;/span&gt; function
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Code blocks use triple backticks with optional language specification:&lt;/p&gt;
&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;rust
&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, world!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;```&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id="markdown-in-rustyll"&gt;Markdown in Rustyll&lt;/h2&gt;

&lt;p&gt;Rustyll uses Markdown for content files like posts and pages. When you create a new file with a &lt;code class="language-plaintext highlighter-rouge"&gt;.md&lt;/code&gt; or &lt;code class="language-plaintext highlighter-rouge"&gt;.markdown&lt;/code&gt; extension, Rustyll will convert it to HTML during the build process.&lt;/p&gt;

&lt;h3 id="front-matter"&gt;Front Matter&lt;/h3&gt;

&lt;p&gt;Rustyll pages and posts require front matter. This is a section at the top of your markdown file that specifies metadata:&lt;/p&gt;

&lt;div class="language-yaml highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;post&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;First&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Post"&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2023-06-15&lt;/span&gt;
&lt;span class="na"&gt;categories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tutorial&lt;/span&gt;
&lt;span class="na"&gt;parallel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;           &lt;span class="c1"&gt;# Enable parallel processing for this document&lt;/span&gt;
&lt;span class="na"&gt;render_priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;       &lt;span class="c1"&gt;# Higher priority in the build queue (lower number = higher priority)&lt;/span&gt;
&lt;span class="na"&gt;cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aggressive&lt;/span&gt;        &lt;span class="c1"&gt;# Cache this document aggressively&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="enhanced-markdown-features"&gt;Enhanced Markdown Features&lt;/h3&gt;

&lt;p&gt;Rustyll enhances standard Markdown with several features:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Parallel Processing&lt;/strong&gt;: Markdown files can be processed in parallel for speed&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Syntax Highlighting&lt;/strong&gt;: Code blocks are automatically highlighted using a fast Rust-based highlighter&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;: Generate a TOC with &lt;code class="language-plaintext highlighter-rouge"&gt;{:toc}&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Custom Attributes&lt;/strong&gt;: Add classes, IDs and other attributes to elements&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Math Rendering&lt;/strong&gt;: Support for LaTeX math using &lt;code class="language-plaintext highlighter-rouge"&gt;$$&lt;/code&gt; delimiters&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Diagrams&lt;/strong&gt;: Support for Mermaid and other diagram formats&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;{: .warning}
&lt;span class="gt"&gt;&amp;gt; This is a warning message.&lt;/span&gt;
&lt;span class="p"&gt;
*&lt;/span&gt; TOC
{:toc}

&lt;span class="gh"&gt;# Header with ID {#custom-id}&lt;/span&gt;

$$
&lt;span class="se"&gt;\i&lt;/span&gt;nt_0^1 x^2 dx = &lt;span class="se"&gt;\f&lt;/span&gt;rac{1}{3}
$$

&lt;span class="p"&gt;```&lt;/span&gt;&lt;span class="nl"&gt;mermaid
&lt;/span&gt;&lt;span class="sb"&gt;graph TD;
    A--&amp;gt;B;
    A--&amp;gt;C;
    B--&amp;gt;D;
    C--&amp;gt;D;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class="language-plaintext highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;
### Performance Optimizations

Rustyll provides several Markdown-specific performance optimizations:

```yaml
# _config.yml
markdown:
  parallel: true           # Process markdown in parallel
  cache: true              # Cache rendered markdown
  lazy_images: true        # Lazy load images in markdown
  incremental: true        # Only reprocess changed markdown files
  precompile_headers: true # Precompile headers for faster processing
  threads: auto            # Number of threads for markdown processing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;You can also enable parallel processing for individual markdown files with front matter:&lt;/p&gt;

&lt;div class="language-yaml highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;My&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Document"&lt;/span&gt;
&lt;span class="na"&gt;parallel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;render_priority&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="markdown-processors"&gt;Markdown Processors&lt;/h3&gt;

&lt;p&gt;Rustyll uses &lt;a href="https://github.com/kivikakk/comrak"&gt;Comrak&lt;/a&gt; (a CommonMark parser written in Rust) by default, which offers significant performance improvements over Ruby-based Markdown processors.&lt;/p&gt;

&lt;p&gt;You can configure the Markdown processor in your &lt;code class="language-plaintext highlighter-rouge"&gt;_config.yml&lt;/code&gt;:&lt;/p&gt;

&lt;div class="language-yaml highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;&lt;span class="na"&gt;markdown&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;comrak&lt;/span&gt;
&lt;span class="na"&gt;comrak&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;hardbreaks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;smart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;github_pre_lang&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;extensions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;strikethrough&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;autolink&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;tasklist&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;superscript&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;header_ids&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;footnotes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id="advanced-markdown-features"&gt;Advanced Markdown Features&lt;/h2&gt;

&lt;p&gt;Rustyll supports several advanced Markdown features:&lt;/p&gt;

&lt;h3 id="markdown-includes"&gt;Markdown Includes&lt;/h3&gt;

&lt;p&gt;Include other markdown files directly:&lt;/p&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;{% include_markdown _includes/snippet.md %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="conditional-markdown"&gt;Conditional Markdown&lt;/h3&gt;

&lt;p&gt;Show different content based on configuration:&lt;/p&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;{% if site.show_advanced_features %}
&lt;span class="gh"&gt;# Advanced Features&lt;/span&gt;
This content is only shown if advanced features are enabled.
{% endif %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id="markdown-variables"&gt;Markdown Variables&lt;/h3&gt;

&lt;p&gt;Use site variables in your markdown:&lt;/p&gt;

&lt;div class="language-markdown highlighter-rouge"&gt;&lt;div class="highlight"&gt;&lt;pre class="highlight"&gt;&lt;code&gt;This site has {{ site.posts.size }} posts.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;

&lt;p&gt;Rustyll’s Markdown processing is significantly faster than Jekyll’s due to:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Use of Comrak, a fast Rust-based CommonMark parser&lt;/li&gt;
  &lt;li&gt;Parallel processing of multiple Markdown files&lt;/li&gt;
  &lt;li&gt;Incremental builds that only reprocess changed files&lt;/li&gt;
  &lt;li&gt;Document-level caching&lt;/li&gt;
  &lt;li&gt;Header precompilation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means that even sites with hundreds of Markdown files can rebuild in milliseconds instead of seconds or minutes.&lt;/p&gt;

&lt;p&gt;For the best performance:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Enable parallel Markdown processing in your config&lt;/li&gt;
  &lt;li&gt;Use front matter &lt;code class="language-plaintext highlighter-rouge"&gt;parallel: true&lt;/code&gt; for complex documents&lt;/li&gt;
  &lt;li&gt;Set appropriate &lt;code class="language-plaintext highlighter-rouge"&gt;render_priority&lt;/code&gt; for critical pages&lt;/li&gt;
  &lt;li&gt;Use &lt;code class="language-plaintext highlighter-rouge"&gt;cache: aggressive&lt;/code&gt; for documents that rarely change&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id="migration-from-jekyll"&gt;Migration from Jekyll&lt;/h2&gt;

&lt;p&gt;Rustyll’s Markdown processing is fully compatible with Jekyll’s, so your existing Markdown content will work without changes. However, to take advantage of Rustyll’s performance optimizations, consider adding the Rustyll-specific front matter options mentioned above.&lt;/p&gt;
&lt;/article&gt;

&lt;div class="doc-feedback"&gt;&lt;p&gt;Help keep these docs useful.&lt;/p&gt;



&lt;a href="https://github.com/betterwebinit/rustyll-website/edit/main/_docs/markdown-101.md" 
   target="_blank" 
   rel="noopener noreferrer"
   class="inline-flex items-center gap-2 text-sm text-gray-400 hover:text-rust transition-colors duration-200 group px-3 py-1.5 bg-black/20 rounded-md border border-gray-800 hover:border-rust/30 "&gt;
  &lt;svg class="w-4 h-4 transition-transform duration-200 group-hover:rotate-12" fill="none" stroke="currentColor" viewBox="0 0 24 24"&gt;
    &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"&gt;&lt;/path&gt;
  &lt;/svg&gt;
  &lt;span&gt;Improve this page&lt;/span&gt;
&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;aside class="docs-toc"&gt;

&lt;nav class="page-toc " aria-label="On this page"&gt;&lt;h2&gt;On this page&lt;/h2&gt;&lt;ul&gt;

&lt;li class="toc-level-2"&gt;&lt;a href="#basic-markdown-syntax"&gt;Basic Markdown Syntax&lt;/a&gt;&lt;ul&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#headers"&gt;Headers&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#emphasis"&gt;Emphasis&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#lists"&gt;Lists&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#images"&gt;Images&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#links"&gt;Links&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#blockquotes"&gt;Blockquotes&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#horizontal-rules"&gt;Horizontal Rules&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#code"&gt;Code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#markdown-in-rustyll"&gt;Markdown in Rustyll&lt;/a&gt;&lt;ul&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#front-matter"&gt;Front Matter&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#enhanced-markdown-features"&gt;Enhanced Markdown Features&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#markdown-processors"&gt;Markdown Processors&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#advanced-markdown-features"&gt;Advanced Markdown Features&lt;/a&gt;&lt;ul&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#markdown-includes"&gt;Markdown Includes&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#conditional-markdown"&gt;Conditional Markdown&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-3"&gt;&lt;a href="#markdown-variables"&gt;Markdown Variables&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#performance"&gt;Performance&lt;/a&gt;&lt;/li&gt;&lt;li class="toc-level-2"&gt;&lt;a href="#migration-from-jekyll"&gt;Migration from Jekyll&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/nav&gt;
&lt;/aside&gt;&lt;/div&gt;&lt;/section&gt;
 --&gt;</span>
  <span class="nt">&lt;/main&gt;</span>
  <span class="nt">&lt;footer&gt;</span>
    <span class="c">&lt;!-- &lt;footer class="site-footer"&gt;
  &lt;div class="container"&gt;
    &lt;div class="footer-grid"&gt;
      &lt;div class="footer-updates"&gt;
        &lt;div&gt;
          &lt;span class="footer-kicker"&gt;KEEP BUILDING&lt;/span&gt;
          &lt;h2&gt;Stay in the loop.&lt;/h2&gt;
          &lt;p&gt;Follow Rustyll releases and project news in the way that works for you.&lt;/p&gt;
        &lt;/div&gt;
        &lt;div class="footer-update-actions"&gt;
          &lt;a class="footer-update-primary" href="/feed.xml"&gt;Follow the RSS feed &lt;span aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;
          &lt;a class="footer-update-secondary" href="https://github.com/betterwebinit/rustyll/releases"&gt;GitHub releases &lt;span aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;div class="footer-brand"&gt;
        &lt;div class="footer-brand-heading"&gt;&lt;a href="/" class="brand " aria-label="Rustyll home"&gt;&lt;img class="brand-original" src="/img/logo-2x.png" alt="Rustyll" width="113" height="55"&gt;&lt;/a&gt;
&lt;span&gt;BETTER WEB PROJECT&lt;/span&gt;&lt;/div&gt;
        &lt;p&gt;A static site generator written in Rust. Built for a faster, more open web.&lt;/p&gt;
        &lt;div class="footer-socials" aria-label="Follow Rustyll"&gt;
          &lt;a href="https://github.com/betterwebinit/rustyll" aria-label="Rustyll on GitHub"&gt;&lt;svg aria-hidden="true" viewBox="0 0 24 24" fill="currentColor"&gt;&lt;path d="M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.4 7.86 10.92.58.1.79-.25.79-.56 0-.28-.01-1.02-.02-2-3.2.7-3.88-1.54-3.88-1.54-.52-1.33-1.28-1.69-1.28-1.69-1.05-.72.08-.71.08-.71 1.16.08 1.77 1.19 1.77 1.19 1.03 1.77 2.7 1.26 3.36.96.1-.75.4-1.26.73-1.55-2.55-.29-5.23-1.28-5.23-5.69 0-1.26.45-2.29 1.19-3.1-.12-.29-.52-1.46.11-3.05 0 0 .97-.31 3.17 1.18a11 11 0 0 1 5.77 0c2.2-1.49 3.17-1.18 3.17-1.18.63 1.59.23 2.76.11 3.05.74.81 1.19 1.84 1.19 3.1 0 4.42-2.69 5.39-5.25 5.67.41.35.78 1.04.78 2.1 0 1.52-.01 2.74-.01 3.11 0 .31.21.67.8.56A11.51 11.51 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"/&gt;&lt;/svg&gt;&lt;/a&gt;
          &lt;a href="/feed.xml" aria-label="Rustyll RSS feed"&gt;&lt;svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"&gt;&lt;path d="M4 5a15 15 0 0 1 15 15M4 11a9 9 0 0 1 9 9"/&gt;&lt;circle cx="5" cy="19" r="1" fill="currentColor"/&gt;&lt;/svg&gt;&lt;/a&gt;
          &lt;a href="https://better-web.org" aria-label="Better Web"&gt;&lt;svg aria-hidden="true" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"&gt;&lt;circle cx="12" cy="12" r="9"/&gt;&lt;path d="M3 12h18M12 3c-3 3-4 6-4 9s1 6 4 9m0-18c3 3 4 6 4 9s-1 6-4 9"/&gt;&lt;/svg&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;
      &lt;nav class="footer-links" aria-label="Build with Rustyll"&gt;
        &lt;h2&gt;BUILD WITH RUSTYLL&lt;/h2&gt;
        &lt;a href="/docs/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Documentation&lt;/a&gt;
        &lt;a href="/tutorials/home/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Tutorials&lt;/a&gt;
        &lt;a href="/docs/migrating/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Migration guides&lt;/a&gt;
        &lt;a href="/docs/deployment/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Deployment&lt;/a&gt;
        &lt;a href="/resources/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Resources&lt;/a&gt;
      &lt;/nav&gt;
      &lt;nav class="footer-links" aria-label="The project"&gt;
        &lt;h2&gt;THE PROJECT&lt;/h2&gt;
        &lt;a href="/news/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;News &amp;amp; releases&lt;/a&gt;
        &lt;a href="/docs/contributing/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Contributing&lt;/a&gt;
        &lt;a href="/docs/support/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Support&lt;/a&gt;
        &lt;a href="/philosophy/"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Philosophy&lt;/a&gt;
        &lt;a href="https://better-web.org"&gt;&lt;span aria-hidden="true"&gt;↗&lt;/span&gt;Better Web&lt;/a&gt;
      &lt;/nav&gt;
    &lt;/div&gt;
    &lt;div class="footer-bottom"&gt;&lt;p&gt;© 2026 Rustyll. Part of the &lt;a href="https://better-web.org"&gt;Better Web initiative&lt;/a&gt;.&lt;/p&gt;&lt;a href="#top"&gt;Back to top ↑&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/footer&gt;

 --&gt;</span>
  <span class="nt">&lt;/footer&gt;</span>
<span class="nt">&lt;/body&gt;</span>
<span class="nt">&lt;/html&gt;</span>
</code></pre></div></div>

<h3 id="partials-to-includes">Partials to Includes</h3>

<p>Assemble’s partials convert to Rustyll includes:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Assemble (partials/header.hbs) --&gt;</span>
<span class="nt">&lt;nav&gt;</span>
  \{\{#each pages\}\}
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"\{\{this.url\}\}"</span> <span class="na">class=</span><span class="s">"\{\{#if this.isActive\}\}active\{\{/if\}\}"</span><span class="nt">&gt;</span>\{\{this.title\}\}<span class="nt">&lt;/a&gt;</span>
  \{\{/each\}\}
<span class="nt">&lt;/nav&gt;</span>
</code></pre></div></div>

<p>Converts to:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Rustyll (_includes/header.html) --&gt;</span>
<span class="nt">&lt;nav&gt;</span>
  <span class="c">&lt;!-- Liquid for loop starts --&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/404.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Page not found<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/github.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/issues.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/news/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>News<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/philosophy/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Philosophy<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/news/releases/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Releases<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/resources/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Resources<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/rustyllconf/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Talks and community learning<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/search/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Search<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/search.json"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/showcase/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>Community showcase<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/team/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;</span>The people behind Rustyll<span class="nt">&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/conduct/index.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/help/index.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/conduct/index.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/configuration/webrick/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/deployment-methods/index.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/frontmatter/index.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/home/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/quickstart/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/extras/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/windows/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/templates/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/drafts/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/step-by-step/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/tutorials/index.html"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/resources/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/docs/sites/"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/redirects.json"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/feed/release.xml"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/feed.xml"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/sitemap.xml"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">"/robots.txt"</span> <span class="na">class=</span><span class="s">""</span><span class="nt">&gt;&lt;/a&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
  <span class="c">&lt;!-- Liquid for loop ends --&gt;</span>
<span class="nt">&lt;/nav&gt;</span>
</code></pre></div></div>

<h2 id="configuration-conversion">Configuration Conversion</h2>

<p>Assemble’s Grunt configuration converts to Rustyll’s YAML:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// Assemble (Gruntfile.js)</span>
<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">grunt</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">grunt</span><span class="p">.</span><span class="nf">initConfig</span><span class="p">({</span>
    <span class="na">assemble</span><span class="p">:</span> <span class="p">{</span>
      <span class="na">options</span><span class="p">:</span> <span class="p">{</span>
        <span class="na">site</span><span class="p">:</span> <span class="p">{</span>
          <span class="na">title</span><span class="p">:</span> <span class="dl">'</span><span class="s1">My Assemble Site</span><span class="dl">'</span><span class="p">,</span>
          <span class="na">description</span><span class="p">:</span> <span class="dl">'</span><span class="s1">A website built with Assemble</span><span class="dl">'</span>
        <span class="p">},</span>
        <span class="na">layouts</span><span class="p">:</span> <span class="dl">'</span><span class="s1">templates/layouts</span><span class="dl">'</span><span class="p">,</span>
        <span class="na">partials</span><span class="p">:</span> <span class="dl">'</span><span class="s1">templates/partials</span><span class="dl">'</span><span class="p">,</span>
        <span class="na">data</span><span class="p">:</span> <span class="dl">'</span><span class="s1">data/*.{json,yml}</span><span class="dl">'</span>
      <span class="p">},</span>
      <span class="na">site</span><span class="p">:</span> <span class="p">{</span>
        <span class="na">files</span><span class="p">:</span> <span class="p">[</span>
          <span class="p">{</span> <span class="na">expand</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span> <span class="na">cwd</span><span class="p">:</span> <span class="dl">'</span><span class="s1">pages</span><span class="dl">'</span><span class="p">,</span> <span class="na">src</span><span class="p">:</span> <span class="dl">'</span><span class="s1">**/*.hbs</span><span class="dl">'</span><span class="p">,</span> <span class="na">dest</span><span class="p">:</span> <span class="dl">'</span><span class="s1">dist/</span><span class="dl">'</span> <span class="p">}</span>
        <span class="p">]</span>
      <span class="p">}</span>
    <span class="p">}</span>
  <span class="p">});</span>
  
  <span class="nx">grunt</span><span class="p">.</span><span class="nf">loadNpmTasks</span><span class="p">(</span><span class="dl">'</span><span class="s1">assemble</span><span class="dl">'</span><span class="p">);</span>
  <span class="nx">grunt</span><span class="p">.</span><span class="nf">registerTask</span><span class="p">(</span><span class="dl">'</span><span class="s1">default</span><span class="dl">'</span><span class="p">,</span> <span class="p">[</span><span class="dl">'</span><span class="s1">assemble</span><span class="dl">'</span><span class="p">]);</span>
<span class="p">};</span>
</code></pre></div></div>

<p>Converts to:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Rustyll (_config.yml)</span>
<span class="na">title</span><span class="pi">:</span> <span class="s">My Assemble Site</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">A website built with Assemble</span>

<span class="c1"># Directory settings</span>
<span class="na">layouts_dir</span><span class="pi">:</span> <span class="s">_layouts</span>
<span class="na">includes_dir</span><span class="pi">:</span> <span class="s">_includes</span>

<span class="c1"># Build settings</span>
<span class="na">markdown</span><span class="pi">:</span> <span class="s">commonmark</span>
<span class="na">permalink</span><span class="pi">:</span> <span class="s">pretty</span>

<span class="c1"># Performance settings</span>
<span class="na">threads</span><span class="pi">:</span> <span class="s">auto</span>
<span class="na">incremental</span><span class="pi">:</span> <span class="kc">true</span>
</code></pre></div></div>

<h2 id="data-system-conversion">Data System Conversion</h2>

<p>Assemble’s data file approach converts to Rustyll’s <code class="language-plaintext highlighter-rouge">_data</code> directory:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Assemble (data/team.yml)</span>
<span class="na">members</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">John Doe</span>
    <span class="na">role</span><span class="pi">:</span> <span class="s">Developer</span>
  <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Jane Smith</span>
    <span class="na">role</span><span class="pi">:</span> <span class="s">Designer</span>
</code></pre></div></div>

<p>Transfers directly to:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Rustyll (_data/team.yml)</span>
<span class="na">members</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">John Doe</span>
    <span class="na">role</span><span class="pi">:</span> <span class="s">Developer</span>
  <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">Jane Smith</span>
    <span class="na">role</span><span class="pi">:</span> <span class="s">Designer</span>
</code></pre></div></div>

<h2 id="helpers-to-filters-and-tags">Helpers to Filters and Tags</h2>

<p>Assemble’s custom helpers convert to Rustyll’s Liquid filters or includes:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Assemble (with custom helper) --&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"posts"</span><span class="nt">&gt;</span>
  \{\{#each posts\}\}
    <span class="nt">&lt;article&gt;</span>
      <span class="nt">&lt;h2&gt;</span>\{\{title\}\}<span class="nt">&lt;/h2&gt;</span>
      <span class="nt">&lt;p&gt;</span>\{\{truncate description 100\}\}<span class="nt">&lt;/p&gt;</span>
    <span class="nt">&lt;/article&gt;</span>
  \{\{/each\}\}
<span class="nt">&lt;/div&gt;</span>
</code></pre></div></div>

<p>Converts to:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">&lt;!-- Rustyll (with filter) --&gt;</span>
<span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">"posts"</span><span class="nt">&gt;</span>
  <span class="c">&lt;!-- Liquid for loop starts --&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
    <span class="nt">&lt;article&gt;</span>
      <span class="nt">&lt;h2&gt;</span>Rustyll v0.8.4 published<span class="nt">&lt;/h2&gt;</span>
      <span class="nt">&lt;p&gt;</span>The official Rustyll v0.8.4 release is available on GitHub.<span class="nt">&lt;/p&gt;</span>
    <span class="nt">&lt;/article&gt;</span>
  <span class="c">&lt;!--  --&gt;</span>
  <span class="c">&lt;!-- Liquid for loop ends --&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</code></pre></div></div>

<h2 id="collections">Collections</h2>

<p>Assemble’s post grouping can be implemented using Rustyll collections:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Rustyll (_config.yml)</span>
<span class="na">collections</span><span class="pi">:</span>
  <span class="na">projects</span><span class="pi">:</span>
    <span class="na">output</span><span class="pi">:</span> <span class="kc">true</span>
    <span class="na">permalink</span><span class="pi">:</span> <span class="s">/projects/:path/</span>
</code></pre></div></div>

<p>With corresponding content files:</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gh">&lt;!-- Rustyll (_projects/project1.md) --&gt;
---
</span>title: First Project
description: Description of first project
<span class="gh">featured: true
---
</span>
Content for first project goes here.
</code></pre></div></div>

<h2 id="performance-improvements">Performance Improvements</h2>

<p>Rustyll offers significant performance advantages over JavaScript-based Assemble:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Rustyll performance options</span>
<span class="na">threads</span><span class="pi">:</span> <span class="s">auto</span>  <span class="c1"># Use all available CPU cores</span>
<span class="na">incremental</span><span class="pi">:</span> <span class="kc">true</span>  <span class="c1"># Enable incremental builds</span>
<span class="na">cache</span><span class="pi">:</span>
  <span class="na">enabled</span><span class="pi">:</span> <span class="kc">true</span>
  <span class="na">strategy</span><span class="pi">:</span> <span class="s">aggressive</span>
</code></pre></div></div>

<p>Comparison:</p>
<ol>
  <li><strong>Build Speed</strong>: 10-20x faster for large sites</li>
  <li><strong>Memory Usage</strong>: Much lower RAM consumption</li>
  <li><strong>Concurrency</strong>: Efficient use of all CPU cores</li>
</ol>

<h2 id="troubleshooting-common-issues">Troubleshooting Common Issues</h2>

<h3 id="template-syntax-differences">Template Syntax Differences</h3>

<p>If you encounter template conversion issues:</p>

<ol>
  <li>Handlebars uses <code class="language-plaintext highlighter-rouge">\{\{variable\}\}</code> syntax while Liquid uses <code class="language-plaintext highlighter-rouge">{ { variable } }</code> (with spaces)</li>
  <li>Handlebars helpers (<code class="language-plaintext highlighter-rouge">\{\{#each\}\}</code>) convert to Liquid tags (<code class="language-plaintext highlighter-rouge">{ % for % }</code>)</li>
  <li>Handlebars context (<code class="language-plaintext highlighter-rouge">this</code>) is handled differently in Liquid</li>
</ol>

<h3 id="helper-functions">Helper Functions</h3>

<p>For complex Assemble helpers:</p>

<ol>
  <li>Use Liquid’s built-in filters when possible</li>
  <li>Create custom Liquid tags for complex functionality</li>
  <li>Use JavaScript in the browser for dynamic components</li>
</ol>

<h3 id="layout-system">Layout System</h3>

<p>Assemble and Rustyll handle layouts differently:</p>

<ol>
  <li>Assemble uses <code class="language-plaintext highlighter-rouge">\{\{&gt; body\}\}</code> for content injection</li>
  <li>Rustyll uses <code class="language-plaintext highlighter-rouge">{ { content } }</code> in layout files</li>
  <li>Nested layouts work differently in Rustyll</li>
</ol>

<h2 id="migration-checklist">Migration Checklist</h2>

<ul class="task-list">
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Install Rust and Rustyll</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Back up your Assemble site</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Run the migration command</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Check template conversions</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Set up collections for content types</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Convert Handlebars helpers to Liquid filters</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Update asset references</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Configure permalink structure</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Test build with <code class="language-plaintext highlighter-rouge">rustyll build</code></li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Preview site with <code class="language-plaintext highlighter-rouge">rustyll serve</code></li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Fix any template or rendering issues</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Optimize performance settings</li>
  <li class="task-list-item"><input type="checkbox" class="task-list-item-checkbox" disabled="disabled" />Update deployment workflows</li>
</ul>

<h2 id="need-help">Need Help?</h2>

<ul>
  <li><a href="https://forum.rustyll.com">Rustyll Forum</a></li>
  <li><a href="https://discord.gg/rustyll">Rustyll Discord</a></li>
  <li><a href="https://github.com/rustyll/rustyll/issues">GitHub Issues</a></li>
</ul>
</article>
<nav class="doc-pagination" aria-label="Previous and next pages"><a href="/docs/migrating/"><span>← Previous</span>Migrating to Rustyll</a><a href="/docs/migrating/bridgetown-to-rustyll/"><span>Next →</span>Migrating from Bridgetown</a></nav>
<div class="doc-feedback"><p>Help keep these docs useful.</p>



<a href="https://github.com/betterwebinit/rustyll-website/edit/main/_docs/migrating/assemble-to-rustyll.md" 
   target="_blank" 
   rel="noopener noreferrer"
   class="inline-flex items-center gap-2 text-sm text-gray-400 hover:text-rust transition-colors duration-200 group px-3 py-1.5 bg-black/20 rounded-md border border-gray-800 hover:border-rust/30 ">
  <svg class="w-4 h-4 transition-transform duration-200 group-hover:rotate-12" fill="none" stroke="currentColor" viewBox="0 0 24 24">
    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"></path>
  </svg>
  <span>Improve this page</span>
</a> </div></div>
</div><aside class="docs-toc">

<nav class="page-toc " aria-label="On this page"><h2>On this page</h2><ul>

<li class="toc-level-2"><a href="#installation">Installation</a></li><li class="toc-level-2"><a href="#automatic-migration">Automatic Migration</a></li><li class="toc-level-2"><a href="#directory-structure-differences">Directory Structure Differences</a></li><li class="toc-level-2"><a href="#content-conversion">Content Conversion</a></li><li class="toc-level-2"><a href="#template-conversion">Template Conversion</a><ul><li class="toc-level-3"><a href="#handlebars-to-liquid">Handlebars to Liquid</a></li><li class="toc-level-3"><a href="#partials-to-includes">Partials to Includes</a></li></ul></li><li class="toc-level-2"><a href="#configuration-conversion">Configuration Conversion</a></li><li class="toc-level-2"><a href="#data-system-conversion">Data System Conversion</a></li><li class="toc-level-2"><a href="#helpers-to-filters-and-tags">Helpers to Filters and Tags</a></li><li class="toc-level-2"><a href="#collections">Collections</a></li><li class="toc-level-2"><a href="#performance-improvements">Performance Improvements</a></li><li class="toc-level-2"><a href="#troubleshooting-common-issues">Troubleshooting Common Issues</a><ul><li class="toc-level-3"><a href="#template-syntax-differences">Template Syntax Differences</a></li><li class="toc-level-3"><a href="#helper-functions">Helper Functions</a></li><li class="toc-level-3"><a href="#layout-system">Layout System</a></li></ul></li><li class="toc-level-2"><a href="#migration-checklist">Migration Checklist</a></li><li class="toc-level-2"><a href="#need-help">Need Help?</a></li>
</ul></nav>
</aside></div></section>
 -->
  </div>
</div>

Converts to:

# Rustyll (_includes/shared/card.html)
<div class="card">
  <h3><!--  --></h3>
  <div class="content">
    <!--  -->
  </div>
</div>

Ruby Components

Bridgetown’s Ruby components convert to Liquid includes:

# Bridgetown (src/_components/shared/author_bio.rb)
class Shared::AuthorBio < Bridgetown::Component
  def initialize(author:)
    @author = site.data.authors[author]
  end
end
# Bridgetown (src/_components/shared/author_bio.erb)
<div class="author-bio">
  <h3><%= @author.name %></h3>
  <p><%= @author.bio %></p>
</div>

Converts to:

# Rustyll (_includes/shared/author_bio.html)
<!--  -->
<div class="author-bio">
  <h3><!--  --></h3>
  <p><!--  --></p>
</div>

Asset Pipeline

Bridgetown’s esbuild/webpack assets convert to Rustyll’s asset structure:

Bridgetown Rustyll Notes
frontend/javascript/ assets/js/ JavaScript files
frontend/styles/ _sass/ and assets/css/ CSS/SCSS files
frontend/images/ assets/images/ Image files
import statements Standard includes Asset references

Plugins

Bridgetown plugins convert to Rustyll plugins:

Bridgetown Plugin Rustyll Equivalent
bridgetown-feed Built-in feed functionality
bridgetown-seo-tag rustyll-seo
bridgetown-sitemap rustyll-sitemap
bridgetown-minify-html rustyll-minify-html
Ruby-based plugins Rust-based plugins

Performance Improvements

Rustyll offers significant performance advantages over Ruby-based Bridgetown:

# Rustyll performance options
threads: auto  # Use all available CPU cores
incremental: true  # Enable incremental builds
cache:
  enabled: true
  strategy: aggressive

Benefits include:

  1. Build Speed: 10-20x faster builds
  2. Memory Usage: Significantly lower resource consumption
  3. Parallelism: Utilizes all CPU cores efficiently

Troubleshooting Common Issues

Ruby Components

If you use Ruby components in Bridgetown:

  1. Convert to Liquid includes using the include tag
  2. Break complex components into smaller, more focused includes
  3. Use data files for dynamic configuration

Front-end Integration

If you rely on Bridgetown’s frontend integration:

  1. Move JavaScript to standard asset directories
  2. Configure scripts in individual HTML files
  3. Use simpler build processes for assets

Ruby Helpers

If you use Ruby helpers in Bridgetown:

  1. Look for equivalent Liquid filters in Rustyll
  2. Consider using custom Liquid filters via plugins
  3. Simplify template logic where possible

Content Collections

Bridgetown’s and Rustyll’s collections work similarly:

# _config.yml
collections:
  products:
    output: true
    permalink: /products/:name/
    sort_by: price
    sort_direction: ascending

Migration Checklist

  • Install Rust and Rustyll
  • Back up your Bridgetown site
  • Run the migration command
  • Review content and front matter
  • Check templates and includes
  • Test component conversions
  • Verify asset pipeline works
  • Build with rustyll build
  • Preview site with rustyll serve
  • Test responsive design
  • Fix any styling issues
  • Update deployment workflows

Need Help?

Search Rustyll

Type to find a page.