πβ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.