Skip to content

How to Run a Play-by-Post D&D Game: Cadence, Combat and Keeping the Record

A play-by-post game runs on a different clock: days per exchange instead of seconds, and a story that lives in a scrolling thread. How to set a rhythm your players can keep, run combat without waiting on six people, move on without a silent player, and keep a record you can still find things in three months from now.

· 13 min read

What changes when you run D&D by post

Running a play-by-post D&D game means the whole campaign happens in writing: you post a scene, each player replies when they can, and the story moves one exchange at a time in a Discord channel, a forum thread or any shared space your group already reads. Nobody has to be free on the same evening, which is why groups try it. The price is the clock. A scene that takes twenty minutes at a table takes a week in posts, and a fight that takes an hour can take a month.

That changes what the GM's job is. At a table, the hard skill is improvising under time pressure. By post you have all the time you want to write a good scene, and the hard skill becomes pacing: keeping five or six people's replies flowing at a rhythm none of them has to think about. A play-by-post game rarely ends with a bad scene. It ends with silence: one late reply, then a quiet week, then a thread nobody opens.

So most of this guide is about rhythm: a posting cadence agreed before the first scene, GM posts that make replying easy, combat that does not wait on the slowest player, and a routine for moving on without someone. The last part is the one the format makes quietly harder than live play: keeping a record. Everything is written down, and three months in, nothing can be found.

What you get in exchange is real: players compose their turns instead of blurting them, and nobody spends a month staring at a shared calendar. If your group's problem is scheduling and its strength is writing, the trade is a good one.

Set the posting cadence before the first scene

Most play-by-post D&D tips eventually reduce to this one: say the expected posting rate out loud before anyone joins. "Post when you can" sounds generous, and it is how slow games die, because the fastest player sets the pace, the slowest one sets the tone, and nobody knows which one they are allowed to be.

Pick numbers your slowest committed player can keep in a bad week, not a good one. A reply window measured in days suits most adult groups; what matters is that it is a number. Then make your own rhythm just as explicit. A GM who advances the scene on a fixed schedule, every other evening or three set days a week, tells players exactly when the world will move, and stops them refreshing the thread to find out.

Write the rules down as a short charter and pin it where every player will see it. The one below covers the decisions that otherwise get made in an argument six weeks in. Change every number in it; just do not leave any of them blank.

Play-by-post table charter (copy this)

PLAY-BY-POST TABLE CHARTER
Campaign: ______________   GM: ______________

POSTING RHYTHM
Players: at least one in-character post every ___ days.
GM: advances the scene every ___ (or on: ____________).

THE SKIP RULE
No reply within ___ hours of a GM post: the GM moves your
character for that round. Safe actions only - nothing
permanent spent, no big decisions, never killed.

AWAY?
Post "away until ___" out of character. Your character
follows the party quietly until you are back.

WHERE THINGS GO
In character: __________   Out of character: __________
Character sheets: __________   Dice rolls: __________

POST FORMAT
Character name first. Speech in quotes. Out-of-character
notes in (brackets) at the end. One post per round.

COMBAT
Players post in any order. Then the GM resolves the
round, enemies included, in one post.

LEAVING THE GAME
Say so. Your character gets a proper exit, not a
vanishing.

Play by post on Discord or a forum: setting up the space

The platform matters less than the separation. Wherever you play, a play-by-post campaign needs at least three places: one for in-character posts, one for out-of-character talk (questions, rules checks, absence notices, banter), and one for character sheets. Mixing in-character and out-of-character posts in a single stream is the setup mistake that costs the most later, because the story becomes unreadable under the chatter, and then unrecoverable.

On a forum, that means one thread per scene, a standing out-of-character thread, and a first post in the game thread that you keep editing as a living index: the current scene, where the party is, who is away. Old scenes sit in order where anyone can reread them.

On Discord, the same structure maps onto a handful of features, and most of them have a setting that trips up a slow game. The exact options are in the table at the end of this page, sourced to Discord's own help center:

  • Threads, one per scene. A thread closes itself and drops out of the channel sidebar after a few days without a post, three by default, which a slow scene will hit constantly. Closing is not deleting, and the next post reopens it. Set the inactivity timer to its longest option and most of the problem goes away.
  • Or a forum channel, with one post per scene. Forum channels only exist on servers with Discord's Community setting switched on. Tags can be made mandatory, which is a cheap way to mark each scene by chapter or as open or finished, and idle posts move to an Older Posts section rather than disappearing.
  • One pinned post per forum channel. Spend the slot on the index or the charter, not on an announcement, because there is only one.
  • Private threads for whispered scenes: the rogue scouting alone, a secret letter from a patron. Discord's help article on server caps (edited March 2026) lists private-thread limits for every server from Base up, and an editor's note on its threads announcement says the same; only the older Threads FAQ (last edited November 2024) still says Level 2 boosting. Whoever creates one needs the Create Private Threads permission. If your server does not offer them, a direct message works instead, as long as you copy what it decided back into the main record.
  • A length cap per message. GM narration over the cap is converted into a text file instead of being posted as a message, so split long posts by hand before you send them.
  • Search reaches into threads. Searching a channel includes every thread inside it, which makes a naming habit pay for itself: each character's name spelled one way, each scene titled with a number.

