Zero-Config Slide Generator β Write Markdown, get beautiful HTML slides instantly.
Bundeck is a fast, zero-configuration presentation tool powered by Bun. It transforms your Markdown files into polished, responsive HTML slides with automatic layout adjustments.
- Markdown First: Write your content in standard Markdown.
- Auto Layout: Automatically adjusts font sizes based on content density.
- Fast Build: Powered by Bun for incredible speed.
- Flexible Styling: Support for CSS classes, columns, and custom attributes.
- Live Preview: Built-in development server with live reload.
- Presenter Mode: Full-featured presenter dashboard with slide notes, timer, laser pointer, and sync across devices.
- Context Menu: Right-click on slides for quick navigation (first/last slide, go to slide number, open presenter mode).
- Hover Navigation: Floating prev/next buttons appear on hover at the bottom-right corner.
- Zero Config: Sensible defaults, just write and run.
bun add -d bundeckOr run directly:
bunx bundeck <your-file.md>Although this tool is built for Bun, you can install it via npm if you have the Bun runtime available in your path.
npm install -g bundeck
# or run directly
npx bundeck <your-file.md>Note: Requires Bun runtime installed on your system.
This project provides a standard Nix flake.
# Run directly
nix run github:halqme/bundeck -- <your-file.md>
# Enter development shell
nix develop github:halqme/bundeckGenerate a static HTML file from your Markdown source.
bundeck presentation.mdOptions:
-o, --output <path>: Specify output file path (default:dist/index.html)-w, --watch: Watch for changes and rebuild--open: Open the generated file in browser-v, --version: Show version number-h, --help: Show help message
Start a local server to preview your slides.
bundeck serve presentation.mdOptions:
-p, --port <number>: Set server port (default: 3000)
Start the server and open http://localhost:3000/presenter in your browser to access the presenter dashboard.
Features available in presenter mode:
- Slide preview β Current slide and next slide shown side-by-side
- Speaker notes β Notes from
::: speakerblocks displayed alongside slides - Laser pointer β Click the π΄ button or press a key to activate; mouse movement is synced to the audience view in real-time
- Timer β Track elapsed time with pause/reset controls
- Progress bar β Visual indicator of presentation progress
- Open view mode β Click the β button to open a new tab with the audience view, synced via BroadcastChannel
Both the static build and server mode include in-viewport navigation:
- Hover navigation β Move the mouse to the bottom-right corner to reveal
βΉandβΊbuttons - Context menu β Right-click anywhere on a slide to access:
- Navigate to first / previous / next / last slide
- Jump to a specific slide number
- Open presenter mode in a new tab (server mode only)
Bundeck extends standard Markdown with powerful layout features.
Configure your slide deck using YAML frontmatter at the top of your file.
title: My Awesome Presentation
author: Me
theme: default
aspectRatio: 16:9
fontSize: MSeparate slides with ---.
# Slide 1
Content...
---
# Slide 2
Content...Create multi-column layouts using ::: columns blocks.
::: columns
:::: col
### Left Column
- Item 1
- Item 2
::::
:::: col
### Right Column

::::
:::Apply CSS classes to elements using {.classname} syntax.
# Centered Title {.center}
This text is highlighted. [Important]{.mark}
{.cover}Add private notes that won't appear on the main slide.
::: speaker
Don't forget to mention the new features!
:::-
Clone the repository:
git clone https://github.com/halqme/bundeck.git cd bundeck -
Install dependencies:
bun install
-
Run tests:
bun run test -
Build the project:
bun run build
For detailed API reference, see API.md.
import { generateSlides, parseSlides } from "bundeck";
// εΊζ¬ηγͺδ½Ώη¨
const markdown = `# Title\n\n---\n\n# Slide 2`;
const html = await generateSlides(markdown);
// γͺγγ·γ§γ³δ»γ
const html = await generateSlides(markdown, {
title: "My Presentation",
theme: "dark",
outputPath: "output.html",
});Bundeck is optimized for speed:
| Scenario | Time |
|---|---|
| 5,000 char Markdown (5 slides) | < 100ms |
| 15,000 char Markdown (10 slides) | < 500ms |
| 50 slides | < 1s |
bundeck/
βββ src/
β βββ cli/ # CLI tools
β βββ core/ # Core parsing and render logic
β β βββ parser.ts # Markdown β token stream (via marked)
β β βββ splitter.ts # Tokens β Slide[]
β β βββ extensions/ # Custom markdown syntax
β βββ client/ # Browser runtime
β β βββ runtime-view.ts # View mode entry (static build)
β β βββ runtime-server.ts # Server entry (view + presenter)
β β βββ core/
β β β βββ navigator.ts # Slide transitions & text scaling
β β β βββ runtime-core.ts # Shared view runtime setup
β β β βββ view-ui.ts # Hover nav buttons & context menu
β β β βββ geometry.ts # Aspect-ratio & coordinate math
β β β βββ types.ts # Navigator options
β β βββ presenter/ # Presenter dashboard UI
β βββ server/ # Development server
β βββ template/ # HTML template & CSS bundling
β βββ types/ # Shared TypeScript types
βββ tests/ # Test suites
βββ styles/ # CSS themes
βββ examples/ # Example presentations
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
MIT
Built with β€οΈ using Bun.