DND.chat Docs
The Products

DND.chat — The AI-DM Tavern

DND.chat is the campaign tavern — chat channels, server-audited dice, slash commands, an always-on Autopilot DM, text-chat combat, Discord mirroring, and session scheduling.

DND.chat is where your campaign lives between maps: a per-campaign tavern with chat channels, dice that are rolled and logged on the server, a full set of slash commands, and an optional AI Dungeon Master that can run an imported adventure when you want one. Combat happens entirely in text — no virtual tabletop required — and every result, human-typed or AI-rolled, is written to the same audit log.

It reads the same shared library DNDCards.com builds, so the monsters, NPCs, and characters you prep on your board are the cards you conjure here. See How It All Connects for the shared spine.

Run it with or without AI

DND.chat is a complete chat-and-dice table on its own — the AI is optional, and stays off until you turn it on. You can run an entire campaign by hand, async (play-by-post) or live at a scheduled session, and never touch a model.

What works with no AI at all — and is always free:

  • Campaign chat across the five channels — threads, whispers, @mentions, pins, reactions, and image attachments.
  • /roll auditable dice, with advantage/disadvantage and character skill modifiers.
  • /summon to conjure your shared cards onto the table.
  • The full combat tracker/init initiative, /attack resolution, HP, conditions, and death saves.

The AI is purely additive and opt-in:

  • The Autopilot DM only runs once you import or generate an adventure and press Start — a human DM is the default.
  • The assists (/recall, /catchup, /gm), roll color-commentary, and session recaps are each off unless enabled, and each has a free, non-AI fallback (or is simply absent without a key).

Bring the AI in when you want a solo or unattended table — or skip it entirely and run the game yourself.

The Tavern

Every campaign automatically gets a chat_space with five default channels:

ChannelPurpose
The TableIn-character play; where the Autopilot DM and combat posts land
Out of CharacterTable talk and logistics
Lore & NotesCampaign reference
Loot & RewardsTreasure and rewards (loot-on-kill posts here)
Session PlansScheduling, RSVPs, and recaps

Channels carry realtime messages, threads, reactions, pins, edits, @mentions, whispers, image attachments (served from a CDN), and search. Sign in with the same account you use on DNDCards.com — there's nothing separate to create. New accounts get a First Campaign spun up on first sign-in, and the channels are created lazily the first time you open a campaign.

Auditable dice

Dice are never rolled in your browser. Every roll is computed server-side and written to a roll_events row with the formula, the total, and a full breakdown — per-die results, advantage handling, and natural-20 / natural-1 flags. The source is always dnd.chat.

The chat dice message and its audit row share one rollEventId, so the result you see in chat is the exact result that was logged — there is no second, hidden roll. The roll log is campaign-scoped and live, and a dice tray in the sidebar lets you click a past formula to re-roll it.

A few honest details worth knowing:

  • The engine has safety caps (per-group die counts and sides, total dice, and modifier range) and falls back to a single 1d20 with a warning if it can't parse your formula — still logged.
  • Advantage and disadvantage apply only to a lone 1d20 (keep the higher / lower).
  • The randomness uses Math.random(). "Auditable" here means fully logged and reproducible in the record — not a cryptographic commit-reveal scheme.
/roll 1d20+5          → audited attack roll, posted to the channel
/r adv 1d20 stealth   → advantage 1d20 + your character's Stealth modifier

Slash commands

The tavern is driven by slash commands. The full table — with aliases, role gating, and which commands post to chat versus run privately — lives in the Slash Command Reference. In brief:

