# Introduction

> What Narro is, and which of its two authoring modes you want

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:

```bash
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](/docs/markdown-mode).

### React mode

A Vite project where every slide is a component:

```bash
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](/docs/first-deck).

## 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

<!-- generated:packages -->
| Package | What it is |
| --- | --- |
| `@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/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/shared-ui` | Slide components for Narro presentations — headings, text, lists, code, media, charts, and layouts |
| `create-narro` | Scaffold a new Narro presentation |
<!-- /generated:packages -->

> The npm package named `narro` is unrelated to this project. Everything here is
> under the `@getnarro/` scope. The binary called `narro` comes from
> `@getnarro/cli`.