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.

Free DM Quick-Start Vault QuestForge — $129

Updated 14 September 2026 · 7 min read · 8 steps

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

  1. 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.

  2. 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 forget

    Flat 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.

  3. 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, not NPC - Garruk (blacksmith, Oakhaven). Sessions are the one exception — they want to sort, so number them: S07 - Prep, S07 - Recap.

  4. 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, never place on one note and where on 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 get type: quest, status: open, questgiver. Sessions get type: session-recap, date, session_number. Five minutes of consistency now, months of working queries later.

  5. 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.

  6. Install Dataview and build the DM Screen

    Settings → Community plugins → Browse → "Dataview" → Install → Enable. Then make a note in 07-DM-Tools called 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:

    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 FROM does 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.

  7. 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 _Templates folder, 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.

  8. 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 - Prep note: 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.

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.