
Security News
RubyGems Adds Cooldown Feature to Bundler for Newly Published Gems
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.
Convert Marp markdown presentations to theme-compatible, editable PowerPoint files. Single command, zero Python dependencies, fully editable output.
Convert Marp markdown presentations to theme-compatible, fully editable PowerPoint files with a single command.
marp2pptx slides.md - that's it!*.mdCurrently not supported:
theme: gaia, theme: uncover, etc.).css)<style> blocks from Marp filesWhat this means: The tool extracts the content structure (headings, bullets, text) from your Marp markdown but ignores Marp theme styling. Instead, it creates a generic PowerPoint file that you can theme using PowerPoint's built-in themes.
Workflow:
Marp Markdown (any theme) → Generic PowerPoint → Apply PowerPoint Theme
Workaround: Use the color options to customize the base colors:
marp2pptx slides.md --primary-color "#3498DB" --accent-color "#E74C3C"
Planned for future versions:
Note: Even without Marp theme support, the generated PowerPoint files are fully editable and theme-compatible. You can apply any PowerPoint theme and all slides will adapt automatically.
# Install dependencies
npm install
# Or install globally (optional)
npm link
# Basic usage
node bin/marp2pptx.js input.md
# Specify output file
node bin/marp2pptx.js input.md -o presentation.pptx
# Custom colors
node bin/marp2pptx.js input.md --primary-color "#3498DB" --accent-color "#E74C3C"
# If installed globally
marp2pptx input.md -o output.pptx
Usage: marp2pptx [options] <input>
Arguments:
input Input Marp markdown file
Options:
-V, --version Output version number
-o, --output <file> Output PowerPoint file (default: "output.pptx")
--primary-color <color> Primary color for headings (default: "#E67E22")
--accent-color <color> Accent color (default: "#16A085")
--bg-color <color> Background color (default: "#FFFFFF")
--text-color <color> Text color (default: "#2C3E50")
-q, --quiet Suppress output messages
-h, --help Display help
# Heading 1
## Heading 2
### Heading 3
- Bullet point 1
- Bullet point 2
1. Numbered item 1
2. Numbered item 2
**Bold text**
*Italic text*
`Inline code`
```python
def hello():
print("Hello World!")
```
> This is a quoted text
<!-- _class: lead -->
<!-- _header: "Section Title" -->
<!-- _paginate: false -->
Recommended themes:
marp2pptx-js/
├── package.json # Dependencies and scripts
├── bin/
│ └── marp2pptx.js # CLI entry point
├── lib/
│ ├── index.js # Main library
│ ├── parser.js # Marp markdown parser
│ ├── converter.js # Markdown to HTML converter
│ └── generator.js # PPTX generation with placeholders
├── test/
│ ├── sample.md # Test file
│ └── output.pptx # Generated output
└── README.md
Marp Markdown
↓
Parser
(Splits slides, extracts directives)
↓
Converter
(Markdown → HTML)
↓
Generator
(HTML → PPTX with placeholders)
↓
Theme-Compatible PowerPoint
The converter uses a three-stage pipeline:
Parser (lib/parser.js)
--- separatorConverter (lib/converter.js)
marked library to parse markdownGenerator (lib/generator.js)
Instead of absolute positioning, this tool uses PowerPoint's placeholder system:
slide.addText(title, {
placeholder: 'title', // ← Uses PowerPoint's title placeholder
fontSize: 44,
bold: true
});
slide.addText(content, {
placeholder: 'body', // ← Uses PowerPoint's body placeholder
fontSize: 18
});
Benefits:
| Feature | Python + JS | Pure JavaScript |
|---|---|---|
| Languages | 2 (Python, JS) | 1 (JavaScript) |
| Installation | pip + npm | npm only |
| Commands | 2 steps | 1 command |
| Output Quality | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Theme Support | ✅ | ✅ |
| Editability | ✅ | ✅ |
| Speed | Fast | Very Fast |
| Maintenance | Medium | Easy |
| Code Size | ~740 lines | ~400 lines |
# Test with sample file
node bin/marp2pptx.js test/sample.md -o test/output.pptx
# Check output
open test/output.pptx
Expected Results:
---
marp: true
---
<!-- _class: lead -->
# My Presentation
## Subtitle Here
---
## Slide Title
- Point 1
- Point 2
- Point 3
npm link
# Now use anywhere
marp2pptx ~/Documents/presentation.md
npm publish
# Users install with
npm install -g marp2pptx
# GitHub Actions
- name: Convert Marp to PowerPoint
run: |
npm install -g pptxgenjs jsdom marked commander chalk
node bin/marp2pptx.js slides.md -o output.pptx
- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: presentation
path: output.pptx
Want different colors? Edit lib/generator.js:
const COLORS = {
primary: 'E67E22', // Change heading color
accent: '16A085', // Change accent color
text: '2C3E50', // Change text color
// ...
};
Enable debug mode:
DEBUG=true node bin/marp2pptx.js input.md
| Feature | marp2pptx (this tool) | Marp CLI |
|---|---|---|
| Installation | npm install | npm install |
| Command | marp2pptx file.md | marp file.md --pptx |
| Theme Compat | ✅ Guaranteed | ❓ Unknown |
| Editability | ✅ Placeholders | ❓ Unknown |
| Customization | ✅ Full control | ⚠️ Limited |
| Dependencies | jsdom, pptxgenjs, marked | Browser (Chromium) |
| Speed | ⚡ Very Fast | ⚠️ Slower (browser) |
Found a bug? Have a feature request?
MIT - Free for commercial and personal use
Made with ❤️ for the Marp community
Need help? Open an issue!
FAQs
Convert Marp markdown presentations to theme-compatible, editable PowerPoint files. Single command, zero Python dependencies, fully editable output.
We found that marp2pptx demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.

Security News
Federal audit finds NIST lacked a plan to clear the NVD backlog, wasted funds on duplicate work, and delayed use of CISA data.