# Story Map Turn coordinate-bearing Markdown notes into paged geographic stories. One source document and one config render in three places: a standalone React app, the **Geo Story Map** Obsidian plugin, and a Docusaurus site. [繁體中文](README.zh-TW.md) · [Docs](docs/README.md) ## Install | Where | How | | --- | --- | | Obsidian | Settings → Community plugins → Browse → **Geo Story Map** ([listing](https://community.obsidian.md/plugins/geo-story-map)) | | React | `npm install @story-map/react-story-map react react-dom` | | Docusaurus | `npm install @story-map/remark-story-map react react-dom` | ## Quick start A StoryMap document is a normal Markdown file with `story-map: true` frontmatter and one fenced configuration block. Add notes under the `noteFolder` you name: ````markdown --- story-map: true --- ```story-map title: Chile Trip map: theme: vintage center: [-33.4489, -70.6693] zoom: 6 noteFolder: Travel/Chile/Places order: asc dateField: date-created ``` ```` ```markdown --- story-map-note: true title: Santiago location: [-33.4489, -70.6693] date-created: 2026-01-15 --- ``` `noteFolder` finds every note marked `story-map-note: true`, recursively, and orders them by `dateField`. Layouts are `card`, `full`, and `timeline`; map themes are `auto`, `light`, `dark`, `vintage`, `cyber`, and `atlas`. You can also paste a legacy ` ```leaflet ` block from the old Obsidian Leaflet plugin and it renders as a plain map, with markers read from a folder — no migration of your notes. ## Working on this repository ```bash corepack enable pnpm install pnpm typecheck pnpm test pnpm build pnpm --filter @story-map/example-react dev # http://127.0.0.1:5173 ``` ## Documentation **Start here** | Guide | What it covers | | --- | --- | | [Source syntax](docs/guides/syntax.md) | Every `story-map` and `leaflet` block key, and the note frontmatter both read. | | [Geo Story Map for Obsidian](docs/guides/obsidian.md) | Install, settings, layouts, note display, AI coordinate lookup. | | [Docusaurus](docs/guides/docusaurus.md) | Publishing stories and legacy maps on a site. | | [React](docs/guides/react.md) | Embedding `` and `` directly. | **Reference and contributor docs** | Document | What it covers | | --- | --- | | [`SPEC.md`](SPEC.md) | Product and architecture contract. | | [`docs/architecture.md`](docs/architecture.md) | Implementation map: packages, data flow, files, APIs. | | [`docs/leaflet-compatibility.md`](docs/leaflet-compatibility.md) | Which legacy `leaflet` keys actually work, and which do not. | | [`AGENTS.md`](AGENTS.md) | Working agreement and definition of done. | | [`RELEASING.md`](RELEASING.md) | npm and Obsidian plugin release steps. | | [`docs/acceptance/`](docs/acceptance/) | Verification evidence. | | [`docs/history/`](docs/history/) | Archived plans. Superseded, not authoritative. | ## Design rule `react-story-map` never imports Obsidian or Docusaurus APIs. Each adapter resolves notes, frontmatter, media and routes into a config *before* render time, so the renderer has one job and the same code runs in every host. ## License MIT — see [LICENSE](LICENSE). Bundled dependency notices accompany the plugin release.