Presentation framework based on Markdown and HTML (Core Library + CLI)
Available as a NPM Package, CLI and Editor
Website | Web App | Quick Start | Development
- Markdown based - Write slides in Markdown with HTML support
- Multiple Themes - Built-in themes: light, dark, dracula, ocean, rainbow
- Plugin System - Extensible with plugins (progress bar, slide numbers, confetti, etc.)
- Custom Backgrounds - Support for images, colors, and animations
- Interactive Elements - Support for interactive content and animations
- Multi-format Export - Export to HTML, PDF, PPTX, PNG, and JPG formats
# Create a new project
npx mostage@latest new
# Start development server
npx mostage@latest dev
# Start development server for specific project
npx mostage@latest dev --source /path/to/project
# Try demo presentation
npx mostage@latest example --template demo
npx mostage@latest dev --source mostage-demo
# Display help
npx mostage@latest help# Install CLI
npm install -g mostage
# Create a new project
mostage newNote: You can use the interactive command (just run
mostage newand follow the prompts), or provide options directly (e.g.,mostage new --theme dracula --content-path content.md) to create presentations.
You can use these commands with npx mostage@latest <command>:
| Command | Description | Options |
|---|---|---|
mostage new |
Create a new presentation project | --name, --content-path, --config-path, --theme, --plugins, --transition, --url-hash, --center-horizontal, --center-vertical |
mostage example |
Create a new presentation project from examples | --template |
mostage dev |
Start development server with live reload | --port, --host, --source |
mostage export |
Export presentation in various formats | --source, --format, --output |
mostage theme |
Manage themes (list, add, remove) | --list, --add, --remove |
mostage plugin |
Manage plugins (list, add, remove) | --list, --add, --remove |
mostage help |
Show help and command information |
The mostage new command creates a new custom project:
# Interactive mode
mostage new
# Non-interactive mode with basic options
mostage new --name my-presentation --theme dark --transition horizontalThe mostage export command allows you to export presentations in various formats:
mostage export # Export as single HTML (default)
mostage export --format pdf
mostage export --format pptx
mostage export --format png
mostage export --format jpg
mostage export --source ./my-project --format pdf --output ./my-exportsFor detailed CLI documentation, see the CLI Commands section above.
Install Mostage as a dependency in your project:
npm install mostage@latestThen import and use it in your project:
import Mostage from "mostage";
//Use internal config or path of external config
const presentation = new Mostage("./config.json");
presentation.start();Or with CommonJS:
const Mostage = require("mostage");
const presentation = new Mostage("./config.json");
presentation.start();If you prefer not to use the CLI or npm package, you can set up Mostage manually:
- Create your project structure:
my-presentation/
├── index.html (With an internal configuration or an external configuration link)
├── content.md (slides)
└── config.json (Optional)
- Create
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>My Presentation</title>
<link
rel="stylesheet"
href="https://unpkg.com/mostage@latest/dist/core/mostage.css"
/>
</head>
<body>
<div id="app"></div>
<script src="https://unpkg.com/mostage@latest/dist/core/index.js"></script>
<script>
//Use internal config or path of external config
const presentation = new Mostage({
element: "#app",
contentPath: "./content.md",
theme: "dark",
});
presentation.start();
</script>
</body>
</html>- Create
content.mdwith your content:
# Slide 1
Welcome to my presentation!
---
# Slide 2
This is the second slide.- Create
config.json(optional):
{
"theme": "light",
"scale": 1.2
}Mostage works with popular frameworks and build tools:
import React, { useEffect, useRef } from "react";
import Mostage from "mostage";
function Presentation() {
const containerRef = useRef(null);
useEffect(() => {
if (containerRef.current) {
const presentation = new Mostage({
element: containerRef.current,
contentPath: "./content.md",
theme: "dark",
});
presentation.start();
}
}, []);
return <div ref={containerRef} />;
}import { Component, ElementRef, OnInit, OnDestroy } from "@angular/core";
import Mostage from "mostage";
@Component({
selector: "app-presentation",
template: "<div></div>",
})
export class PresentationComponent implements OnInit, OnDestroy {
private mostage: any;
constructor(private elementRef: ElementRef) {}
ngOnInit() {
this.mostage = new Mostage({
element: this.elementRef.nativeElement,
theme: "dark",
contentPath: "./content.md",
});
this.mostage.start();
}
ngOnDestroy() {
if (this.mostage) {
this.mostage.destroy();
}
}
}Mostage is highly configurable through the config.json file. Here are the main configuration options:
{
"theme": "dark",
"scale": 1.2,
"urlHash": true
}{
"contentPath": "./content.md",
"centerContent": {
"vertical": true,
"horizontal": true
}
}{
"header": {
"content": "# My Presentation",
"position": "top-left",
"showOnFirstSlide": false
},
"footer": {
"content": "#### Presentation Framework",
"position": "bottom-left",
"showOnFirstSlide": true
}
}{
"background": [
{
"imagePath": "./background.jpg",
"size": "cover",
"position": "center",
"bgColor": "#000000",
"global": true
}
]
}{
"plugins": {
"ProgressBar": {
"enabled": true,
"position": "top",
"color": "#007acc"
},
"SlideNumber": {
"enabled": true,
"position": "bottom-right",
"format": "current/total"
},
"Controller": {
"enabled": true,
"position": "bottom-center"
},
"Confetti": {
"enabled": true,
"particleCount": 50
}
}
}light- Clean light themedark- Modern dark themedracula- Dracula color schemeocean- Ocean blue themerainbow- Colorful rainbow theme
- ProgressBar - Shows presentation progress
- SlideNumber - Displays current slide number
- Controller - Navigation controls
- Confetti - Celebration animations
For a complete configuration example, see Usage Examples.
For detailed usage examples and advanced configurations, see Usage Examples.
For complete API documentation, see API Reference.
For development guidelines, contribution instructions, and CI/CD pipeline information, see the Development Guide.
This project is licensed under the GNU General Public License v3.0 (GPL-3.0-or-later) with additional attribution requirements.
See the LICENSE file for the complete license text.


