Step-by-step
How to organize a D&D campaign in Obsidian
An empty Obsidian vault is a blank room with very good lighting. Here is the structure to put in it — eight steps, about an hour, and it holds up at session fifty.
Why campaign notes rot
The first three sessions are tidy. Then you improvise a blacksmith, invent a rival guild mid-combat, and promise the party a favour from a noble you named on the spot. None of it gets written down properly, because writing it down properly would mean deciding where it goes.
Twelve sessions later you have notes everywhere and answers nowhere. The party asks who the blacksmith's sister was, and you cannot tell whether you invented her, whether she has a name, or which file you would even search.
The cure is not writing more. It is one note per thing, a link every time two things touch, and a dashboard that reads those notes back to you. Here is that structure, from an empty vault.
The setup, step by step
-
Make the vault, ignore the settings
Open Obsidian → Create new vault → name it after the campaign or just "Campaigns". Pick somewhere your backup tool already watches: a Dropbox, iCloud or Syncthing folder, or a git repo. Then leave the settings alone. Themes are for later; structure is now.
One vault for all your campaigns is fine and usually better — cross-campaign search, one dashboard, one backup. Separate vaults only if you play in two systems with nothing in common.
-
Seven folders. No more.
The number-one mistake is a folder tree that mirrors your world — a folder per region, a subfolder per city, a sub-subfolder per district. Two months in, you cannot remember whether the blacksmith lives under Places or People, and you file him in both.
Folders answer "what kind of thing is this", never "where does it belong in the world". Links do the world-shape. So:
00-Start-Here/ your own cheat sheet: conventions, shortcuts 01-Campaigns/ one hub note per campaign 02-Characters/ every NPC and PC, one note each 03-Locations/ towns, dungeons, regions, taverns 04-Sessions/ prep and recap notes 05-Quests/ one note per thread, each with a status 06-Factions/ groups that want something 07-DM-Tools/ the DM Screen, random tables, rules you forgetFlat inside each folder. Yes, even with 80 NPCs — search and links do the finding, and a flat folder means there is never a question about where a note goes.
-
One note per thing, named the way players say it
The blacksmith gets his own note, even if it is three lines long. A note that says only "Garruk Stonefist — dwarf, runs the forge, gruff, owes the Guild money" is worth ten times a paragraph buried in session 7, because it has a name, and a name is a link target.
Name notes exactly as the words come out of a player's mouth:
Garruk Stonefist, notNPC - Garruk (blacksmith, Oakhaven). Sessions are the one exception — they want to sort, so number them:S07 - Prep,S07 - Recap. -
Add frontmatter — this is the step that pays off
Frontmatter is the small block of properties at the top of a note, between three dashes. Obsidian treats those as structured fields, which means you can later query them. Without it, your vault is a pile of prose. With it, your vault is a database that happens to be readable.
02-Characters/Garruk Stonefist.md--- type: npc race: Dwarf role: Blacksmith location: Oakhaven faction: The Caravan Guild status: alive campaign: The Missing Caravan tags: npc --- # Garruk Stonefist | | | |---|---| | **Race** | Dwarf | | **Role** | Blacksmith | | **Location** | [[Oakhaven]] | | **Faction** | [[The Caravan Guild]] | ## Appearance Soot-grey beard, burn scars up both forearms, never sits down. ## Motivation Pay off the Guild before they call in the favour. ## Secrets The debt is his brother's. He has not told anyone. ## Appears in - [[S07 - Recap]]Keep the field names identical across every NPC —
location, neverplaceon one note andwhereon another. Dataview matches on exact field names, and this is the single most common reason a query returns an empty table.Locations get
type: location,region. Quests gettype: quest,status: open,questgiver. Sessions gettype: session-recap,date,session_number. Five minutes of consistency now, months of working queries later. -
Link constantly. Tag rarely.
Type
[[and Obsidian offers every note you have. Every mention of a place, person or faction inside another note should be a link — and if the note does not exist yet, make the link anyway. Obsidian will create the note the moment you click it, which is how half a world gets written: you link to a village that does not exist, and a month later you fill it in.The payoff is backlinks. Open Oakhaven and the panel at the bottom shows every note that mentions it — NPCs, quests, the session where it burned down. You never have to maintain that list. It maintains itself.
Links or tags? A link is a thing (a person, a place, a faction). A tag is a state or a category —
#hook-unused,#needs-stats,#recurring. If you could write a note about it, link it. If it only describes a note, tag it. Ten tags total is plenty; forty tags is a second filing system you now have to remember. -
Install Dataview and build the DM Screen
Settings → Community plugins → Browse → "Dataview" → Install → Enable. Then make a note in
07-DM-Toolscalled DM Screen and paste this. It is not a template you fill in — it reads your actual notes, every time you open it.07-DM-Tools/DM Screen.md# 🎲 DM Screen ## 🎯 Open quests ```dataview TABLE campaign, location, questgiver, status FROM "05-Quests" WHERE status = "open" OR status = "in-progress" SORT campaign ASC ``` ## 🧙 All NPCs ```dataview TABLE race, role, location, faction FROM "02-Characters" WHERE type = "npc" SORT file.name ASC ``` ## 🗓️ Recent sessions ```dataview TABLE campaign, date, session_number FROM "04-Sessions" SORT date DESC LIMIT 10 ``` ## 🏰 Locations ```dataview TABLE region, type FROM "03-Locations" SORT region ASC ```Switch the note to reading view and it looks like this — populated entirely from the frontmatter you wrote in step 4:
🎯 Open quests
Quest Campaign Location Status The Missing Caravan Oakhaven Thornwood Road open Debt to the Guild Oakhaven Oakhaven in-progress 🧙 All NPCs
Name Race Role Location Faction Thalia Brightwater Human Innkeeper Oakhaven — Garruk Stonefist Dwarf Caravan master Thornwood Road Caravan Guild Mara Vell Half-elf Fence Oakhaven The Quiet Hand Illustration of the output, not a screenshot. On your machine the rows are your NPCs, and clicking one opens that note.
Empty table? Ninety per cent of the time it is one of three things: the folder name in
FROMdoes not match exactly, a field is spelled differently on some notes, or the frontmatter block is not the very first thing in the file. More query patterns: the Obsidian NPC tracker guide. -
Stop retyping fields — add Templater
You will create dozens of NPC notes. Typing that frontmatter each time is how the convention dies. Install Templater (same Browse dialog), point it at a
_Templatesfolder, and make one file per note type: npc, location, quest, faction, session prep, session recap._Templates/npc.md--- type: npc name: "<% tp.file.title %>" race: "" role: "" location: "" faction: "" status: alive campaign: "" tags: npc --- # <% tp.file.title %> ## Appearance ## Personality ## Motivation ## Secrets ## Appears in -Bind "Templater: Insert template" to a hotkey. New NPC becomes: new note, type the name, hit the hotkey, fill three fields, back to the game.
-
Run the loop: prep → run → recap
Structure only survives if maintaining it takes less effort than not maintaining it. The loop that works:
- Before the session — a
S08 - Prepnote: last session in two lines, three scenes you expect, the NPCs involved (as links), one thing that happens whatever the party does. - During — write names only. A bare list is fine. You are running a game, not taking minutes.
- Within 24 hours — ten minutes on
S08 - Recap: what happened, loot given, loose threads, hooks for next time. Every new name from your scratch list becomes a note — three lines is enough — and every mention becomes a link.
Ten minutes after each session is the entire maintenance cost. Skip it twice and the vault starts lying to you; that is the only way this system fails.
- Before the session — a
The rules, on one line each
- Folders describe kind, links describe world.
- One note per thing, named the way players say it.
- Same field names everywhere, or Dataview goes quiet.
- Link things, tag states.
- Three lines beats no note.
- Ten minutes of recap within a day.
Free resource
Want this vault already built?
Everything above, pre-assembled and free: the folder structure, three templates, the DM Screen with working queries, and both plugins installed and configured. Unzip it into Obsidian and the dashboard is already running — start at step 8 instead of step 1.
- DM Screen dashboard (auto-updating Dataview tables)
- 3 templates: NPC, quest, session note
- Dataview + Templater pre-installed and configured
Download the free vault Name your price — $0 is fine. Delivered by email from Gumroad.
Done-for-you
Or skip the setup entirely
Everything on this page is free to build yourself, and it works. It also takes an evening or three. QuestForge is that build, finished: unzip, click “Trust author”, start writing.
- DM Screen dashboardDataview tables that update themselves: open quests, NPCs, recent sessions, locations, factions.
- 7 templatesCampaign hub, NPC, location, faction, quest, session prep, session recap.
- 1 fully linked example campaign“The Missing Caravan” — learn the system by reading it, then delete it and start your own.
- 2 random tablesd20 “what’s in the room” and d8 “NPC first impression”, for when the players go sideways.
- Plugins pre-installed and configuredDataview + Templater are already in the vault. Unzip, click “Trust author”, done.
- Start Here onboardingA README and a walkthrough note that get you running in about two minutes.
- Lifetime updates + email supportOne-time payment. Every future version is yours.
Questions DMs actually ask
How long does this take to set up?
About an hour from an empty vault if you build it by hand, plus a few minutes of fixing a query that returns nothing. Most of that hour is frontmatter decisions — which is exactly the part a prebuilt vault removes.
Should I use folders or tags for my campaign?
Both, for different jobs. Seven folders for the kind of thing (NPC, location, quest…), tags only for states that cut across kinds — #hook-unused, #needs-stats. If you find yourself making a tag that names a thing, make a note and link to it instead.
Can I do this on an iPad at the table?
Yes. Obsidian's mobile app reads the same vault, Dataview runs on mobile, and the dashboard works. Sync it with Obsidian Sync, iCloud, or any folder-syncing service — the vault is just files.
Do I have to write frontmatter on every note?
Only on notes you want to appear in a table — NPCs, locations, quests, sessions. Lore pages, rules notes and scratch pads need none. And once Templater is in place you never type it by hand again.
What if I already have notes in Google Docs or Notion?
Move the entities, not the prose. Export to Markdown, then spend one evening splitting people, places and quests into one note each with frontmatter — that split is the migration. Dumping a 40-page document into Obsidian gets you a 40-page document in Obsidian.