| name | md-book |
| description | MD-Book documentation generator skill. Use when working with MD-Book, a modern
mdbook replacement for generating HTML documentation from Markdown files.
Supports syntax highlighting, live reload, Pagefind search, and Tera templates.
|
| license | Apache-2.0 |
MD-Book Documentation Generator Skill
Use this skill when working with MD-Book, a modern mdbook replacement for generating HTML documentation from Markdown files.
Overview
MD-Book is a Rust-based documentation generator that converts Markdown files to beautiful, searchable HTML documentation. It supports multiple markdown formats (Markdown, GFM, MDX), server-side syntax highlighting, live development server, and integrated Pagefind search.
CLI Usage
Basic Commands
md-book -i input_dir -o output_dir
md-book -i input_dir -o output_dir --watch
md-book -i input_dir -o output_dir --serve
md-book -i input_dir -o output_dir --watch --serve --port 8080
CLI Options
| Option | Short | Description |
|---|
--input | -i | Input directory containing markdown files (required) |
--output | -o | Output directory for HTML files (required) |
--config | -c | Optional path to config file |
--watch | -w | Watch for changes and rebuild |
--serve | -s | Serve at http://localhost:3000 |
--port | | Port to serve on (default: 3000) |
Running from Source
git clone https://github.com/terraphim/md-book.git
cd md-book
cargo build --release
cargo run -- -i docs -o output
cargo run -- -i docs -o output --serve --watch
Configuration
Configuration Priority (highest to lowest)
- CLI arguments
- Environment variables (MDBOOK_ prefix)
- Custom config file (--config flag)
- book.toml in current directory
- Default values
book.toml Configuration
Create book.toml in your input directory:
[book]
title = "My Documentation"
authors = ["Your Name"]
description = "Documentation description"
language = "en"
[output.html]
allow-html = false
mathjax-support = false
Environment Variables
MDBOOK_BOOK.TITLE="My Book" md-book -i input -o output
MDBOOK_OUTPUT.HTML.MATHJAX_SUPPORT=true md-book -i input -o output
Project Structure
Input Directory
input/
index.md # OPTIONAL: Custom home page content
# If present: renders your markdown as home page
# If absent: auto-generates card-based navigation
getting-started.md
configuration.md
advanced/ # Subdirectories become sections
topic1.md
topic2.md
images/ # Static assets copied to output
Output Directory
output/
index.html # Generated home page
getting-started.html
configuration.html
advanced/
topic1.html
topic2.html
css/ # Styles
js/ # JavaScript (live reload, search, syntax highlighting)
pagefind/ # Search index (if search feature enabled)
Features
Syntax Highlighting
Server-side syntax highlighting via syntect. Supports all major languages:
```rust
fn main() {
println!("Hello, world!");
}
```
```python
def hello():
print("Hello, world!")
```
Full-Text Search (Pagefind)
Search is built in via Pagefind. Requires pagefind CLI:
cargo install pagefind
pagefind --site output_dir
Live Reload
When using --serve --watch, pages automatically reload on file changes via WebSocket.
Index Page (Two Methods)
MD-Book supports two ways to create your documentation home page:
Method 1: Custom Content with index.md
Create an index.md file in your input directory for a custom home page:
# Welcome to My Documentation
This is my custom home page content with full markdown support.
## Quick Links
- [Getting Started](getting-started.md)
- [Configuration](configuration.md)
- [API Reference](api/reference.md)
When index.md exists, its content is rendered as the home page. This gives you full control over the layout and content.
Method 2: Auto-Generated Card Navigation
If no index.md is present, MD-Book automatically generates a card-based home page using Shoelace UI components. This displays:
- A "Documentation" header
- Cards for each section/directory
- Cards for each page within sections
- "Read More" buttons linking to each page
This is ideal for quickly getting started or for projects where you want automatic navigation without maintaining a custom index.
Choosing Between Methods:
- Use index.md when you want custom welcome content, specific navigation order, or branded messaging
- Use auto-generated cards for quick setup or when documentation structure should drive navigation
Right-Hand TOC
Each page includes a right-hand table of contents for in-page navigation.
Template Customization
Templates use Tera templating engine:
| Template | Purpose |
|---|
page.html.tera | Individual page layout |
index.html.tera | Home page |
sidebar.html.tera | Navigation sidebar |
header.html.tera | Page header |
footer.html.tera | Page footer |
Web Components
Built-in Web Components:
doc-toc.js - Table of contents
search-modal.js - Search interface
doc-sidebar.js - Responsive sidebar
simple-block.js - Content blocks
Deployment
Cloudflare Pages (Recommended)
./scripts/setup-cloudflare.sh
./scripts/deploy.sh production
Netlify
cargo run -- -i docs -o dist
netlify deploy --prod --dir=dist
GitHub Pages
Use the GitHub Actions workflow:
- name: Build site
run: cargo run -- -i docs -o _site
- name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
Other Platforms
Vercel, AWS Amplify, Render, Railway, Fly.io, and DigitalOcean are all supported. See DEPLOYMENT.md for details.
Testing
cargo test --lib --bins
cargo test --test integration --features "tokio,search,syntax-highlighting"
cargo test --all-targets --features "tokio,search,syntax-highlighting"
make qa
make ci-local
Feature Flags
default = ["server", "watcher", "search", "syntax-highlighting"]
server = ["warp", "tokio/full"]
watcher = ["notify", "tokio/full"]
search = ["pagefind"]
syntax-highlighting = ["syntect"]
wasm = ["wasm-bindgen"]
Build minimal version:
cargo build --no-default-features
Security Considerations
HTML in Markdown
Raw HTML is disabled by default for security. Enable only if you trust all content:
[output.html]
allow-html = true
Secrets Management
- Use 1Password integration or environment variables
- Never commit
.env files
- See
docs/1PASSWORD_SETUP.md for secure setup
Common Patterns
Creating Documentation Project
With custom index page:
mkdir docs
cat > docs/index.md << 'EOF'
This is the home page with custom content.
See [Getting Started](getting-started.md) to begin.
EOF
cat > docs/getting-started.md << 'EOF'
Installation and setup instructions.
EOF
md-book -i docs -o output --serve --watch
With auto-generated card navigation:
mkdir docs
cat > docs/getting-started.md << 'EOF'
Installation and setup instructions.
EOF
cat > docs/configuration.md << 'EOF'
How to configure the project.
EOF
md-book -i docs -o output --serve --watch
Adding Search
Search works automatically when pagefind is installed:
cargo install pagefind
md-book -i docs -o output
Custom Styling
Edit CSS in src/templates/css/styles.css or provide custom template directory.
Troubleshooting
Build Fails
rustc --version
cargo --version
cargo clean
cargo build --release
Search Not Working
which pagefind
pagefind --site output_dir
Live Reload Not Working
Ensure using both flags together:
md-book -i docs -o output --watch --serve
Repository