A build system for talks. Write what you will say; dek builds, measures, and ships the rest.
dek treats a talk the way a build system treats code. The source is your talk script, in Markdown; every ## heading becomes one HTML slide, and from the same source dek estimates the timing, lints and measures every slide, and builds a single HTML file, a PDF, a PowerPoint file with its text editable, and a narrated video. A project holds many decks, so the theme and conventions carry forward from one talk to the next. It is designed from the start to be worked on together with AI agents.
Slides exist so that you can talk. Every mainstream tool starts with an empty box and asks you to fill it, and the deck grows more polished as the talk grows harder to deliver. dek starts from the other end: what you will say, in what order, for how long, and only then what should be on screen. The script is the parent. Slides are derived from it.
A talk is not a one-off. A dek project holds many decks. Conventions belong to the project, the look carries forward from your last deck, and every deck owns its script and slides.
Agents need small files. One slide is one HTML file of about forty lines, with an optional stylesheet and script beside it. The edit target is small, the diff is readable, and a broken edit breaks one slide.
Agents cannot see what they render. dek renders each slide and reports overflow, contrast, and missing images as machine-readable diagnostics, so an agent can check and fix its own output.
The three principles and the comparison with Slidev are in Why dek.
Requires Bun 1.4 or later. dek runs on Bun only: it does not run on Node, so use bunx, not npx.
bunx @hajimism/dek init my-talks --deck 2026-04-vite
cd my-talks
bun add -d @hajimism/dek
cd decks/2026-04-viteinit prints these same steps as it finishes. You create the project once. Once dek is a dev dependency of the project, bunx dekc runs it. Three commands remain, and for a live talk that is all there is.
Warning
The package is @hajimism/dek; the command it installs is dekc, not dek. dek on npm is an unrelated package, and bunx dek downloads and runs it. Inside a project, bunx dekc runs the dek installed there; outside one, use bunx @hajimism/dek.
$EDITOR script.md # 1. write what you will say — spend your time here
bunx dekc # 2. dev server: skeleton slides, live reload, lint on save
bunx dekc build # 3. dist/2026-04-vite.html — the whole talk in one fileWrite the script, run dekc, and you can present with the bundled theme without writing a line of HTML.
Working with an agent? Install the official skill with npx skills add hajimism/dek --skill dek, or in Claude Code with /plugin marketplace add hajimism/dek and /plugin install dek@dek; dek-design is an optional skill installed the same way; an agent outside any project can start from llms.txt. See Working with AI Agents.
Continue with Getting Started, or build a real deck end to end in the Tutorial. Every command is listed in the CLI reference.
sample/ is a full project with Playwright, rumdl, and voice, holding three decks about dek itself: why-dek, a twelve-minute explainer built to read as a handout; lightning, a three-minute lightning talk that builds a talk in a terminal; and with-agents, a six-minute talk about handing slides to an AI agent. See sample/README.md.
cd sample
bun install
bun run setup # Chromium for Playwright
bun run dev # or bun run lint:visual / bun run buildbun install
bunx playwright install chromium # once, for the tests that drive a real browser
bun test --watch --timeout=20000
bun run typecheck
bun run check # Biome format + lint
bun run docs:dev # VitePressCI runs biome ci, typecheck, knip, the full test suite (the browser tests in Chromium), docs:build, and scripts/check-package.sh, which installs the packed tarball and runs it.
The documentation site deploys to GitHub Pages through Actions. Once, in the repository settings, set Pages → Source to GitHub Actions.
See CONTRIBUTING.md for the checks a pull request runs, and CHANGELOG.md for what each release changed. Report security issues privately, as SECURITY.md describes.
MIT