Write GM posts that end on a decision

At a table, a vague prompt costs a few seconds of silence. By post, "what do you do?" addressed to everyone costs a day, because each player waits to see whether someone else answers first. The most useful habit in play-by-post GMing is ending every post on a decision addressed to a named person.

A good GM post does three jobs in order: it resolves what the players just did, it shows what changed because of it, and it hands specific people a specific choice. Everything else, scenery and NPC speeches included, is optional, and it should get shorter as the campaign goes on, because long posts get skimmed, often on a phone.

  • Name who you are asking. "Kestrel, the guard is reaching for the bell. Do you stop him?" gets an answer. "The guard reaches for the bell" gets a thread full of people waiting for each other.
  • Invite conditional posts. A player who writes "if the gate is open I go straight to the archive; if not, I wait for Sorrel" has just saved you a full round-trip.
  • Fold trivial rolls into the narration. Ask for a roll only when failure would be interesting; otherwise use the obvious result and move on. Every requested roll is one more reply you are waiting on.
  • Batch NPC dialogue. Let an NPC say everything they would plausibly say in one post, instead of trading single lines across a week.
  • Move the clock yourself. When a scene has done its job, close it in your own post ("by nightfall you reach the ford") rather than waiting for the players to agree it is over. They rarely will.

GM post skeleton (copy this)

RESOLVE   what the last round of posts achieved
          (one or two sentences - results, not process)

CHANGE    what is different now because of it
          (a new threat, a new fact, a new place)

ASK       a decision, addressed by name
          Kestrel: _________________________________?
          Everyone else: ___________________________?

NEXT GM POST: __________   (from the charter)

Run combat without waiting on initiative

Strict initiative is the slowest thing you can bring into a play-by-post game. Each turn waits on one person, so a round with five players and four monsters is nine round-trips, and one slow player stalls everyone queued behind them, every round. A fight that fills an evening at the table fills a season this way, which is how campaigns end in the middle of a goblin ambush.

The fix is to stop ordering the players at all. Run each round in two phases: players post their actions in any order inside the reply window, then you resolve all of them, and the enemies' turn, in a single post. One round becomes one round-trip. You lose some tactical precision (two players will occasionally both swing at the goblin the first one already dropped), and the right response is to rule generously rather than bring the order back.

  • Decide what a missing player does before it happens. The charter's skip rule applies in a fight too: a character whose player misses the window takes a safe default, such as defending, holding position or a basic attack, and never spends anything limited.
  • Use zones, not a grid. Near the door, on the stairs, behind the cart: that is enough positioning for most fights, and it survives being described in text. If your table genuinely needs a battle map, post one image per round and accept that this is the format's weak spot.
  • Make rolls visible. Use a shared dice roller or a dice bot in the out-of-character channel, so results land where everyone sees them, or agree that players roll honestly and report. Pick one and write it in the charter.
  • Run fewer, smaller fights. A fight that is not about anything costs a month of real time by post. Settle trivial encounters in one narrative post and keep full combat for the ones that change the story.

When a player goes quiet: the skip rule

Silence is the normal state of a play-by-post game, so a missed reply should trigger a routine, not a conversation. When the reply window passes, move the character yourself, with a small, safe action in keeping with what they were doing, and post the round. The game keeps moving and the player loses nothing they cannot pick back up.

The floor is the same one that protects any absent character: while you are steering them, they do not die, they do not spend anything permanent, and they do not make choices their player would want a say in. The missed-session guide covers three ways to handle an absent character at a live table, and all three translate directly to posts.

Two skips in a row is a different signal. Send one private, friendly message, not a ping in the channel, asking whether the cadence still works for them. Lives change, and the kind answer is often a quieter role or a graceful exit rather than a player who feels they are holding everyone up. If they step away, give the character a proper exit in the fiction: they stay at the last town, take the patron's job, ride home. A character who simply stops existing leaves the rest of the table wondering who is next.

And recruit into the empty seat. A newcomer to a play-by-post campaign can read everything that has happened before they write a word, which makes an open seat far easier to fill mid-campaign than it is at a live table.

Keep the record: the continuity problem play-by-post creates

A recorded table has a memory problem because nothing was written down. A play-by-post campaign has the opposite problem: everything was written down, across hundreds of posts, and the line where the duke named his price is somewhere in month two. Scrolling is not a memory system, and it gets worse the longer the campaign runs, which is exactly when you need it most.

Three habits fix most of it, and each costs minutes:

  1. Close every scene with a summary post: what happened, who was met, what is now owed or promised, what the party still wants to know. Three to five lines. It is the post you will read instead of the scene, and the seed of a weekly recap if your players want one.
  2. Keep a living index in the pinned post or the first post of the game thread, edited as you go: the current scene, where the party is, the open threads, and a link to each closed scene's summary.
  3. Keep the NPC list outside the thread. Play-by-post tends to spawn more named characters than live play, because you have time to name everyone, and a separate list (name, a few words, where they were met, what they want) stops them blurring. An NPC tracker template gives you the columns.

