Quickstart
Decks is one npm package, slidev-addon-decks, with a decks command. It runs on top of Slidev and the slidev-theme-the-unnamed base theme, which you install alongside it. Shared authoring guidance supports Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf and OpenCode.
Install, init and scaffold
In a new project:
bun add slidev-addon-decks @slidev/cli slidev-theme-the-unnamed
bunx -p slidev-addon-decks decks init
bunx -p slidev-addon-decks decks new my-talk --story --author "Your Name"
bunx -p slidev-addon-decks decks dev my-talkWith npm, install with npm i slidev-addon-decks @slidev/cli slidev-theme-the-unnamed and run the same commands with npx in place of bunx: npx -p slidev-addon-decks decks init. With pnpm, pnpm add the same packages and run the npx form.
Requirements: Node 20.19+ or 22.12+. Bun is optional.
What init does
init installs shared authoring guidance and agent entry points into the project. It writes:
.claude/agents/deck-author.md, thebuilding-a-deckandfact-checking-a-deckskills, and six rules in.claude/rules/.- Two Claude Code hooks in
.claude/settings.json. Your existing settings and hooks stay;initprints a diff and never adds an entry twice. - A shared reading order in
AGENTS.md, imports inCLAUDE.mdandGEMINI.md, and a thin.github/instructions/decks.instructions.mdreference for Copilot. Codex, Cursor, Windsurf and OpenCode readAGENTS.mddirectly. The guidance is stored once; existing project text is kept. .claude/decks.json, a list of the files it wrote with a content hash for each.
Run it again after upgrading the package. Files you haven’t edited are updated, files you edited are skipped and reported, and --force overwrites the edited ones. A file of yours at one of those paths that init never wrote is left alone even with --force: rename it and re-run. See Writing decks with an agent for what each piece does.
Only Claude Code runs the installed hooks automatically. Other agents must follow the reading order and run decks check and decks lint during each edit cycle.
What new does
decks reads the decks.json registry from the current directory. new creates it when it is missing; init and lint run without one, and every other command stops without it. new takes an alias and an optional directory name, which defaults to the alias. The alias is what you pass to dev, build and export. The directory is created under decks/.
| Flag | Effect |
|---|---|
--story |
Scaffold a story deck: a cover, one stage component, a data/ module and data-sources.md. Without it you get a conventional deck with one cover page. |
--author "Name" |
Byline on the cover (default Your Name). |
--brand "Name", --url example.com |
Write a theme.json for the deck with that brand name and URL for the cover and footer. |
Next
- Writing decks with an agent shows how to ask your agent for a deck once
inithas run. - Your first story deck walks through the files
new --storywrites. - The decks CLI lists every command.