Slides that live in your Astro site — many decks per site, written in MDX, Markdown or HTML, presented on the web and exported as editable PowerPoint in your own template.
PluginsTypeScript · CSSGitHub @r-hashi01OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Slides that live in your Astro site.
Astlide is an Astro integration for presentations. Write slides in MDX, Markdown or plain HTML, present them in the browser, and export them to PDF or to PowerPoint files anyone can edit.
📖 Documentation: https://astlide.dev/ · 🎬 Live demo: https://astlide.dev/demo/tour/1/ · 🇯🇵 日本語ドキュメント
src/content/decks/. Talks, weekly reports and training decks sit side by side: they share themes and components, deploy together and get an index page. Most slide tools give you one project per deck.astlide() is an Astro integration, so it works in a blog, a Starlight docs site or any other Astro project. Some parts also work on their own: the deck loader, PowerPoint import and templates (@astlide/core/pptx), and the layout engine (@astlide/core/engine)..pptx or .potx as a theme and your Markdown slides take on its layouts, fonts and colors. astlide export --pptx writes real text boxes, tables and shapes, with your speaker notes, that anyone can edit in PowerPoint. Astlide lays the slides out itself, so the export needs no browser and no LibreOffice..pptx from PowerPoint or Google Slides in a deck folder and its pages show up as slides. Or run astlide import to turn it into HTML slides you can edit.@astlide/next, @astlide/nuxt, @astlide/react and @astlide/vue serve the same deck folders, MDX included, with the presenter window and PDF / PPTX export. See the docs./my-talk/7 loads on its own and can be hosted anywhere, including under a sub-path such as a GitHub Pages project site..mdx, .md and .html files. HTML is rendered as written, so you can paste in markup you wrote by hand or got from an AI tool. Frontmatter is checked with Zod.It also has what you'd expect from a presentation tool:
<Fragment> / <Fragments> (with until / hide), and Shiki highlighting that steps through lines with {1|3-5|all}How it compares to Slidev, Marp, reveal.js and Quarto: Why Astlide?
# Scaffold a new project
bun create astlide my-slides
cd my-slides
bun install
bun run dev
Or add to an existing Astro project:
bun add @astlide/astro
Then configure:
// astro.config.mjs
import { defineConfig } from 'astro/config';
import astlide from '@astlide/astro';
export default defineConfig({
integrations: [astlide()],
});
// src/content.config.ts
import { defineCollection } from 'astro:content';
import { astlideDeckLoader, slideSchema } from '@astlide/astro';
const decks = defineCollection({
// Renders .mdx, .md, and .html slides from src/content/decks/<deck>/
loader: astlideDeckLoader(),
schema: slideSchema,
});
export const collections = { decks };
Scaffold one with the CLI:
bunx create-astlide deck my-talk --theme dark --format mdx # or md | html
Or create it by hand:
src/content/decks/my-talk/_config.json:{
"title": "My Talk",
"author": "Your Name",
"date": "2025-01-15",
"theme": "default"
}
.mdx, .md, and .html can be mixed and sort by name:src/content/decks/my-talk/
├── _config.json
├── 01-cover.mdx
├── 02-intro.md
└── 03-demo.html
Any slide can be a plain .md or self-contained .html file with the same frontmatter as MDX. HTML bodies are rendered verbatim (inline <style> and markup preserved — same trust level as MDX), which is handy for pasting in AI-generated or hand-crafted markup:
---
slideLayout: cover
background: "#0b132b"
---
<style>.hero { font-size: 3rem; }</style>
<h1 class="hero">Everything in one HTML file</h1>
Important: Use
slideLayout(notlayout) — Astro MDX reserves thelayoutkey.
---
slideLayout: default
transition: fade
background: "#1e293b"
class: "text-light"
notes: "Speaker notes shown in presenter/notes mode"
hidden: false
---
This is the beginning of the README. Read the rest at the original. Read the full README ↗