Scene-close summary post (copy this)

END OF SCENE ___: ______________________________
Posts from ____________ to ____________

WHAT HAPPENED
- 
- 

WHO WE MET   (name + a two-word tag)
- 

OWED, PROMISED OR DECIDED
- 

WHAT WE STILL WANT TO KNOW
- 

NEXT SCENE OPENS: ______________________________

Your thread is already a transcript

A recorded table has to pay, in time or money, for a word-for-word text of its game. A play-by-post game generates one for free. Copy a week or a chapter of in-character posts into a plain-text file, one file per chunk, and you have something you can search, archive, and hand to software.

That text is better than a transcript of audio in two ways. The words are exact, invented names included, spelled the way the writer meant them. And every post already carries the name of whoever wrote it, which is attribution a recording only gets from per-speaker tracks or speaker detection.

Keep the out-of-character chatter out of the file. Rules questions, scheduling and jokes about the snacks are noise to a reader in six months, and worse noise to software, which may turn a player's username or a running joke into an entry of its own. The separate channels pay off a second time here.

What you do with the file depends on how much you want automated. The no-cost route is to paste a chunk into a general-purpose AI assistant and ask for a summary and a list of names; the NotebookLM guide covers that workflow and where it falls short. Campaign tools go further: DM Scribe imports a pasted log or a .txt or .md file and builds a wiki and a recap from it, though it is built around recorded audio first, and a campaign that will only ever be text is closer to what Archivist is built around.

The hybrid: live sessions, with the gaps played by post

A play-by-post campaign does not have to be all or nothing. Plenty of live groups run the space between sessions by post: shopping, downtime projects, letters to NPCs, one character's solo errand. Table time then goes to the scenes that need everyone at once. It is the same format at lower stakes, and the cheapest way to find out whether your group enjoys writing before you commit a whole campaign to it. (Open tables with rotating players use text the same way between expeditions; the West Marches page covers that case.)

The catch is that the record now lives in two places: the notes or recordings from live sessions, and the posts in between. Pick one home for the summaries and make both halves feed it.

Who should not run a game by post

Play-by-post shares a rulebook with table play and very little else, and some groups should not switch. If your players want fast tactical combat on a grid, every fight will frustrate them. If nobody at the table enjoys writing, replies shrink to one line and the game starts to feel like filling in a form. And if the real problem is that two people cannot commit to anything, a slower format will not fix it. It will hide it for a month, and then the game will end.

If that sounds like your group, a shorter live session at a time everyone can make, or a one-shot to test the water, is the better answer, and a one-page prep checklist keeps a short session from costing a long evening of prep. Play by post rewards players who would rather write a good paragraph on Thursday than say a quick line on Saturday. If that is your table, the format is a real gift.

Discord settings that matter for a slow game, with sources

Every third-party figure quoted above, with where it came from and when it was checked. Prices move — if a date here is old, verify before relying on it.

WhatValueSource
Discord threads: Hide After InactivityDefault 3 days; can be set to 1 hour, 24 hours or 7 days. "Closing a Thread doesn't mean it will be deleted"; typing in a closed thread reopens itsourceas of 2026-10-03
Discord threads: search"Searching in a channel will include results from all threads in that channel"sourceas of 2026-10-03
Discord private threads"Private Threads are now available for all servers!" (an undated editor's note on Discord's July 2021 threads announcement)sourceas of 2026-10-03
Discord private threads: the help-center FAQ"Level 2 server boosted servers will have access to Private Threads. You will also need the Create Private Threads permission to create private threads." (article text last edited November 2024)sourceas of 2026-10-04
Discord private threads: server capsThe "Server Thread Caps" table gives "Server members in a private OR public thread" as 1000 at Base and "Same" at Levels 1 to 3; the article marks a feature a tier lacks "N/A" (article text last edited March 2026)sourceas of 2026-10-04
Discord forum channels: availabilityCommunity must be enabled on the server to create forum channelssourceas of 2026-10-03
Discord forum posts: Hide After InactivityInactive posts move to the Older Posts section after 1 hour, 24 hours, 3 days (default) or 1 week; unless locked, a post can be reopened at any timesourceas of 2026-10-03
Discord forum channels: tags and pinsTags can be required before a member posts, and posts can be filtered by tag; one pinned post per forum channelsourceas of 2026-10-03
Discord message length2,000 characters per message; longer messages "will be converted into a text file"; 4,000 with Nitrosourceas of 2026-10-03

How we sourced this: Eight rows come from Discord's own help center at support.discord.com and one, on private threads, from Discord's own blog, each read on the date shown. The help-center article pages answer automated browsers with a challenge page, so their text was read through the help center's own article API on the same domain. That API dates the Threads, Forum and Sending Messages articles' text to 2024 (April to November), so they can lag the product: the Threads FAQ still says private threads need Level 2 boosting, while the server-caps article (edited March 2026) lists private-thread limits from Base up. Discord renames and moves these settings without notice, so if a label here does not match your app, trust the app. This page deliberately describes no channel-export tools: copying the thread text works on every platform.

Related guides

All guides