Marp CLI Setup and Brand Theme Guide

Setup instructions for Marp CLI with Solanasis brand theming for rapid Markdown-to-slides generation.


1. Overview

Marp is a Markdown-to-slides ecosystem (MIT-licensed, v3.4.1+) that converts Markdown files to PDF, HTML, PPTX, and PNG slides. It renders at 345 slides/second with 2.8ms latency, making it one of the fastest slide generation tools available. Solanasis uses Marp for rapid internal presentations and training decks where speed-to-slide matters more than PPTX editability. A custom CSS theme applies Solanasis branding automatically to all generated slides.


2. Installation (WSL2)

npm install -g @marp-team/marp-cli

Option B: Standalone binary

# Download latest release from https://github.com/marp-team/marp-cli/releases
# Extract and place in PATH
chmod +x marp
sudo mv marp /usr/local/bin/

Verify installation

marp --version

Chromium for PDF export

Marp needs Chromium to render PDF output. On WSL2:

sudo apt install chromium-browser
# Or set CHROME_PATH to Windows Chrome:
export CHROME_PATH="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"

Optional: VS Code extension

Search “Marp for VS Code” in the Extensions marketplace for live preview while editing slide Markdown.


3. Brand CSS Theme

Save the following as solanasis-theme.css (recommended location: solanasis-scripts/templates/marp/solanasis-theme.css):

/* @theme solanasis */
 
@import 'default';
 
:root {
  --color-navy: #020532;
  --color-copper: #C47A3D;
  --color-parchment: #FEF9F1;
  --color-warm-stone: #F0EBE4;
  --color-charcoal: #111827;
}
 
section {
  background-color: var(--color-parchment);
  color: var(--color-charcoal);
  font-family: 'Montserrat', sans-serif;
  font-size: 28px;
  padding: 40px 60px;
}
 
h1 {
  font-family: 'Playfair Display', serif;
  color: var(--color-navy);
  font-size: 48px;
  border-bottom: 3px solid var(--color-copper);
  padding-bottom: 12px;
}
 
h2 {
  font-family: 'Montserrat', sans-serif;
  color: var(--color-copper);
  font-size: 36px;
  font-weight: 700;
}
 
h3 {
  font-family: 'Montserrat', sans-serif;
  color: var(--color-navy);
  font-size: 28px;
}
 
a {
  color: var(--color-copper);
}
 
blockquote {
  border-left: 4px solid var(--color-copper);
  padding-left: 16px;
  color: var(--color-navy);
  font-family: 'Libre Baskerville', serif;
  font-style: italic;
}
 
/* Title slide */
section.lead {
  background-color: var(--color-navy);
  color: var(--color-parchment);
}
 
section.lead h1 {
  color: var(--color-parchment);
  border-bottom-color: var(--color-copper);
}
 
/* Footer */
footer {
  font-size: 14px;
  color: var(--color-navy);
}
 
header {
  font-size: 14px;
  color: var(--color-copper);
}

Brand color reference

NameHexUsage in theme
Navy#020532H1 text, H3 text, footer, title slide background
Copper#C47A3DH2 text, links, blockquote border, header, accents
Parchment#FEF9F1Default slide background, title slide text
Warm Stone#F0EBE4Available for alternate slide backgrounds
Charcoal#111827Body text

Font reference

FontUsage
Playfair DisplayH1 headings (display/title)
MontserratH2, H3, body text, footer
Libre BaskervilleBlockquotes, accent text

4. Writing Slides in Markdown

Marp slides are standard Markdown with YAML frontmatter and --- slide separators. Example deck:

---
marp: true
theme: solanasis
paginate: true
header: 'Solanasis LLC'
footer: 'solanasis.com'
---
 
<!-- _class: lead -->
 
# Operational Resilience Baseline
## For Acme Corporation
**Prepared by Dmitri Zasage, CEO**
April 2026
 
---
 
## Agenda
 
1. Current State Assessment
2. Key Findings
3. Recommendations
4. Next Steps
 
---
 
## Key Findings
 
- **Finding 1:** No documented disaster recovery plan
- **Finding 2:** Backup verification not performed regularly
- **Finding 3:** Single point of failure in email infrastructure
 
> "An untested backup is not a backup."

Slide authoring tips

  • --- on its own line creates a new slide
  • <!-- _class: lead --> applies the title slide style (navy background)
  • <!-- _class: invert --> inverts colors for a dark slide (built-in)
  • paginate: true in frontmatter enables slide numbers
  • Images: ![bg right:40%](image.png) places a background image on the right 40% of the slide
  • Speaker notes: <!-- This is a speaker note --> (visible in presenter view)

5. CLI Usage

Basic output commands

# PDF output (most common for deliverables)
marp slides.md --pdf --theme solanasis-theme.css
 
# HTML output (for web hosting or email)
marp slides.md --html --theme solanasis-theme.css
 
# PPTX output (non-editable -- slides rendered as images)
marp slides.md --pptx --theme solanasis-theme.css
 
# PNG output (one image per slide)
marp slides.md --images png --theme solanasis-theme.css

Development workflow

# Watch mode -- auto-rebuilds on file changes
marp -w slides.md --theme solanasis-theme.css

Configuration file

Save as marp.config.js (recommended location: solanasis-scripts/templates/marp/marp.config.js):

module.exports = {
  theme: './solanasis-theme.css',
  html: true,
  output: 'output/',
}

With a config file, run simply: marp slides.md (config is auto-detected in the working directory or parent directories).


6. Integration with solanasis-scripts

  • Marp theme CSS should live in solanasis-scripts/templates/marp/solanasis-theme.css
  • AI agents generate Markdown content, then invoke marp CLI via subprocess
  • For editable PPTX deliverables, use python-pptx instead (Marp PPTX renders slides as images)
  • Marp config file at solanasis-scripts/templates/marp/marp.config.js

Directory structure

solanasis-scripts/
  templates/
    marp/
      solanasis-theme.css    # Brand CSS theme
      marp.config.js         # Default config

7. Known Limitations

  • PPTX export renders slides as background images (not editable text in PowerPoint). The experimental --pptx-editable flag requires LibreOffice and has lower fidelity. For editable PPTX, use python-pptx (generate-pitch-deck.py).
  • PDF export requires Chromium (bundled in npm version, or system Chromium on WSL2). Set CHROME_PATH if using Windows Chrome.
  • Custom fonts must be installed system-wide or available via CSS @import url() from Google Fonts. Local fonts require @font-face in the CSS theme.
  • WSL2 mirrored networking mode may be needed for browser-based PDF export. If PDF export hangs, try export PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser.

8. References


Last updated: 2026-04-12