Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Comprehensive guide for Slidev - a web-based presentation framework for developers. Covers Markdown syntax, layouts, components, animations, theming, and exporting. Use this skill when creating or working with developer presentations using Slidev.
.claude/skills/nicepkg-slidev/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 260% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 186% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 302% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 200% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 880% | 0% |
Slidev is a presentation platform for developers that enables creating slides using Markdown while leveraging Vue and web technologies for interactive, pixel-perfect designs. This skill provides complete guidance for creating, customizing, and exporting Slidev presentations.
Use this skill when:
For complete API reference, advanced features, or edge cases not covered here, fetch the official LLM-optimized documentation:
https://sli.dev/llms-full.txtCreate a new Slidev presentation:
bash# Using pnpm (recommended) pnpm create slidev # Using npm npm init slidev # Using yarn yarn create slidev # Using bun bun create slidev
Or try online at https://sli.dev/new (StackBlitz)
Start development server:
bashslidev # or specify entry file slidev slides.md
Build for production:
bashslidev build
Export to PDF:
bashslidev export
Export to other formats:
bashslidev export --format pptx slidev export --format png slidev export --format md
Format slides:
bashslidev format
Separate slides with --- padded by blank lines:
md# Slide 1 Content here --- # Slide 2 More content
Configure entire deck with headmatter (first YAML block):
md--- theme: default background: https://cover.sli.dev title: My Presentation info: | ## Slidev Starter Presentation slides for developers class: text-center highlighter: shiki ---
Configure individual slides with frontmatter:
md--- layout: center background: ./images/bg.jpg class: text-white --- # Centered Slide Content here
Code with syntax highlighting:
`md
console.log('Hello, World!')
With line numbers:
`md
function greet(name: string) { console.log(Hello, ${name}!) }
With line highlighting:
`md
function calculate() { const x = 10 // highlighted const y = 20 const sum = x + y // highlighted const product = x y // highlighted const difference = x - y // highlighted return sum }
Add notes at the end of slides using comment blocks:
md# Slide Title Content visible to audience <!-- Notes for presenter only Can include **markdown** and HTML -->
Specify layout in frontmatter:
md--- layout: cover --- # Presentation Title
Basic Layouts:
default - Standard layout for any contentcenter - Centers content on screencover - Opening slide for presentationsend - Closing slidenone - Unstyled layoutContent Layouts:
intro - Introduction with title and author detailssection - Marks new presentation sectionsquote - Displays quotations with emphasisfact - Highlights data or facts prominentlystatement - Features affirmations as main contentfull - Utilizes entire screen spaceImage Layouts:
image - Full-screen image displayimage-left - Image on left, content on rightimage-right - Image on right, content on leftIframe Layouts:
iframe - Full-screen web page embeddingiframe-left - Web page on left sideiframe-right - Web page on right sideMulti-Column Layouts:
two-cols - Two-column content separationtwo-cols-header - Header spanning both columns with left/right splitmd--- layout: two-cols --- # Left Column Content for left side ::right:: # Right Column Content for right side
md--- layout: two-cols-header --- # Header Across Both Columns ::left:: Left column content ::right:: Right column content
Navigation:
<Link> - Navigate between slides<Arrow> - Directional lines with customization<VDragArrow> - Draggable arrowsText:
<AutoFitText> - Auto-sizing text to fit container<TitleRenderer> - Display parsed slide titles<Toc> - Table of contents generationMedia:
<Youtube> - Embed YouTube videos<Tweet> - Embed Twitter posts<SlidevVideo> - HTML5 video with autoplayUtilities:
<SlideCurrentNo> - Current slide number<SlidesTotal> - Total slide count<Transform> - Scaling and transformation<LightOrDark> - Theme-based content rendering<RenderWhen> - Conditional rendering by context<VSwitch> - Cycle between content on click<VDrag> - Draggable functionalitymd<Youtube id="dQw4w9WgXcQ" /> <Tweet id="1234567890" /> <Arrow x1="100" y1="100" x2="200" y2="200" /> <AutoFitText :max="300" :min="20"> This text will auto-size </AutoFitText> <Toc minDepth="1" maxDepth="2" />
Create custom Vue components in ./components/ directory. They are auto-imported without manual registration.
Example structure:
./components/
MyComponent.vue
Counter.vue
slides.mdUse in slides:
md<MyComponent /> <Counter :initial="10" />
v-click Directive:
md<div v-click>Appears on click</div> <div v-click>Appears on next click</div>
v-after Directive:
md<div v-click>First</div> <div v-after>Appears with previous</div>
v-clicks for Lists:
md<v-clicks> - First item - Second item - Third item </v-clicks>
Absolute positioning:
md<div v-click="1">Shows at step 1</div> <div v-click="2">Shows at step 2</div> <div v-click="3">Shows at step 3</div>
Relative positioning:
md<div v-click>First</div> <div v-click="+2">Skip one step</div> <div v-click="-1">Same time as previous</div>
Use @vueuse/motion for directional animations:
md<div v-motion :initial="{ x: -80 }" :enter="{ x: 0 }"> Slides in from left </div>
Configure in frontmatter:
md--- transition: slide-left ---
Available transitions:
fadeslide-leftslide-rightslide-upslide-downview-transitionSlidev uses UnoCSS with Tailwind-compatible utilities:
md<div class="grid grid-cols-2 gap-4"> <div class="bg-blue-500 p-4">Column 1</div> <div class="bg-red-500 p-4">Column 2</div> </div>
Create ./styles/index.css:
css.my-custom-class { @apply text-2xl font-bold text-blue-500; }
Add styles to specific slides:
md# Slide Title Content here <style> h1 { color: #3b82f6; } </style>
UnoCSS dark mode utilities:
md<div class="bg-white dark:bg-black text-black dark:text-white"> Adapts to theme </div>
slidevhttp://localhost:3030/exportInstall Playwright first:
bashpnpm add -D playwright-chromium
Export to PDF:
bashslidev export # or specify output slidev export --output my-presentation.pdf
Export to PPTX:
bashslidev export --format pptx
Export to PNG:
bashslidev export --format png
Export with animations:
bashslidev export --with-clicks
Export specific slides:
bashslidev export --range 1,6-8,10
Export in dark mode:
bashslidev export --dark
--output - Custom filename--format - Export format (pdf, pptx, png, md)--with-clicks - Include animation steps--range - Specific slides (e.g., 1,6-8,10)--dark - Use dark theme--timeout - Increase timeout for large presentations--wait - Add delay before export--with-toc - Generate PDF outline./
├─ components/ # Custom Vue components
├─ layouts/ # Custom layouts
├─ public/ # Static assets
├─ setup/ # Custom setup code
├─ snippets/ # Code snippets
├─ styles/ # Custom styles
├─ slides.md # Main presentation file
├─ vite.config.ts # Vite configuration
└─ uno.config.ts # UnoCSS configurationCreate uno.config.ts:
tsimport { defineConfig } from 'unocss' export default defineConfig({ shortcuts: { 'bg-main': 'bg-white text-[#181818] dark:(bg-[#121212] text-[#ddd])' } })
Extend Vite config in vite.config.ts:
tsimport { defineConfig } from 'vite' export default defineConfig({ // Your custom Vite config })
Line Numbers:
`md
function example() { return true }
Line Highlighting:
`md
function calculate() { const x = 10 // highlighted const y = 20 // highlighted const sum = x + y // highlighted return sum }
Monaco Editor:
`md
// Editable code block console.log('Edit me!')
Monaco with Auto-Run:
`md
console.log('Runs automatically')
Mermaid:
`md
graph TD AStart] --> BProcess] B --> CEnd]
PlantUML:
`md
@startuml Alice -> Bob: Hello Bob -> Alice: Hi @enduml
Inline math:
mdPythagorean theorem: $a^2 + b^2 = c^2$
Block math:
md$$ \int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2} $$
Use Iconify icons directly:
md<carbon-logo-github /> GitHub <mdi-heart class="text-red-500" /> Love
Enable drawing on slides with presenter mode. Drawings are synchronized across devices.
Record presentations with audio using the built-in recording feature.
Import slides from other files:
md--- src: ./slides/intro.md --- --- src: ./slides/content.md ---
Create global-top.vue or global-bottom.vue for persistent UI elements:
vue<!-- global-top.vue --> <template> <div class="fixed top-0 left-0 right-0 p-4"> Header content on all slides </div> </template>
Configure in frontmatter:
md--- shortcuts: next: space prev: shift+space toggleOverview: o ---
Enable remote control for presentations:
bashslidev --remote
Access from another device using the displayed URL.
Install theme package:
bashpnpm add slidev-theme-seriph
Configure in headmatter:
md--- theme: seriph ---
default - Built-in default themeseriph - Elegant serif themeapple-basic - Apple-style themebricks - Brick-pattern themeshibainu - Cute Shiba Inu themeBrowse more at https://sli.dev/themes/gallery
Generate theme package:
bashpnpm create slidev-theme
For detailed theme development, see references/theming.md.
slides.md and assetsIf build fails, try:
bash# Clear cache rm -rf node_modules/.vite # Rebuild slidev build
Missing content: Add wait time
bashslidev export --wait 2000
Broken emojis: Install system fonts or use icon libraries
Large file size: Export specific slides or reduce image quality
Specify custom port:
bashslidev --port 3333
Ensure theme is installed:
bashpnpm add slidev-theme-NAME
And configured correctly in headmatter:
md--- theme: NAME ---
For comprehensive documentation on specific topics, see:
references/syntax-guide.md - Complete Markdown syntax referencereferences/components-api.md - Detailed component API documentationreferences/theming.md - Theme creation and customizationreferences/features.md - Advanced features and integrationsbash# Initialize pnpm create slidev # Edit slides.md # Add content with Markdown # Start dev server slidev # Export when done slidev export
bash# Create component mkdir components cat > components/Counter.vue << 'EOF' <script setup lang="ts"> import { ref } from 'vue' const count = ref(0) </script> <template> <button @click="count++"> Count: {{ count }} </button> </template> EOF # Use in slides.md # <Counter />
bash# Install theme pnpm add slidev-theme-seriph # Configure in slides.md headmatter # --- # theme: seriph # --- # Preview slidev
Create slide files:
bashmkdir slides echo "# Introduction" > slides/intro.md echo "# Content" > slides/content.md
Import in slides.md:
md--- src: ./slides/intro.md --- --- src: ./slides/content.md ---
Slidev is built on:
This enables fast development, rich interactivity, and extensive customization options.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 7,222 | 13,551 | +88% | 1 | 1 | 0% | 1,186 | 4,765 | +302% | 0 | 0 | — |
case-02 | pass→pass | 9,152 | 3,236 | -65% | 1 | 1 | 0% | 1,563 | 4,695 | +200% | 0 | 0 | — |
case-03 | pass→pass | 3,385 | 2,946 | -13% | 1 | 1 | 0% | 482 | 4,725 | +880% | 0 | 0 | — |
case-04 | pass→pass | 5,056 | 2,397 | -53% | 1 | 1 | 0% | 744 | 4,647 | +525% | 0 | 0 | — |
case-05 | fail→pass | 8,223 | 2,943 | -64% | 1 | 1 | 0% | 1,294 | 4,655 | +260% | 0 | 0 | — |
case-06 | pass→pass | 11,500 | 2,998 | -74% | 1 | 1 | 0% | 1,720 | 4,615 | +168% | 0 | 0 | — |
case-07 | pass→pass | 6,967 | 3,777 | -46% | 1 | 1 | 0% | 1,212 | 4,817 | +297% | 0 | 0 | — |
case-08 | pass→pass | 5,313 | 2,877 | -46% | 1 | 1 | 0% | 823 | 4,695 | +470% | 0 | 0 | — |
case-09 | pass→pass | 5,532 | 1,886 | -66% | 1 | 1 | 0% | 921 | 4,506 | +389% | 0 | 0 | — |
case-10 | pass→pass | 6,040 | 2,337 | -61% | 1 | 1 | 0% | 993 | 4,552 | +358% | 0 | 0 | — |
case-11 | pass→pass | 5,891 | 2,450 | -58% | 1 | 1 | 0% | 892 | 4,591 | +415% | 0 | 0 | — |
case-12 | pass→pass | 9,168 | 5,285 | -42% | 1 | 1 | 0% | 1,502 | 5,155 | +243% | 0 | 0 | — |
case-13 | fail→pass | 10,376 | 4,089 | -61% | 1 | 1 | 0% | 1,686 | 4,817 | +186% | 0 | 0 | — |
case-14 | pass→pass | 7,284 | 3,199 | -56% | 1 | 1 | 0% | 1,207 | 4,707 | +290% | 0 | 0 | — |
case-15 | pass→pass | 5,007 | 2,792 | -44% | 1 | 1 | 0% | 882 | 4,645 | +427% | 0 | 0 | — |
case-16 | pass→pass | 10,302 | 2,273 | -78% | 1 | 1 | 0% | 1,631 | 4,554 | +179% | 0 | 0 | — |
case-17 | pass→pass | 6,655 | 1,817 | -73% | 1 | 1 | 0% | 1,051 | 4,491 | +327% | 0 | 0 | — |
case-18 | pass→pass | 7,156 | 1,818 | -75% | 1 | 1 | 0% | 1,069 | 4,504 | +321% | 0 | 0 | — |
case-19 | pass→pass | 5,719 | 4,122 | -28% | 1 | 1 | 0% | 923 | 4,938 | +435% | 0 | 0 | — |
case-20 | fail→fail | 5,903 | 4,986 | -16% | 1 | 1 | 0% | 1,060 | 5,161 | +387% | 0 | 0 | — |
case-21 | pass→pass | 5,364 | 5,226 | -3% | 1 | 1 | 0% | 930 | 5,097 | +448% | 0 | 0 | — |
case-22 | pass→pass | 9,309 | 7,360 | -21% | 1 | 1 | 0% | 1,732 | 5,711 | +230% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.