A personal D&D campaign management tool for Dungeon Masters
DM Hero helps Dungeon Masters organize their D&D campaigns by solving the problem of scattered information across multiple documents. Quickly find NPCs, locations, items, and track relationships between entities with powerful fuzzy search.
- π Universal Fuzzy Search - Find entities even with typos using FTS5 + Levenshtein distance
- πΊοΈ Entity Management - NPCs, Locations, Items, Factions, Quests, Sessions
- π Relationship Tracking - Link entities with typed relationships (e.g., "lives in", "works for")
- π Session Logs - Track campaign timeline with entity mentions
- πΌοΈ Image Galleries - Multiple images per entity with primary image selection
- π Markdown Documents - Rich documentation with live preview
- π i18n Support - German and English localization
- π¨ Themed UI - Dark (Midnight Tavern) and Light (Aged Parchment) themes
- Framework: Nuxt 4
- UI: Vuetify 3
- Database: SQLite with better-sqlite3
- Search: FTS5 (Full-Text Search) + fastest-levenshtein
- i18n: @nuxtjs/i18n
- State: Pinia
# Prerequisites: Node.js 22.20+
nvm use
# Install dependencies
pnpm install
# Approve better-sqlite3 native build (pnpm security)
pnpm approve-builds
# Start dev server
pnpm devVisit http://localhost:3000
# Using docker-compose
docker-compose up -d
# Or pull from GHCR
docker pull ghcr.io/flo0806/dm-hero:latest
docker run -d -p 4444:3000 -v ./data:/app/data ghcr.io/flo0806/dm-hero:latestSee DEPLOYMENT.md for detailed deployment instructions.
dm-hero/
βββ app/ # Nuxt 4 application code
β βββ pages/ # Route pages (campaigns, npcs, locations, etc.)
β βββ components/ # Vue components
β βββ composables/ # Reusable composition functions
β βββ plugins/ # Vuetify and other plugins
βββ server/ # Nitro server
β βββ api/ # API routes
β βββ utils/ # Database & migrations
β βββ plugins/ # Server plugins
βββ i18n/locales/ # German/English translations
βββ data/ # SQLite database (gitignored)
- SQLite with auto-migrations on startup
- FTS5 for full-text search with Unicode normalization
- Soft-delete everywhere (deleted_at timestamps)
- Auto-backup before each migration
This is a personal project, but contributions are welcome!
- Fork the repository
- Create a feature branch
- Make your changes (follow ESLint + Prettier rules)
- Run tests:
pnpm test - Add a changeset (see below)
- Submit a pull request
We use Changesets to manage versioning and changelogs for the landing page. When you make changes that should be released:
# Create a changeset
pnpm changeset
# Follow the prompts:
# 1. Select package(s) to include (currently only @dm-hero/landing)
# 2. Choose version bump type (patch/minor/major)
# 3. Write a summary of your changesThis creates a markdown file in .changeset/ describing your change. Commit this file with your PR.
When to add a changeset:
- New features or enhancements
- Bug fixes
- Breaking changes
- Documentation updates (for landing page)
When NOT to add a changeset:
- Internal refactoring with no user-visible changes
- Test-only changes
- CI/workflow updates
- Comments: English
- Commit messages: German or English
- Variables: English
- UI text: i18n (de/en)
Run linter before committing:
pnpm lint:fix
pnpm formatDM Hero is completely free and open source - and always will be. I develop it in my spare time because I love D&D and want to help fellow Dungeon Masters run better campaigns.
If DM Hero helps you organize your adventures, consider supporting me with a small tip:
What is "Buy Me a Coffee"? It's a simple way to say thanks with a small donation. No account needed, no subscription - just a one-time tip if you feel like it. Every coffee helps cover hosting costs and motivates me to keep adding new features!
MIT Β© Florian Heuberger
- Built with Nuxt 4
- UI powered by Vuetify 3
- Search powered by SQLite FTS5
- Markdown editor: md-editor-v3