CommandWhat it does
/roll (/r)Roll dice; optional adv/disadv and a trailing skill name applies your character's modifier
/summon (/card)Conjure a shared campaign card onto the table; versus= stages a dual-card showdown
/attackAuto attack-vs-AC with hit/miss/crit, then auto-rolls damage and syncs HP
/w (/whisper)Private message to one party member
/pinDM-only; pins the most recent message
/sceneAsk narrative distance (anyone) or set it (DM)
/init, /sheetJump to the initiative tracker / toggle your character sheet
/recall (/lore, /chronicle)Ask "the Chronicle" a campaign-memory question
/catchup (/missed)Summarize the last ~45 messages for a returning player
/gm (/codm, /assist)DM-only private co-GM nudge (shown only to you, never logged)
/helpList the commands available to your role

The AI assists (/recall, /catchup, /gm) need an OpenAI / narration key; without one they reply that "the Chronicle is quiet." A /summon with no match suggests conjuring the card in DNDCards.com first — there is no Invoke here and no /summon over on DNDCards; the two products use different words for related ideas on purpose.

The Autopilot DM

The Autopilot DM is an AI Dungeon Master that runs a structured adventure for your table — always available (there's no setup gate), but only active once you start a session, so a table with no autopilot session simply never invokes it. Import a PDF, Markdown, or JSON adventure, or generate a one-shot from a prompt, and it becomes a scene graph the AI narrates scene by scene — calling for checks, advancing the story, and starting fights when the fiction demands them. Read-aloud and AI posts appear as Autopilot DM messages in The Table.

The DM controls it from the Autopilot panel:

ControlEffect
StartPost the opening scene
Next sceneAdvance manually
Pause / ResumeHold or continue
StopEnd the session
Async modeA cron job nudges the story forward while everyone's away

Two guardrails to keep in mind. Usage is capped at 150 turns per session and 400 per campaign per day; hitting a cap auto-pauses with a hand-back message. And module memory is embedded into autopilot_vectors so the AI answers from what actually happened at your table — the same store that powers /recall.

To author your own legally-clean adventure with no AI and no cost, see the Adventure Format reference; to convert a published module into cards and a runnable flow, see the PDF Shredder walkthrough.

Autopilot combat is mechanical, not hallucinated

When the narration decides a scene has turned violent, the Autopilot DM stands up a real encounter — the same chat_encounters / chat_initiative state a human DM drives — auto-rolls initiative, and resolves monster turns through the same audited roll path as everything else. The AI narrates; the math is real and logged.

Two safety rails matter here:

  • If all PCs go down, the engine forces defeat and pauses autopilot — a total party kill is a human decision, not an AI one.
  • The AI never touches an encounter it didn't create.

Combat in text chat

You don't need a battle map to run a fight. The InitiativePanel gives you a round counter, per-entry HP editing for the DM, HP-percentage badges, and condition chips (Bloodied, Critical, Prone, Poisoned, Down). It handles spell saves, concentration, legendary actions, and loot-on-kill posting to Loot & Rewards.

Players never see exact monster HP or AC — only the badges. AC is read server-side for the attack math and never returned to the table. When you do want a grid, the same characters move to DNDWar.com for tactical play.

Discord integration

DND.chat mirrors tavern activity to Discord through a one-way outbound webhook — there is no gateway bot. Dice render as rich embeds (formula, total, breakdown, with NAT 20 / NAT 1 coloring), and conjured cards post as embeds with an art thumbnail and a link back to DNDCards.com.

Two things are deliberately scoped:

  • System messages are never mirrored.
  • Whispers are mirrored only if the campaign opted into discord_post_dms.

In-app and Discord voice are on the roadmap, not shipped.

Session scheduling

In Session Plans you can:

  • Schedule session — set a title and date/time.
  • RSVP with Attending or Maybe.
  • Send an email reminder (via Resend; returns a 503 if email isn't configured on the table).
  • Run an availability poll across the party.
  • Generate a DM-only AI session recap.

The LLM recap costs 50 credits when AI billing is live; if narration AI is off, you're under the key, or you don't have the credits, it falls back to a free structured-markdown recap. Today, during beta, nothing is charged — see One Membership, Every Site and the Credits & Billing reference for what meters and what's always free.

Where to go next