npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

outline-to-slides

v1.2.2

Published

Convert markdown or JSON outlines into professional PowerPoint presentations instantly. Transform outlines into beautiful slide decks using 18 slide layouts, 4 color themes, and intelligent parsing.

Downloads

120

Readme

outline-to-slides

Convert markdown or JSON outlines into professional PowerPoint presentations instantly.

npm version npm downloads license

Features

8 Slide Layouts - Content, Bullets, Quote, Two-column, Metrics, Chart, Table, Image

🎨 4 Color Themes - Default, Modern, Dark, Forest

🧠 Intelligent Parsing - Automatically detects slide types from markdown keywords

📊 Data Visualization - Built-in support for charts, metrics, and tables

🔤 Slide Subtitles - Add subtitles to individual slides

#️⃣ Auto Numbering - Automatic slide numbering across all slides

Fast & Easy - Generate presentations in seconds

Installation

npm install outline-to-slides

Quick Start

1. Create a JSON Outline

const { convertJsonOutline, jsonToPptx } = require('outline-to-slides');

const outline = {
  title: "My Presentation",
  author: "Your Name",
  subtitle: "A professional slide deck",
  theme: "modern",
  slides: [
    {
      title: "Introduction",
      type: "content",
      content: "Welcome to my presentation!"
    },
    {
      title: "Key Points",
      type: "bullets",
      points: [
        "First important point",
        "Second important point",
        "Third important point"
      ]
    }
  ]
};

const presentation = convertJsonOutline(outline);
await jsonToPptx(presentation, 'output.pptx');

2. Use Markdown Outline

const { parseOutline, jsonToPptx } = require('outline-to-slides');

const markdown = `
# My Presentation

## Introduction
This is the introduction slide.

## Key Points
- Point one
- Point two
- Point three

## Conclusion
Thank you!
`;

const presentation = parseOutline(markdown, {
  title: "My Presentation",
  author: "Your Name"
});

await jsonToPptx(presentation, 'output.pptx');

Slide Types

Choose the right layout for your content:

| Type | Use For | Example | |------|---------|---------| | content | Body text and paragraphs | "Introduction", "About Us" | | bullets | Key points and lists | "Features", "Benefits" | | quote | Testimonials and quotes | "Customer Quote" | | two_column | Comparisons and side-by-side | "Before vs After" | | metrics | Key numbers and stats | "Q4 Results" | | chart | Data visualization | "Revenue Growth" | | table | Tabular data | "Comparison Table" | | image | Images with descriptions | "Product Screenshot" |

Example: Multiple Layout Types

const outline = {
  title: "Product Roadmap",
  slides: [
    {
      title: "Executive Summary",
      type: "content",
      content: "Overview of our 2025 roadmap..."
    },
    {
      title: "Key Metrics",
      type: "metrics",
      metrics: [
        { title: "Revenue", value: "$42.5M", description: "Up 15%" },
        { title: "Customers", value: "500+", description: "Growth 22%" }
      ]
    },
    {
      title: "Current vs Future",
      type: "two_column",
      left: { heading: "Current", content: "..." },
      right: { heading: "Future", content: "..." }
    },
    {
      title: "Roadmap Timeline",
      type: "chart",
      chart_type: "bar",
      chart_json: "{...}",
      text_heading: "Implementation Plan",
      text_body: "Phased rollout across..."
    }
  ]
};

Color Themes

Choose from 4 professional themes:

const outline = {
  title: "My Presentation",
  theme: "modern",  // Options: 'default', 'modern', 'dark', 'forest'
  slides: [...]
};

Theme Options

  • default - Classic blue and purple (professional corporate)
  • modern - Vibrant red, teal, and yellow (creative and energetic)
  • dark - Cyan on dark blue background (tech-focused, modern)
  • forest - Green palette (eco-friendly, nature-focused)

Advanced Features

Slide Subtitles

Add subtitles to individual slides:

{
  title: "Main Title",
  subtitle: "Optional subtitle text",
  type: "content",
  content: "Slide content here"
}

