Building a Campaign Wiki in Markdown
A campaign wiki is the Dungeon Master's interconnected reference — every NPC, location, faction, and plot thread linked into a single web the table can trust two years in. Build it from plain markdown files and wiki-links, and the world remembers its own connections: who serves whom, what happened where, which thread leads to which door.
This is not a session journal, and it is not fiction worldbuilding. It is the persistent knowledge graph underneath both. D&D crossed "more than 50 million fans" worldwide at its fiftieth anniversary in February 2024, and r/DMAcademy now holds well over half a million subscribers asking one recurring question between sessions: how was that NPC connected to that faction again.1 2 Justin Alexander's node-based design — fifteen years old and still the most-cited structural theory in the hobby — answers it. "you can think of each node as a 'point of interest,'" he wrote in 2010; a campaign is locations, people, organizations, and events, and the connections between them are the campaign.3 A wiki of linked markdown files is that graph, made literal, owned outright, and readable in any decade.
What a campaign wiki is, and what it is not
A campaign wiki is a reference graph, not a diary. Each NPC, location, faction, and plot thread is one page; every mention of a name links to that page. A session log records what happened, in order. A wiki records what is true, cross-referenced — so a DM can trace how Mavros connects to the cult in a glance.
The distinction matters because the two artifacts fail differently. A session log fails when it is unwritten; a wiki fails when it is unlinked. A DM can keep meticulous session notes — capture during play, a cleanup pass within forty-eight hours, the in-session workflow our companion guides cover — and still lose the campaign, because a stack of dated session files holds no map of how the world connects. The wiki is the connective layer. Mike Shea, who runs a weekly table as Sly Flourish, puts the design constraint plainly: "Our notes are just for us. They don't have to carefully capture and record every aspect of our campaign…"4 The wiki captures relationships, not transcripts. It is the smallest graph that still answers the questions the table asks.
The folder structure for a campaign wiki
A campaign wiki is a folder of plain files, one entity per file. Five folders carry a campaign for years: npcs, locations, factions, plots, and lore. A sixth — sessions — stores the chronological log that feeds the wiki, but the wiki proper is the first five. Every file is markdown. Every cross-reference is a wiki-link.
campaign-wiki/
├── npcs/
│ ├── veronica-thorn.md
│ ├── lord-mavros.md
│ └── ...
├── locations/
│ ├── threshold.md
│ ├── the-grey-tower.md
│ └── ...
├── factions/
│ ├── the-ashen-hand.md
│ ├── threshold-watch.md
│ └── ...
├── plots/
│ ├── the-missing-courier.md
│ ├── the-bound-fiend.md
│ └── ...
├── lore/
│ ├── deities.md
│ ├── calendar.md
│ └── histories.md
├── sessions/
│ └── 2026-05-17-session-02.md
└── templates/
├── npc.md
├── location.md
├── faction.md
└── plot.md
The folder that distinguishes a wiki from a session journal is factions/. Factions are the connective tissue — the reason an innkeeper and a tower and a courier belong to the same story. Nicole van der Hoeven, whose Obsidian-for-D&D tutorials became standard reference in the r/ObsidianMD community, describes the discipline that makes the graph queryable: "I use metadata for every page in my campaign so that I can use the excellent Dataview plugin later to find whatever I want."5 The folders are the skeleton. The links inside the files are the nervous system.
How wiki-links turn names into a graph
Wiki-links are the mechanism that makes a wiki a wiki. A wiki-link is the double-bracket phrase — [[Lord Mavros]] — that turns any name into a node and any node into a destination. Write a name in three files and the target page collects three backlinks automatically. The graph builds itself while the DM is writing something else entirely.
The convention descends from the first wiki, WikiWikiWeb, which Ward Cunningham launched on March 25, 1995; Cunningham's site joined capitalized words into links, and the bracket syntax that followed in later wikis became the standard every modern markdown tool now reads.6 Obsidian's own documentation describes the payoff exactly: in its graph view, "Circles represent notes, or nodes. Lines represent Internal links between two nodes," and "the more nodes that reference a given node, the bigger it gets."7 That last clause is the campaign wiki's gift to a busy DM — the most-linked NPC is, visibly, the most important NPC, and the DM never decided that on purpose. Importance emerges from the links. The villain the players keep returning to becomes the biggest node on the screen, and the side character nobody asked about stays small. The structure tells the truth about the campaign that the DM's memory would flatter.
The four wiki templates: NPC, location, faction, plot
Templates remove the cost of the blank page and force every entity to declare its connections — metadata on every page, in van der Hoeven's discipline.5 Four templates carry the whole wiki: an NPC, a location, a faction, and a plot thread. Each ends with a links section, because an unlinked entity is an orphan node the campaign forgets.
NPC — templates/npc.md:
# {{name}}
**Lives in:** [[{{location}}]]
**Faction:** [[{{faction}}]]
**First appeared:** [[2026-05-17-session-02]]
**Status:** alive | dead | missing | unknown
## One-line essence
Who they are in a sentence the DM will remember at the table.
## What they want
One concrete want this month. Not their life goal.
## What they know
- One secret they share if pressed
- One secret they lie about
## Connections
- [[Other NPC]] — relationship in five words
- [[Faction]] — member | enemy | indebted to
- [[Plot: thread name]] — how they touch it
Location — templates/location.md:
# {{location-name}}
**Region:** [[{{region}}]]
**Controlled by:** [[{{faction}}]]
## Three aspects
- A sensory aspect — what it looks, sounds, smells like
- A social aspect — who holds power here
- The wrong thing — the tension a scene can mine
## Who is here
- [[NPC]] — their role in this place
## Plot threads anchored here
- [[Plot: thread name]]
Faction — templates/faction.md:
# {{faction-name}}
**Type:** guild | house | church | cult | watch
**Seat of power:** [[{{location}}]]
**Led by:** [[{{npc}}]]
## What they want
One sentence. The thing they will break the world to get.
## What they fear
One sentence. The lever the players can pull.
## Members
- [[NPC]] — rank or role
## Rival and allied factions
- [[Faction]] — allied | at war | uneasy truce
## Plot threads they drive
- [[Plot: thread name]]
Plot thread — templates/plot.md:
# Plot: {{thread name}}
**Status:** seeded | active | climaxing | resolved | abandoned
**Driven by:** [[{{faction}}]]
**Started in:** [[2026-05-17-session-02]]
## What the players know
- One bullet per fact they have heard. Cite the session.
## What is actually true
- The reveal, written plainly.
## Connected nodes
- [[NPC]] — who advances or blocks this
- [[Location]] — where it surfaces
- [[Plot: other thread]] — how the threads cross
Every template ends with a links section. The link is the data. The renderer is replaceable.
The Status: line on the plot template is the most honest field in the wiki. The "abandoned" tag is the one no DM wants to type — three sub-plots that quietly die because nobody recorded that they died is the failure mode of every long campaign. A typed status string makes the death visible and queryable.
Factions: the connective tissue of the wiki
Factions are what make a campaign wiki a graph instead of a pile of character sheets. A faction page links to its leader, its members, its rivals, and the plot threads it drives. Open one faction file and the DM sees the whole conspiracy — who answers to whom, where the next move surfaces.
This is node-based design wearing a folder. Justin Alexander's framework, published across 2010 and still the structural backbone of how DMs think about scenario connectivity, treats organizations as nodes that bind locations and people into a single network: a node is "the place (either literally or metaphorically) where something interesting can happen," and the design work is wiring the nodes together.3 8 A faction page is that wiring made into a file. When the players ask why the Threshold Watch keeps appearing wherever the Ashen Hand operates, the DM opens factions/the-ashen-hand.md, reads its rival list, follows the link to threshold-watch.md, and finds the debt that connects them — recorded six sessions ago, retrievable in two clicks. The faction is the join in the relational database that the DM never had to build as a database. It is plain text doing the work of a schema.
Reading the wiki: backlinks and queries
The wiki pays for itself at read time. The DM types a name, the backlinks panel shows every file that mentions it, and the question "where did I write about this?" stops being asked. The graph that assembled itself silently during prep becomes a navigation surface during play.
Two reading modes carry the weight. The first is the backlink — a page's automatic list of every other page that links to it. Open lord-mavros.md and the panel names every session, faction, location, and plot file that touched him, in the order they accumulated. The second is the structured query. The Dataview plugin, which has crossed 4.2 million downloads in the Obsidian ecosystem, lets a DM treat the vault "as a database which you can query from" — "every NPC in Threshold," "every plot thread with status: active," "every faction at war with the Ashen Hand."9 The query is read-only over the files; it invents nothing and stores nothing. The same plain markdown that a DM types on a phone in a coffee shop is the database the query runs against. No export. No lock-in. The link is the index, and the index is portable.
Pitfalls common to campaign wikis
Some habits feel like wiki-building but produce orphan pages and dead weight. Encyclopedic front-loading, unlinked islands, prose recaps filed as reference, and a faction for every shopkeeper all cost hours and return nothing the table needs. Cut them. Each one mistakes the volume of the wiki for its usefulness.
The anti-patterns, ranked by how much time each wastes:
- Encyclopedic front-loading. Forty NPC pages written before the players meet anyone will be rewritten when they finally do. Create a page the session a name first matters, not before. The wiki grows from the table outward, never from the index inward.
- Orphan pages. A page no other page links to is invisible — the backlink panel will never surface it, and the graph view will float it alone at the edge. Every new page earns at least one inbound link before it is done. If nothing links to it, the campaign does not need it yet.
- Prose recaps filed as wiki entries. A novelistic retelling of the session belongs in the session log, not in an NPC's file. The wiki holds facts and connections — "owes the Ashen Hand a debt," not three paragraphs of atmosphere.
- A faction for every shopkeeper. Factions are the connective tissue only if they actually connect more than one entity. A "faction" with one member is an NPC. Promote a group to a faction page the moment it links two or more nodes.
- Contradiction across files. If a fact lives in three pages, it will eventually disagree with itself. Each fact gets one home page; everything else links to it. Mavros's allegiance is settled in
lord-mavros.mdand nowhere else.
Mike Shea's organizing principle is the corrective for all five: "Only separate the notes that must be separated."10 A page exists when it has links to hold. Until then it is a line in a list.
Where MNMNOTE fits
A campaign wiki is editor-agnostic. The files are plain markdown, the links are double-bracket syntax, the templates are fenced blocks. Obsidian, Logseq, a code editor, and MNMNOTE all open the same folder and parse [[wiki-link]] identically. The wiki is the system; the app is the reader.
MNMNOTE opens this exact wiki in a browser tab, with no account and no install, and keeps every note stored locally on your own device. A DM can paste the four templates above and have a linked, queryable campaign reference before the players arrive. The session-flow side of this workflow — capture, cleanup, and prep — lives in our guide to organizing a D&D campaign in markdown; the fiction-writer's version, for novelists building invented worlds, is in worldbuilding in markdown. The wiki, the session log, and the story bible are the same plain files in different shapes. Steph Ango's principle holds across all three: "In the fullness of time, the files you create are more important than the tools you use to create them. Apps are ephemeral, but your files have a chance to last."11
World Anvil, Kanka, LegendKeeper, and Obsidian are all real tools built by real people, and each is the right call for some campaigns — alongside them, not against them. A markdown wiki simply makes one promise the structured-database tools cannot: the graph is yours, in a format that survives the company that hosted it.
Frequently asked questions
Six questions surface in nearly every DM's first month building a campaign wiki — about the difference from a session log, app choice, World Anvil and Kanka equivalence, factions, orphan pages, and keeping players out of the wiki. Each answer carries the working consensus from the practitioners cited above.
What is the difference between a campaign wiki and session notes?
A campaign wiki is a cross-referenced reference graph; session notes are a chronological log. The log records what happened, in order. The wiki records what is true about each NPC, location, faction, and plot thread, every mention linked to its home page. The wiki answers what the log cannot, like how an NPC connects to a faction.
Do I need a special app, or will any markdown editor work?
Any editor that opens markdown and renders [[wiki-links]] works — Obsidian, Logseq, a code editor with a markdown plugin, or MNMNOTE in a browser. The folder structure, the four templates, and the link discipline are the wiki; the editor is interchangeable. Keep the files plain markdown, because they outlast whichever app you start in. Pick the reader, keep the files.
How is a markdown wiki different from World Anvil or Kanka?
World Anvil, Kanka, and LegendKeeper are structured-database tools where every NPC and faction is a typed, validated record. That structure is a strength for some campaigns and overhead for others. A markdown wiki trades typed fields for portability: every file is plain text, openable in any editor in any decade. Both approaches are valid; they fail differently.
Why do factions deserve their own folder?
Because factions are the connective tissue of the graph. A faction page links to its leader, its members, its rivals, and the plot threads it drives, so one file reveals the whole conspiracy. Justin Alexander's node-based design treats organizations as the nodes that bind people and places into a network. Faction pages turn character sheets into a campaign.
How do I avoid orphan pages in my wiki?
Give every new page at least one inbound link before you call it done. An orphan page — one nothing links to — never appears in a backlink panel and floats alone in the graph view, so the DM never finds it during play. If no page wants to link to this one, the campaign does not need it yet.
How do I keep my players out of the wiki?
Keep the wiki private and share only recaps. The plots/, factions/, and lore/ folders hold reveals the players must not see; only the session log's "what happened" summaries go out. Nicole van der Hoeven runs two separate vaults — a private DM vault and a player-facing one. The same separation works by convention in one MNMNOTE workspace.
The wiki is the graph
A campaign deserves a reference that links its own world — not a diary of dates, but a graph of connections the table can trust two years in. Build it from plain markdown and wiki-links, and the NPCs, locations, factions, and threads remember how they relate. The links are the campaign. The files are yours.
MNMNOTE (mnmnote.com) opens this exact wiki in your browser, with no account and no install.
References
Footnotes
-
Wizards of the Coast / PRNewswire. "Dungeons & Dragons Celebrates 50th Anniversary in 2024 with More than 50 Million Fans." Press release, 2024-02-12. https://www.prnewswire.com/news-releases/dungeons--dragons-celebrates-50th-anniversary-in-2024-with-more-than-50-million-fans-302059661.html — Verbatim headline phrase: "More than 50 Million Fans." Accessed 2026-06-03. ↩
-
subredditstats.com. "r/DMAcademy Subreddit Stats." https://subredditstats.com/r/dmacademy — r/DMAcademy subscriber count. The live figure is JS-rendered (the cited page injects the number client-side rather than serving it in static HTML), and independent aggregators disagree on the exact total, reporting figures in the roughly 615,000–700,000 range when observed in May–June 2026; the post therefore characterizes the community as "well over half a million subscribers" rather than pinning a precise count. Accessed 2026-06-03. ↩
-
Alexander, J. "Node-Based Scenario Design — Part 9: Types of Nodes." The Alexandrian, 2010-06-14. https://thealexandrian.net/wordpress/8049/roleplaying-games/node-based-scenario-design-part-9-types-of-nodes — Verbatim: "you can think of each node as a 'point of interest'. It's the place (either literally or metaphorically) where something interesting can happen." Node categories named: locations, people, organizations, events, activities. Accessed 2026-06-03. ↩ ↩2
-
Sly Flourish (Mike Shea). "Organizing Your RPG Prep Notes." https://slyflourish.com/organizing_notes.html — Quote (truncated): "Our notes are just for us. They don't have to carefully capture and record every aspect of our campaign…" (full sentence continues: "as though we were going to hand it to someone else"). Accessed 2026-06-03. ↩
-
Van der Hoeven, N. "Non-Lazy DMs Use Obsidian for D&D." 2021-09-30. https://nicolevanderhoeven.com/blog/20210930-non-lazy-dms-use-obsidian-for-dnd/ — Verbatim: "I use metadata for every page in my campaign so that I can use the excellent Dataview plugin later to find whatever I want." Accessed 2026-06-03. ↩ ↩2
-
Wikipedia. "WikiWikiWeb." https://en.wikipedia.org/wiki/WikiWikiWeb — The first wiki, launched by Ward Cunningham on March 25, 1995; pioneered CamelCase hyperlinking. The double-bracket
[[wiki-link]]convention was popularized by later wiki software and is now read identically by modern markdown tools. Accessed 2026-06-03. ↩ -
Obsidian. "Graph view." https://obsidian.md/help/plugins/graph — Verbatim: "Circles represent notes, or nodes. Lines represent Internal links between two nodes," and "The more nodes that reference a given node, the bigger it gets." Accessed 2026-06-03. ↩
-
Alexander, J. "Node-Based Scenario Design — Part 1: The Plotted Approach." The Alexandrian, 2010-05-27. https://thealexandrian.net/wordpress/7949/roleplaying-games/node-based-scenario-design-part-1-the-plotted-approach — The foundational essay framing scenarios as networks of connected nodes rather than linear plots. Accessed 2026-06-03. ↩
-
Obsidian Stats. "Dataview — Obsidian Plugin." https://www.obsidianstats.com/plugins/dataview — Dataview at 4,288,858 downloads (more than 4.2 million) as of access; plugin lets users "treat your Obsidian Vault as a database which you can query from." Accessed 2026-06-03. ↩
-
Sly Flourish (Mike Shea). "Organizing Your RPG Prep Notes." https://slyflourish.com/organizing_notes.html — Verbatim: "Only separate the notes that must be separated." Accessed 2026-06-03. ↩
-
Ango, S. "File Over App." 2023-07-01. https://stephango.com/file-over-app — Verbatim: "In the fullness of time, the files you create are more important than the tools you use to create them. Apps are ephemeral, but your files have a chance to last." Accessed 2026-06-03. ↩