An open source campaign manager for Dungeon Masters and Game Masters.
Prepare sessions, run encounters, and keep track of your campaign.
Run it · What it does · Documentation · API · Changelog
Session notes, combat tracking, and player display controls.
Use demgem to plan sessions, track combat, share maps and handouts, and write recaps. Keep your NPCs, locations, quests, and notes linked to the sessions where you need them. Players can follow initiative, manage their characters, and read what you've shared with them.
You can use it with any game system. The optional SRD 5.2.1 ruleset adds 330 creatures, encounter budgets, and a 5e character sheet. Without a ruleset, you can add your own creatures and use the rest of the campaign tools.
| Plan an opening, arrange scenes, and prepare secrets and clues. Add NPCs, locations, monsters, and treasure to each session. During play, notes autosave and you can reveal secrets as needed. Publish a recap afterward; unrevealed secrets carry over to the next session. | Turn order and rounds update across everyone’s screens as the GM advances combat. Players see health descriptions, and dice rolls are shared with the table. GMs can also roll privately. |
Open /screen on a TV or shared monitor to show the party an encounter, handout, map, or progress clocks. Switch what’s displayed from the session view.
|
Track initiative, hit points, conditions, concentration, death saves, and legendary and lair actions. Estimate encounter difficulty from Trivial to Deadly, add creatures with their stats from the compendium, and duplicate encounters for reuse. |
| Browse 330 SRD creatures by type and challenge rating, or write your own in Markdown. Use Copy to my campaign to make an editable copy of an included creature. | Manage ability scores, proficiencies, expertise, hit dice, and spell slots, with modifiers calculated automatically. Players can edit their sheets, record damage, and take a long rest. |
| Upload maps with pins linked to campaign pages or other maps. Pan, zoom, and reveal pins as the party explores. Attach up to ten files to a handout and update progress clocks during play. | Define months, weeks, moons, leap rules, and eras for your setting. View the current date on the dashboard, moon phases on the calendar, and events and sessions on a timeline. |
Organize characters, locations, factions, items, quests, arcs, journals, and notes. Pages support Markdown, [[wiki links]], backlinks, tags, nesting, images, and search. GM notes and :::secret blocks stay hidden from players, including in search and API responses.
|
Track quest objectives and when they were completed. Group quests and sessions into story arcs. Record party decisions, money, items, downtime, faction reputation, family trees, and relationships between pages. |
| Download a campaign archive with JSON data, images, attachments, and Markdown pages you can open in Obsidian. Export JSON on its own if you only need the data. Import either format into another demgem installation. |
Access campaign data through /api/v1 with the same permissions as the app. Send recap notifications to Discord. Members can RSVP, vote on session times, and receive reminder emails.
|
![]() |
![]() |
![]() |
| Campaign dashboard | World calendar | Player combat view |
Requires Docker 24 or newer with Compose v2. All application dependencies run in containers.
cp .env.docker.example .env.docker
docker compose run --rm --no-deps app php artisan key:generate --show # paste the key into APP_KEY in .env.docker
docker compose up -dOpen http://localhost:8000 and register. After the first account is created, registration requires an invite link. The stack runs the app, a queue worker, the scheduler, the Reverb websocket server, PostgreSQL, and Redis. The Docker guide covers ports, HTTPS, object storage, and running without the websocket.
For a development machine with PHP 8.4, Node 20, and PostgreSQL, see Local setup. The guide also covers seeding a demo campaign with GM and player accounts.
| Guide | What it covers |
|---|---|
| Local setup | Requirements, installation, background services, and demo data. |
| Docker | Services, configuration, and deployment. |
| Live table | Websockets, Reverb, proxies, and polling fallback. |
| Reminders, Discord, and calendar feeds | Email, scheduling, webhooks, and calendar subscriptions. |
| Export and import | Campaign archives, JSON, and Obsidian exports. |
| Templates and body history | Reusable page templates and previous versions. |
| API | API keys, endpoints, and permissions. |
| Contributing | Code conventions, development commands, configuration, and timezones. |
| Changelog | Feature history and implementation plans. |
Laravel 13, Livewire 4, Alpine, and Tailwind 4, on PHP 8.4. Reverb handles live updates. The app uses PostgreSQL in production and SQLite for local tests.
Issues and pull requests are welcome. See the contributing guide for setup, conventions, and testing. CI runs Pint, Larastan, and Pest tests on PostgreSQL, then builds and boots the Docker image.
demgem's code is licensed under MIT. The creature data in database/srd/ comes from the System Reference Document 5.2.1, published by Wizards of the Coast LLC under CC BY 4.0.
This work includes material taken from the System Reference Document 5.2.1 ("SRD 5.2.1") by Wizards of the Coast LLC and is licensed under the Creative Commons Attribution 4.0 International License, available at https://creativecommons.org/licenses/by/4.0/legalcode.
The attribution notice appears in the compendium and SRD stat block API responses. See attribution requirements and dataset provenance for details.
MIT. See LICENSE.