Intelligent Markdown Parsing

The parser auto-detects slide types from keywords:

# Revenue Chart         ← Auto-detected as "chart"
# Q4 Metrics           ← Auto-detected as "metrics"
# Enterprise vs SMB    ← Auto-detected as "two_column"
# Customer Testimonial ← Auto-detected as "quote"
# Product Table        ← Auto-detected as "table"
# Screenshot           ← Auto-detected as "image"

Control Closing Slide

const presentation = parseOutline(markdown, {
  title: "My Presentation",
  author: "Your Name",
  includeClosingSlide: false  // Don't add "Thank You" slide
});

Complete Example

const { convertJsonOutline, jsonToPptx } = require('outline-to-slides');

const presentation = {
  title: "Q4 2024 Results",
  subtitle: "Executive Summary",
  author: "Finance Team",
  theme: "modern",
  includeClosingSlide: true,
  slides: [
    {
      title: "Executive Summary",
      subtitle: "Key Highlights",
      type: "content",
      content: "Strong performance across all metrics this quarter."
    },
    {
      title: "Financial Results",
      subtitle: "Performance Overview",
      type: "metrics",
      metrics: [
        {
          title: "Revenue",
          value: "$42.5M",
          description: "Up 15% YoY"
        },
        {
          title: "Gross Margin",
          value: "78%",
          description: "Improved from 75%"
        },
        {
          title: "Customer Growth",
          value: "22%",
          description: "500+ customers"
        },
        {
          title: "Net Retention",
          value: "110%",
          description: "Strong expansion"
        }
      ],
      description: "All key metrics show positive momentum into 2025."
    },
    {
      title: "Market Expansion",
      subtitle: "Enterprise vs SMB",
      type: "two_column",
      left: {
        heading: "Enterprise Segment",
        content: "Enterprise customers grew 28% with strong expansion in North America and Europe. Secured 3 Fortune 500 companies."
      },
      right: {
        heading: "SMB Segment",
        content: "SMB segment grew 15% with focus on self-serve adoption. Automated onboarding reduced CAC by 40%."
      }
    },
    {
      title: "Key Takeaways",
      subtitle: "Strategic Direction",
      type: "bullets",
      points: [
        "Strong revenue growth across all segments",
        "Market expansion successful in new geographies",
        "Team expanded with 25 new hires",
        "24 new features launched",
        "Customer satisfaction at all-time high"
      ]
    }
  ]
};

const pres = convertJsonOutline(presentation);
await jsonToPptx(pres, 'q4-results.pptx');

API Reference

convertJsonOutline(outline)

Converts a JSON outline to presentation structure.

Parameters:

  • outline.title (string, required) - Presentation title
  • outline.author (string, required) - Author name
  • outline.subtitle (string, optional) - Presentation subtitle
  • outline.theme (string, optional) - Color theme: 'default', 'modern', 'dark', 'forest'
  • outline.includeClosingSlide (boolean, optional) - Add closing slide (default: true)
  • outline.slides (array, required) - Array of slide objects

Returns: Presentation object ready for jsonToPptx()

parseOutline(markdown, options)

Converts markdown to presentation structure.

Parameters:

  • markdown (string, required) - Markdown formatted outline
  • options.title (string, required) - Presentation title
  • options.author (string, required) - Author name
  • options.subtitle (string, optional) - Presentation subtitle
  • options.theme (string, optional) - Color theme
  • options.includeClosingSlide (boolean, optional) - Add closing slide

Returns: Presentation object

jsonToPptx(presentation, outputPath)

Generates PowerPoint file from presentation object.

Parameters:

  • presentation (object, required) - Presentation from convertJsonOutline() or parseOutline()
  • outputPath (string, required) - Output file path (e.g., 'presentation.pptx')

Returns: Promise that resolves with output path

Examples

The package includes 11 working examples:

# Basic JSON outline
node examples/01-json-basic.js

# Charts and data visualization
node examples/02-charts.js

# HTML parsing
node examples/03-html-parsing.js

