Slidev - 개발자를 위한 프레젠테이션 슬라이드
Vite, Vue, Markdown을 기반으로 구축된 웹 기반 슬라이드 제작 도구입니다.
사용 시기
- 라이브 코드 예제가 포함된 기술 프레젠테이션 또는 슬라이드 자료
- 애니메이션이 적용된 구문 강조 코드 스니펫
- 대화형 데모 (모나코 에디터, 실행 가능한 코드)
- 수학 공식 (LaTeX) 또는 다이어그램 (Mermaid, PlantUML)
발표자 노트가 포함된 프레젠테이션 녹화
- PDF, PPTX로 내보내기 또는 SPA로 호스팅
- 개발자 발표나 워크숍을 위한 코드 설명
빠른 시작
pnpm create slidev # 프로젝트 생성
pnpm run dev # 개발 서버 시작 (http://localhost:3030 열기)
pnpm run build # 정적 SPA 빌드
pnpm run export # PDF로 내보내기 (playwright-chromium 필요)
검증: pnpm run dev 실행 후 http://localhost:3030에서 슬라이드가 로드되는지 확인합니다. pnpm run export 실행 후 프로젝트 루트에 출력 PDF 파일이 생성되었는지 확인합니다.
기본 구문
---
theme: default
title: 내 프레젠테이션
---
# 첫 번째 슬라이드
여기에 내용 입력
---
# 두 번째 슬라이드
추가 내용
---는 슬라이드를 구분합니다.- 첫 번째 프론트매터 = 헤드매터 (덱 구성)
- HTML 주석 = 발표자 노트
핵심 참조
| 주제 | 설명 | 참조 |
|---|
| Markdown 구문 | 슬라이드 구분자, 프론트매터, 노트, 코드 블록 | core-syntax |
| 애니메이션 | v-click, v-clicks, motion, transitions | core-animations |
| 헤드매터 | 덱 전체 구성 옵션 | core-headmatter |
| 프론트매터 | 슬라이드별 구성 옵션 | core-frontmatter |
| CLI 명령어 | 개발, 빌드, 내보내기, 테마 명령어 | core-cli |
| 컴포넌트 | 내장 Vue 컴포넌트 | core-components |
| 레이아웃 | 내장 슬라이드 레이아웃 | core-layouts |
| 내보내기 | PDF, PPTX, PNG 내보내기 옵션 | core-exporting |
| 호스팅 | 다양한 플랫폼에 빌드 및 배포 | core-hosting |
| 전역 컨텍스트 | $nav, $slidev, composables API | core-global-context |
기능 참조
코드 및 에디터
| 기능 | 사용법 | 참조 |
|---|
| 줄 강조 | ````ts {2,3}` | code-line-highlighting |
| 클릭 기반 강조 | ````ts {1|2-3|all}` | code-line-highlighting |
| 줄 번호 | `lineNumbers: true` 또는 `{lines:true}` | code-line-numbers |
| 스크롤 가능한 코드 | `{maxHeight:'100px'}` | code-max-height |
| 코드 탭 | `::code-group` (`comark: true` 필요) | code-groups |
| 모나코 에디터 | ````ts {monaco}` | editor-monaco |
| 코드 실행 | ````ts {monaco-run}` | editor-monaco-run |
| 파일 편집 | `` | editor-monaco-write |
| 코드 애니메이션 | `````md magic-move` | code-magic-move |
| TypeScript 타입 | ````ts twoslash` | code-twoslash |
| 코드 가져오기 | `` | code-import-snippet |
다이어그램 및 수학
| 기능 | 사용법 | 참조 |
|---|
| Mermaid 다이어그램 | ````mermaid` | diagram-mermaid |
| PlantUML 다이어그램 | ````plantuml` | diagram-plantuml |
| LaTeX 수학 | `$inline$` 또는 `$$block$$` | diagram-latex |
레이아웃 및 스타일링
| 기능 | 사용법 | 참조 |
|---|
| 캔버스 크기 | `canvasWidth`, `aspectRatio` | layout-canvas-size |
| 슬라이드 확대 | `zoom: 0.8` | layout-zoom |
| 요소 크기 조정 | `` | layout-transform |
| 레이아웃 슬롯 | `::right::`, `::default::` | layout-slots |
| 스코프 CSS | `` 슬라이드 내 | style-scoped |
| 전역 레이어 | `global-top.vue`, `global-bottom.vue` | layout-global-layers |
| 드래그 가능한 요소 | `v-drag`, `` | layout-draggable |
| 아이콘 | `` | style-icons |
애니메이션 및 상호작용
| 기능 | 사용법 | 참조 |
|---|
| 클릭 애니메이션 | `v-click`, `` | core-animations |
| 거친 마커 | `v-mark.underline`, `v-mark.circle` | animation-rough-marker |
| 그리기 모드 | `C` 키 누르거나 `drawings:` 구성 | animation-drawing |
| 방향 스타일 | `forward:delay-300` | style-direction |
| 노트 강조 | 노트 내 `[click]` | animation-click-marker |
구문 확장
| 기능 | 사용법 | 참조 |
|---|
| Comark 구문 | `comark: true` + `{style="color:red"}` | syntax-comark |
| 블록 프론트매터 | `---` 대신 ````yaml` | syntax-block-frontmatter |
| 슬라이드 가져오기 | `src: ./other.md` | syntax-importing-slides |
| 프론트매터 병합 | 메인 진입점이 우선 | syntax-frontmatter-merging |
발표자 및 녹화
| 기능 | 사용법 | 참조 |
|---|
| 녹화 | 카메라를 위해 `G` 키 누르기 | presenter-recording |
| 타이머 | `duration: 30min`, `timer: countdown` | presenter-timer |
| 원격 제어 | `slidev --remote` | presenter-remote |
| 루비 텍스트 | `notesAutoRuby:` | presenter-notes-ruby |
내보내기 및 빌드
| 기능 | 사용법 | 참조 |
|---|
| 내보내기 옵션 | `slidev export` | core-exporting |
| 빌드 및 배포 | `slidev build` | core-hosting |
| PDF 포함 빌드 | `download: true` | build-pdf |
| 이미지 캐싱 | 원격 URL에 대해 자동 | build-remote-assets |
| OG 이미지 | `seoMeta.ogImage` 또는 `og-image.png` | build-og-image |
| SEO 태그 | `seoMeta:` | build-seo-meta |
내보내기 전제 조건: PDF/PPTX/PNG 내보내기를 위해 pnpm add -D playwright-chromium이 필요합니다. 브라우저 오류로 내보내기가 실패하면 이 종속성을 먼저 설치하십시오.
에디터 및 도구
| 기능 | 사용법 | 참조 |
|---|
| 사이드 에디터 | 편집 아이콘 클릭 | editor-side |
| VS Code 확장 | `antfu.slidev` 설치 | editor-vscode |
| Prettier | `prettier-plugin-slidev` | editor-prettier |
| 테마 추출 | `slidev theme eject` | tool-eject-theme |
수명 주기 및 API
| 기능 | 사용법 | 참조 |
|---|
| 슬라이드 훅 | `onSlideEnter()`, `onSlideLeave()` | api-slide-hooks |
| 네비게이션 API | `$nav`, `useNav()` | core-global-context |
일반적인 레이아웃
| 레이아웃 | 목적 |
|---|
| `cover` | 제목/표지 슬라이드 |
| `center` | 중앙 정렬된 콘텐츠 |
| `default` | 표준 슬라이드 |
| `two-cols` | 두 열 (`::right::` 사용) |
| `two-cols-header` | 헤더 + 두 열 |
| `image` / `image-left` / `image-right` | 이미지 레이아웃 |
| `iframe` / `iframe-left` / `iframe-right` | URL 임베드 |
| `quote` | 인용구 |
| `section` | 섹션 구분자 |
| `fact` / `statement` | 데이터/진술 표시 |
| `intro` / `end` | 소개/마무리 슬라이드 |
리소스
GitHub에서 보기
---
name: slidev
description: Create and present web-based slide decks using Slidev with Markdown, Vue components, code highlighting, animations, and interactive features. Ideal for technical presentations, conference talks, code walkthroughs, teaching materials, or developer decks.
---
# Slidev - Presentation Slides for Developers
Web-based slides maker built on Vite, Vue, and Markdown.
## When to Use
- Technical presentations or slidedecks with live code examples
- Syntax-highlighted code snippets with animations
- Interactive demos (Monaco editor, runnable code)
- Mathematical equations (LaTeX) or diagrams (Mermaid, PlantUML)
- Record presentations with presenter notes
- Export to PDF, PPTX, or host as SPA
- Code walkthroughs for developer talks or workshops
## Quick Start
```bash
pnpm create slidev # Create project
pnpm run dev # Start dev server (opens http://localhost:3030)
pnpm run build # Build static SPA
pnpm run export # Export to PDF (requires playwright-chromium)
```
**Verify**: After `pnpm run dev`, confirm slides load at `http://localhost:3030`. After `pnpm run export`, check the output PDF exists in the project root.
## Basic Syntax
```md
---
theme: default
title: My Presentation
---
# First Slide
Content here
---
# Second Slide
More content
<!--
Presenter notes go here
-->
```
- `---` separates slides
- First frontmatter = headmatter (deck config)
- HTML comments = presenter notes
## Core References
| Topic | Description | Reference |
|-------|-------------|-----------|
| Markdown Syntax | Slide separators, frontmatter, notes, code blocks | [core-syntax](references/core-syntax.md) |
| Animations | v-click, v-clicks, motion, transitions | [core-animations](references/core-animations.md) |
| Headmatter | Deck-wide configuration options | [core-headmatter](references/core-headmatter.md) |
| Frontmatter | Per-slide configuration options | [core-frontmatter](references/core-frontmatter.md) |
| CLI Commands | Dev, build, export, theme commands | [core-cli](references/core-cli.md) |
| Components | Built-in Vue components | [core-components](references/core-components.md) |
| Layouts | Built-in slide layouts | [core-layouts](references/core-layouts.md) |
| Exporting | PDF, PPTX, PNG export options | [core-exporting](references/core-exporting.md) |
| Hosting | Build and deploy to various platforms | [core-hosting](references/core-hosting.md) |
| Global Context | $nav, $slidev, composables API | [core-global-context](references/core-global-context.md) |
## Feature Reference
### Code & Editor
| Feature | Usage | Reference |
|---------|-------|-----------|
| Line highlighting | `` ```ts {2,3} `` | [code-line-highlighting](references/code-line-highlighting.md) |
| Click-based highlighting | `` ```ts {1\|2-3\|all} `` | [code-line-highlighting](references/code-line-highlighting.md) |
| Line numbers | `lineNumbers: true` or `{lines:true}` | [code-line-numbers](references/code-line-numbers.md) |
| Scrollable code | `{maxHeight:'100px'}` | [code-max-height](references/code-max-height.md) |
| Code tabs | `::code-group` (requires `comark: true`) | [code-groups](references/code-groups.md) |
| Monaco editor | `` ```ts {monaco} `` | [editor-monaco](references/editor-monaco.md) |
| Run code | `` ```ts {monaco-run} `` | [editor-monaco-run](references/editor-monaco-run.md) |
| Edit files | `<<< ./file.ts {monaco-write}` | [editor-monaco-write](references/editor-monaco-write.md) |
| Code animations | `` ````md magic-move `` | [code-magic-move](references/code-magic-move.md) |
| TypeScript types | `` ```ts twoslash `` | [code-twoslash](references/code-twoslash.md) |
| Import code | `<<< @/snippets/file.js` | [code-import-snippet](references/code-import-snippet.md) |
### Diagrams & Math
| Feature | Usage | Reference |
|---------|-------|-----------|
| Mermaid diagrams | `` ```mermaid `` | [diagram-mermaid](references/diagram-mermaid.md) |
| PlantUML diagrams | `` ```plantuml `` | [diagram-plantuml](references/diagram-plantuml.md) |
| LaTeX math | `$inline$` or `$$block$$` | [diagram-latex](references/diagram-latex.md) |
### Layout & Styling
| Feature | Usage | Reference |
|---------|-------|-----------|
| Canvas size | `canvasWidth`, `aspectRatio` | [layout-canvas-size](references/layout-canvas-size.md) |
| Zoom slide | `zoom: 0.8` | [layout-zoom](references/layout-zoom.md) |
| Scale elements | `<Transform :scale="0.5">` | [layout-transform](references/layout-transform.md) |
| Layout slots | `::right::`, `::default::` | [layout-slots](references/layout-slots.md) |
| Scoped CSS | `<style>` in slide | [style-scoped](references/style-scoped.md) |
| Global layers | `global-top.vue`, `global-bottom.vue` | [layout-global-layers](references/layout-global-layers.md) |
| Draggable elements | `v-drag`, `<v-drag>` | [layout-draggable](references/layout-draggable.md) |
| Icons | `<mdi-icon-name />` | [style-icons](references/style-icons.md) |
### Animation & Interaction
| Feature | Usage | Reference |
|---------|-------|-----------|
| Click animations | `v-click`, `<v-clicks>` | [core-animations](references/core-animations.md) |
| Rough markers | `v-mark.underline`, `v-mark.circle` | [animation-rough-marker](references/animation-rough-marker.md) |
| Drawing mode | Press `C` or config `drawings:` | [animation-drawing](references/animation-drawing.md) |
| Direction styles | `forward:delay-300` | [style-direction](references/style-direction.md) |
| Note highlighting | `[click]` in notes | [animation-click-marker](references/animation-click-marker.md) |
### Syntax Extensions
| Feature | Usage | Reference |
|---------|-------|-----------|
| Comark syntax | `comark: true` + `{style="color:red"}` | [syntax-comark](references/syntax-comark.md) |
| Block frontmatter | `` ```yaml `` instead of `---` | [syntax-block-frontmatter](references/syntax-block-frontmatter.md) |
| Import slides | `src: ./other.md` | [syntax-importing-slides](references/syntax-importing-slides.md) |
| Merge frontmatter | Main entry wins | [syntax-frontmatter-merging](references/syntax-frontmatter-merging.md) |
### Presenter & Recording
| Feature | Usage | Reference |
|---------|-------|-----------|
| Recording | Press `G` for camera | [presenter-recording](references/presenter-recording.md) |
| Timer | `duration: 30min`, `timer: countdown` | [presenter-timer](references/presenter-timer.md) |
| Remote control | `slidev --remote` | [presenter-remote](references/presenter-remote.md) |
| Ruby text | `notesAutoRuby:` | [presenter-notes-ruby](references/presenter-notes-ruby.md) |
### Export & Build
| Feature | Usage | Reference |
|---------|-------|-----------|
| Export options | `slidev export` | [core-exporting](references/core-exporting.md) |
| Build & deploy | `slidev build` | [core-hosting](references/core-hosting.md) |
| Build with PDF | `download: true` | [build-pdf](references/build-pdf.md) |
| Cache images | Automatic for remote URLs | [build-remote-assets](references/build-remote-assets.md) |
| OG image | `seoMeta.ogImage` or `og-image.png` | [build-og-image](references/build-og-image.md) |
| SEO tags | `seoMeta:` | [build-seo-meta](references/build-seo-meta.md) |
**Export prerequisite**: `pnpm add -D playwright-chromium` is required for PDF/PPTX/PNG export. If export fails with a browser error, install this dependency first.
### Editor & Tools
| Feature | Usage | Reference |
|---------|-------|-----------|
| Side editor | Click edit icon | [editor-side](references/editor-side.md) |
| VS Code extension | Install `antfu.slidev` | [editor-vscode](references/editor-vscode.md) |
| Prettier | `prettier-plugin-slidev` | [editor-prettier](references/editor-prettier.md) |
| Eject theme | `slidev theme eject` | [tool-eject-theme](references/tool-eject-theme.md) |
### Lifecycle & API
| Feature | Usage | Reference |
|---------|-------|-----------|
| Slide hooks | `onSlideEnter()`, `onSlideLeave()` | [api-slide-hooks](references/api-slide-hooks.md) |
| Navigation API | `$nav`, `useNav()` | [core-global-context](references/core-global-context.md) |
## Common Layouts
| Layout | Purpose |
|--------|---------|
| `cover` | Title/cover slide |
| `center` | Centered content |
| `default` | Standard slide |
| `two-cols` | Two columns (use `::right::`) |
| `two-cols-header` | Header + two columns |
| `image` / `image-left` / `image-right` | Image layouts |
| `iframe` / `iframe-left` / `iframe-right` | Embed URLs |
| `quote` | Quotation |
| `section` | Section divider |
| `fact` / `statement` | Data/statement display |
| `intro` / `end` | Intro/end slides |
## Resources
- Documentation: https://sli.dev
- Theme Gallery: https://sli.dev/resources/theme-gallery
- Showcases: https://sli.dev/resources/showcases