Introduction
What is Narro, and should I be writing markdown or React?
Narro builds presentations out of web technology. A deck is either a markdown file or a tree of React components; either way it renders in a browser, lives in Git, and exports to PPTX, PDF, or a single self-contained HTML file.
Two ways to write a deck
Both modes use the same runtime, the same navigation, and the same export pipeline. Pick by how much control you want, not by how big the deck is — markdown decks can drop into React wherever they need to.
Markdown mode
One .md file, no project to scaffold:
npx @getnarro/cli new deck.md
npx @getnarro/cli dev deck.md
The dialect is designed as a ladder with no cliff: plain markdown → layout directives → per-element Tailwind → your own React layouts → full MDX with live components. You climb it without ever rewriting the deck. See Markdown mode.
React mode
A Vite project where every slide is a component:
npm create narro@latest my-deck
Reach for this when slides need real application logic — live data, custom interaction, a component you already have. See First deck.
And video
@getnarro/video renders a React composition to MP4. It is a separate package with the same
shape of idea: the narration is a list of sentences, the visuals are components, and every
duration is measured from the audio rather than typed. Edit a sentence and the cut moves, the
captions re-page and the .srt regenerates — which is what makes a translation cost what the
original did.
npx narro-video new ./launch-teaser
npx narro-video render ./launch-teaser
See Video.
And terminal demos
@getnarro/terminal holds a terminal session as text: the commands, the pauses, the moments
worth naming — and, once you have run it, the bytes they actually printed. From that one file
comes a GIF, an animated SVG, a still, a terminal on a slide, an embeddable player, or a shot in
a video.
npx narro-terminal render demo.term.json # a GIF
npx narro-terminal record demo.term.json --check # fail when the demo goes stale
Rendering never runs anything — a deck build draws the commands being typed — and record is
the one command that executes, after printing what it is about to run. The pair is what a
screen recording cannot be: --check re-runs the demo and tells you the tool stopped saying
what the demo says.
See Terminal.
Why not PowerPoint
Narro is worth the setup when you need something a WYSIWYG tool cannot give you:
- Code that is really code — a fence in your deck is the same text your editor lints, syntax highlighted at build time, and live components if you want them running on the slide
- Version control — a deck is text, so it diffs and merges
- Reuse — a slide is a component; a component works in the next deck too
- Generation — text in, deck out, which is what makes AI authoring practical
If your deck is five bullet points and a photo, use PowerPoint. Narro is for the cases where you have been fighting the tool.
Packages
| Package | What it is |
|---|---|
@getnarro/annotate | Feedback on a Narro recording — typed notes anchored to a moment, staleness against the cast they were written about, and a briefing a coding agent can act on |
@getnarro/atlas | A spatial canvas for Narro — a camera path as text, one pure camera function over it, and scene providers a deck, a video and a web page all render the same way |
@getnarro/cli | CLI tools for creating and managing Narro presentations |
@getnarro/core | The React runtime for Narro presentations — Presentation, Slide, navigation, transitions, and speaker notes |
@getnarro/docs | Narro’s documentation as data — markdown pages, a generated component API reference, and llms.txt |
@getnarro/docspack | Narro’s documentation as a docspack — version-locked chunks an agent installs once and searches offline |
@getnarro/markdown | Markdown & MDX authoring for Narro presentations |
@getnarro/marketplace | Themes, colour schemes, and templates for Narro presentations |
@getnarro/mcp-server | MCP (Model Context Protocol) server for AI-assisted Narro presentation creation |
@getnarro/replay | Record a web app once and replay it as real DOM — a portable cast format, an embeddable player, and a self-contained HTML page |
@getnarro/shared-ui | Slide components for Narro presentations — headings, text, lists, code, media, charts, and layouts |
@getnarro/terminal | Terminal playbooks for Narro — a text format for a terminal session, a screen that is a pure function of the frame number, and a renderer that draws it on a grid |
@getnarro/video | Frame-deterministic video framework for Narro — a brand system, a React timeline runtime, narration-derived timing, a headless-Chrome renderer, and a scrub studio |
@getnarro/video-marketing | Marketing scene components for @getnarro/video — lower thirds, stat counters, feature grids, pull quotes, device frames, callouts and end cards, all brand-driven and frame-deterministic |
create-narro | Scaffold a new Narro presentation |
The npm package named
narrois unrelated to this project. Everything here is under the@getnarro/scope. The binary callednarrocomes from@getnarro/cli.