# Custom themes
node examples/04-custom-theme.js

# Tables
node examples/05-tables.js

# All layouts showcase
node examples/06-all-layouts.js

# Charts showcase
node examples/07-charts-showcase.js

# Theme selection
node examples/10-theme-selection.js

# Outline showcase
node examples/11-outline-showcase.js

Use Cases

Business Presentations

const outline = {
  title: "Annual Investor Update",
  theme: "default",  // Professional
  slides: [
    // Financial results, roadmap, projections
  ]
};

Conference Talks

const outline = {
  title: "Machine Learning 101",
  theme: "dark",  // Tech-focused
  slides: [
    // Concepts, examples, code samples
  ]
};

Product Demos

const outline = {
  title: "Product Features",
  theme: "modern",  // Vibrant
  slides: [
    // Features, benefits, demo screenshots
  ]
};

Command Line Usage

# Generate presentation from JSON file
outline-to-slides input.json output.pptx

# Use specific theme
outline-to-slides input.json output.pptx --theme modern

# Parse markdown
outline-to-slides input.md output.pptx --markdown

Tips & Best Practices

✅ Do's

  • Use specific, descriptive titles
  • Keep bullet points concise (max 5-6 per slide)
  • Use appropriate slide types for your content
  • Match theme to presentation tone
  • Test your presentation before sharing
  • Use subtitles for clarity
  • Keep total slides under 20

❌ Don'ts

  • Don't overload slides with text
  • Don't mix unrelated content
  • Don't use default theme for creative presentations
  • Don't forget to set author and title
  • Don't use too many different fonts
  • Don't skip the introduction slide

Supported Node Versions

  • Minimum: Node.js 14.0.0
  • Recommended: Node.js 16.0.0+

Browser Support

This is a Node.js library. For browser usage, you'll need to use a bundler like webpack or browserify.

Documentation

  • QUICK_START.md - Quick reference guide (5 minutes)
  • THEME_GUIDE.md - Color themes documentation
  • OUTLINE_ENHANCEMENTS.md - Advanced features guide
  • examples/ - 11 working code examples

Troubleshooting

PowerPoint won't open

  • Ensure the file path is valid
  • Check that jsonToPptx completes without errors

Slide content is cut off

  • Reduce text length
  • Use a more appropriate slide type
  • Use subtitles instead of longer text

Theme not applying

  • Verify theme name: 'default', 'modern', 'dark', or 'forest'
  • Ensure theme is specified in outline object

Missing slide numbers

  • Slide numbers are automatic (starting from slide 2)
  • Title slide (slide 1) is intentionally not numbered

Performance

  • Small presentations (< 10 slides): < 1 second
  • Medium presentations (10-30 slides): 1-5 seconds
  • Large presentations (30+ slides): 5-15 seconds

Times vary based on content complexity and system resources.

Package Contents

  • 34 files total
  • 58.7 KB packed
  • 290.5 KB unpacked
  • JavaScript source only (no TypeScript)
  • 11 working examples
  • 4 documentation files

License

MIT - See LICENSE file for details

Contributing

Issues and pull requests welcome! Check the repository for guidelines.

Support

  • Documentation: See QUICK_START.md and other guides
  • Examples: Check the examples/ directory
  • Issues: Report via GitHub or npm package

Changelog

v1.1.1 (Latest)

  • Excluded TypeScript files from package
  • Added QUICK_START.md documentation
  • Optimized package size (88% smaller)

v1.1.0

  • Added 4 color themes (modern, dark, forest)
  • Enhanced outline parser with 8 slide layouts
  • Added intelligent markdown parsing
  • Added slide subtitles and numbering

v1.0.0

  • Initial release

Version

Current: 1.1.1 Latest npm: https://www.npmjs.com/package/outline-to-slides

Repository

For source code and issues: See package.json for repository URL

Keywords

PowerPoint, PPTX, Presentation, Generator, Slides, Outline, Markdown, JSON, Automation, LLM, AI


Get started in 5 minutes! See QUICK_START.md for a quick introduction.