A lazygit-inspired terminal UI for managing your D&D game sessions, built with Go and Bubble Tea.
๐ฒ Dice Roller Panel - Roll any dice with simple commands (2d6, 1d20+5, etc.) + Critical Hit Detection โ๏ธ Initiative Tracker Panel - Manage combat initiative for players and monsters ๐จ Color-Coded HP - HP display changes color based on health (green/orange/red) โจ Spells Panel - Search and browse D&D 5e spells with fuzzy search ๐ฒ Monsters Panel - Search and view detailed monster stat blocks with fuzzy search ๐ Notes Panel - Track session notes, NPCs, quests with Markdown-style formatting โก Encounter Builder - Pre-plan balanced encounters with CR calculator, auto-generator, and templates ๐พ Campaign Save/Load - Save your game state and resume later ๐ Auto-Save - Automatic saving every 5 minutes ๐ Monster Integration - Link monsters to initiative with full action support ๐ Instant Transitions - Lightning-fast panel switching with zero latency โ UI Error Messages - Clear error notifications displayed in the UI, not just terminal
Run with Docker (no installation needed):
docker run -it --rm ghcr.io/zingazzi/lazydnd:latestOr build locally:
git clone https://github.com/zingazzi/lazydnd
cd lazydnd
./docker-build.sh
./docker-run.shSee DOCKER.md for detailed Docker documentation.
One-line installer (Linux/macOS):
curl -sSL https://raw.githubusercontent.com/zingazzi/lazydnd/main/install.sh | bashOr download and run the installer:
curl -O https://raw.githubusercontent.com/zingazzi/lazydnd/main/install.sh
chmod +x install.sh
./install.shDownload the latest release for your platform from the Releases page:
Linux (Intel/AMD):
curl -L -o lazydnd https://github.com/zingazzi/lazydnd/releases/latest/download/lazydnd-linux-amd64
chmod +x lazydnd
sudo mv lazydnd /usr/local/bin/Linux (ARM):
curl -L -o lazydnd https://github.com/zingazzi/lazydnd/releases/latest/download/lazydnd-linux-arm64
chmod +x lazydnd
sudo mv lazydnd /usr/local/bin/macOS (Intel):
curl -L -o lazydnd https://github.com/zingazzi/lazydnd/releases/latest/download/lazydnd-macos-amd64
chmod +x lazydnd
sudo mv lazydnd /usr/local/bin/macOS (Apple Silicon):
curl -L -o lazydnd https://github.com/zingazzi/lazydnd/releases/latest/download/lazydnd-macos-arm64
chmod +x lazydnd
sudo mv lazydnd /usr/local/bin/Windows:
Download lazydnd-windows-amd64.exe from the Releases page and add it to your PATH.
git clone https://github.com/zingazzi/lazydnd
cd lazydnd
go build -o lazydnd
./lazydndBuild executables for all platforms:
./build.shThis creates executables in the build/ directory for:
- Linux (amd64, arm64)
- macOS (amd64, arm64)
- Windows (amd64)
LazyDnD uses a configuration file at ~/.config/lazydnd/config.json that allows you to customize:
- Theme colors - Primary, border, highlight, error, and success colors
- Save directory - Custom location for campaign saves
- Auto-save settings - Enable/disable and interval
- Dice roller - History size, minimum value, show individual rolls
- Initiative tracker - Auto-sort, show HP/AC, round counter
- Display - Help hints, compact mode, line wrapping
- Backups - Enable/disable, location, maximum backups
Example: Custom save location
{
"paths": {
"save_directory": "~/Documents/DnD/LazyDnD",
"backup_enabled": true,
"max_backups": 15
}
}See CONFIGURATION.md for complete configuration documentation and examples.
lazydnd # Start the application
lazydnd --version # Print version number and exit
lazydnd --debug # Enable debug logging to ~/.config/lazydnd/debug.log
lazydnd --help # Show available optionsDebug Mode:
When enabled with --debug, the application logs all events to ~/.config/lazydnd/debug.log including:
- Key presses and handlers
- Multi-target operations
- Condition additions/removals
- Spell tracking events
- State changes
Useful for troubleshooting issues. You can view the log in real-time with: tail -f ~/.config/lazydnd/debug.log
Fuzzy Search: Both Monsters and Spells panels now use intelligent fuzzy search that:
- Handles typos and misspellings (e.g., "frbl" finds "Fireball")
- Matches partial names in any order (e.g., "drag red" finds "Adult Red Dragon")
- Automatically sorts results by match quality
- More forgiving than exact substring matching
- Just start typing to see suggestions!
Level/CR Filters:
CR Filter (Monsters Panel): Browse monsters by Challenge Rating with autocomplete:
- Press
fin the Monsters panel to open CR filter - Type a CR value as you type, monsters matching that CR appear instantly:
- Exact:
5โ shows all CR 5 monsters - Range:
0-5โ shows CR 0 through 5 - Minimum:
10+โ shows CR 10 and above - Fractional:
1/4,1/2,0.5all work!
- Exact:
- Use
โโarrow keys to navigate the list - Press
Enterto select a monster and view its full details - Press
Escto cancel and go back - Perfect for finding level-appropriate encounters quickly!
Spell Level Filter (Spells Panel): Browse spells by spell level with autocomplete:
- Press
fin the Spells panel to open level filter - Type a spell level, spells matching that level appear instantly:
- Exact:
3โ shows all 3rd-level spells - Range:
0-2โ shows cantrips through 2nd-level - Minimum:
5+โ shows 5th-level and higher
- Exact:
- Use
โโarrow keys to navigate the list - Press
Enterto select a spell and view its full details - Press
Escto cancel and go back - Great for finding spells your character can cast!
| Key | Action |
|---|---|
1-4 or F1-F4 |
Jump directly to specific panel |
Tab |
Cycle forward through panels |
Shift+Tab |
Cycle backward through panels |
โ โ |
Navigate lists and scroll content |
Esc |
Cancel input or exit current mode |
? |
Show help popup with all keybindings |
q or Ctrl+C |
Quit application |
| Key | Action |
|---|---|
Ctrl+S |
Save campaign (quick save if already saved, or open save dialog) |
Ctrl+L |
Load campaign (shows list of saved campaigns) |
Ctrl+N |
Rename current campaign |
Campaign Features:
- ๐พ Auto-Save: Campaigns automatically save every 5 minutes
- ๐ Save Location: All campaigns stored in
~/.lazydnd/ - ๐ Status Bar: Shows current campaign name and last save time
- ๐ Full State: Saves entire initiative tracker with all monster links
Keybindings:
| Key | Action |
|---|---|
Enter |
Start dice input mode |
r |
Reroll last command |
Type dice notation and press Enter |
Roll dice |
Dice Notation Examples:
- Simple Rolls:
1d20,2d6,3d8,4d10 - With Modifiers:
2d6+3,1d20-1,1d8+5 - Multiple Dice:
2d8+3d6,1d6-1d4,2d8+3d6-1d4 - Complex Expressions:
1d6+3+2d8-5,2d6-1d4+3 - Comma-Separated:
1d8+3, 3d6-1(rolls multiple expressions) - Advantage/Disadvantage:
1d20 adv,2d6 dis - Critical Damage:
2d8 crit,3d6+5 crit(auto-doubles dice or max damage)
๐ฏ Critical Hit System:
- Auto-Detection: Natural 20 on d20 rolls shows โ CRITICAL HIT! โ banner with ๐ฏ icon
- Manual Crits: Roll critical damage with
2d8 crit,3d6+5 crit, etc. - Monster Attacks: When a monster attacks and rolls nat 20, damage dice automatically double!
- Attack roll is checked first (1d20+modifier)
- If natural 20, damage dice are rolled as critical automatically
- Example: Goblin hits with nat 20 โ damage rolls as
1d6 crit(2d6 or max+1d6)
- Two Modes (configurable in
~/.config/lazydnd/config.json):"double"(default): Roll all damage dice twice (D&D 5e standard)- Example:
2d8 critโ rolls 4d8 total (2d8 + 2d8)
- Example:
"max": Maximum damage + one roll (popular house rule)- Example:
2d8 critโ 16 (max) + 1 roll of 2d8
- Example:
- Visual Celebration: Gold and dark red banner, target emoji ๐ฏ
- Enable/Disable: Set
critical_hit_enabled: falsein config to turn off
๐ฅ Preset Spell Macros (35+ Built-in): Just type the spell name and press Enter:
- Cantrips:
eldritch_blast,fire_bolt,toll_the_dead - Popular Spells:
fireball,lightning_bolt,magic_missile,cure_wounds - High-Level:
disintegrate,chain_lightning,finger_of_death๐ฏ Custom Macros: - Create:
my_attack=1d20+5 - Execute:
my_attack - Skill Checks:
stealth,perception+5(for selected character) - Group Initiative:
group(rolls init for all monsters)
See PRESET_MACROS.md for full list!
Features:
- โ Minimum value of 1 (D&D rule)
- โ Standard D&D dice: d4, d6, d8, d10, d12, d20, d100
- โ Zocchi's dice: d3, d5, d7, d14, d16, d24, d30
- โ Roll history displayed
- โ Quick reroll with 'r' key
Keybindings:
| Key | Action |
|---|---|
p |
Add player to initiative (name, initiative, AC) |
m |
Add monster manually (name, HP, AC, initiative) |
Enter |
Enter edit mode (navigate entries with โโ) |
n |
Next turn (advance initiative) |
x |
Reset combat (reset turn and round counters) |
Ctrl+Z |
Undo HP change (up to 3 actions) |
Ctrl+Y |
Redo HP change |
i |
Edit initiative value (in edit mode) |
h |
Edit HP - add/remove HP with +/- (in edit mode) |
H |
Edit Max HP - set new maximum HP value (in edit mode) |
k |
Edit AC - set armor class (in edit mode) |
T |
Set Temp HP - Shift+T to set temporary hit points (in edit mode) |
+ or = |
Quick Add HP - Fast healing popup (works with single or multi-target) |
- |
Quick Remove HP - Fast damage popup (works with single or multi-target) |
R |
Toggle Reaction - Shift+R to mark reaction as used/available (in edit mode) |
t |
Multi-target damage/healing mode |
o |
Manage conditions (add/remove status effects in edit mode) |
s |
Roll saving throws & skill checks (in edit mode, monsters only) |
d |
Delete selected entry (in edit mode) |
l |
View linked monster details (if added from Monster panel) |
a |
Show monster actions popup (if monster has actions) |
c |
Copy/duplicate selected entry |
Features:
- โ Turn Tracking: Track current turn with visual indicator (โ )
- โ Round Counter: Automatic round tracking with time elapsed (6 seconds per round)
- โ Auto-Sort: Entries sorted by initiative (highest first)
- โ Player AC Tracking: Track Armor Class for both players and monsters
- โ Conditions Tracker: Add/remove status effects (Poisoned, Stunned, etc.) with duration tracking
- โ Monster Linking: Monsters added from Monster panel retain full data
- โ Action Integration: Press 'a' on linked monsters to see available actions
- โ Quick Actions: Select action to auto-roll damage in Dice Roller
- โ Saving Throws & Skills: Press 's' to roll all saves and skill checks for monsters
- โ HP Tracking: Real-time HP management for monsters and players
- โ Max HP Editing: Adjust maximum HP values for anyone (Shift+H)
- โ AC Editing: Edit armor class for players and monsters (press 'k')
- โ Color-Coded HP: HP changes color - Green (> 50%), Orange (25-50%), Red (< 25%)
- โ Temporary HP: Track temp HP separately, displayed in cyan (+5)
- โ Reaction Tracker: Mark reactions as used [โ] or available [โ], auto-resets on turn (works for players & monsters)
- โ Undo/Redo: Undo up to 3 HP changes with Ctrl+Z, redo with Ctrl+Y
- โ Duplicate Monsters: Copy entries with automatic numbering (Goblin 1, Goblin 2, etc.)
- โ Multi-Target Damage/Healing: Apply damage or healing to multiple targets simultaneously
- โ Campaign Save: All initiative data saved with campaign
Conditions Tracker: Track status effects (Poisoned, Stunned, Paralyzed, etc.) on any creature:
- Conditions show inline in initiative list with emoji icons (e.g., "Goblin 1 (HP: 7/7, AC: 13) ๐คข๐ฑ")
- Hover/select to see full details: names and remaining rounds
- Press
Enterto enter edit mode, navigate to an entry withโโ - Press
oto open conditions manager - View detailed list with duration countdown (e.g., "๐คข Poisoned (3 rounds)")
- Press
ato add a new condition - Select from list of 15 common D&D conditions using
โโ(or choose "Custom condition..." for your own) - Press
Enterto confirm selection - Enter duration in rounds (or 0 for indefinite)
- Press
Enterto apply - Press
dto remove a condition from the list - Conditions automatically expire after duration ends and disappear from the list
Multi-Target Conditions: Apply conditions to multiple creatures at once (e.g., Fear spell affecting 3 enemies):
- Press
tto enter multi-target mode - Use
Spaceto select multiple targets - Press
oto open condition manager (shows "X targets selected") - Press
ato add condition - Select condition and duration
- Condition applies to all selected targets simultaneously!
Common Conditions with Emojis: ๐คข Poisoned โข ๐ต Stunned/Paralyzed/Incapacitated/Unconscious โข ๐ฑ Frightened โข ๐ Charmed โข ๐ป Invisible โข ๐ค Prone โข ๐ Grappled/Restrained โข ๐ Blinded โข ๐ Deafened โข ๐ฎ Others
Multi-Target Damage/Healing: Perfect for area spells (Fireball, Thunderwave) and mass healing:
- Enter edit mode with
Enter - Press
tto enter multi-target mode - Use
Spaceto select/deselect targets (checkboxes appear: [โ]) - Press
Enterto open the damage/healing popup - Enter amount:
- Type
-28for 28 damage (automatically sets damage mode) - Type
+10for 10 healing (automatically sets healing mode) - Or type plain
28and usehto toggle between damage/healing
- Type
- Optional: Press
xto toggle save mode- When save mode is ON, mark each target as success (
s) or failure (f) - Successful saves take half damage
- When save mode is ON, mark each target as success (
- Press
Enterto apply to all selected targets - Press
Escortto exit multi-target mode
Example: Fireball spell hitting 3 goblins
- Select all 3 goblins with Space
- Enter
-28(for 28 damage) - Enable save mode with
x - Mark saves: Goblin 1 fails (f), Goblin 2 succeeds (s), Goblin 3 fails (f)
- Apply: Goblin 1 takes 28 damage, Goblin 2 takes 14 damage, Goblin 3 takes 28 damage
Example: Mass Healing Word on 3 party members
- Select all 3 party members with Space
- Enter
+7(for 7 healing) - Apply: All 3 party members gain 7 HP
HP Management: LazyDnD provides flexible HP tracking for monsters with two editing modes:
-
Edit Current HP (press
h):- Enter edit mode (
Enter), select a monster, pressh - Enter HP change with
+to heal or-to damage - Examples:
-15(take 15 damage),+8(heal 8 HP) - Current HP automatically capped at 0 and maximum HP
- Tracks up to 3 actions in undo history (Ctrl+Z to undo)
- Enter edit mode (
-
Edit Maximum HP (press
H/ Shift+H):- Enter edit mode (
Enter), select a monster, pressH - Enter new maximum HP value (absolute value, minimum 1)
- Example:
150sets max HP to 150 - Current HP is automatically capped if it exceeds the new maximum
- Useful for adjusting monster difficulty or fixing entry mistakes
- Enter edit mode (
Color-Coded HP: Monster HP is displayed with color coding for quick health assessment:
- Green (> 50% HP):
HP: 10/10- Healthy, full combat effectiveness - Orange (25-50% HP):
HP: 4/10- Bloodied, wounded but still dangerous - Red (< 25% HP):
HP: 2/10- Critical, near death
The HP text changes color based on the monster's health percentage, making it easy to see which enemies are weakened at a glance. Perfect for tactical decision-making during combat!
Temporary HP: Track temporary hit points separately from regular HP following D&D 5e rules:
- Display:
HP: 25/30 +5- Temp HP shown in cyan color - Damage Absorption: Temp HP is always lost first before real HP
- Non-Stacking: Setting new temp HP replaces existing (doesn't add)
- Set Temp HP: Press
Shift+Tin edit mode, enter value (0 to clear) - Healing: Healing only affects real HP, not temp HP
- Persistence: Temp HP saved with your campaign
Example:
- Goblin has
HP: 7/7 +3 - Takes 5 damage โ Loses 3 temp HP, 2 real HP โ Now
HP: 5/7 - Takes 2 damage โ Now
HP: 3/7
Adding Players and Monsters:
- Add Player: Press 'p' and enter:
- Player name
- Initiative value
- Armor Class (AC)
- Add Monster Manually: Press 'm' and enter:
- Monster name
- Hit Points (HP)
- Armor Class (AC)
- Initiative value (or 'r' to roll)
- Add Monster from Panel: Search in Monster panel, press 'a' to add with full stats and actions
Saving Throws & Skill Checks: When a monster is added from the Monster panel, you can roll all saving throws and skill checks:
- Enter edit mode with
Enter - Select a monster with โโ
- Press
sto open the saving throws popup
The popup displays:
- โ All 6 Saving Throws: STR, DEX, CON, INT, WIS, CHA with correct modifiers
- โ Proficiency Detection: Automatically applies proficiency bonuses (marked with โญ)
- โ Stealth Check: If monster has Stealth skill
- โ Perception Check: If monster has Perception skill
- โ Natural 20/1 Highlighting: Critical successes (green) and failures (red)
- โ
Reroll: Press
Enterto reroll all checks - โ
Close: Press
Escto close popup
Example Use Cases:
- Fireball spell โ Check DEX saves for all monsters
- Hidden enemy โ Roll Stealth check
- Surprise round โ Check Perception against Stealth
- Hold Person spell โ Check WIS save
- Legendary Resistance โ Roll and decide if used
Keybindings:
| Key | Action |
|---|---|
Enter |
Start spell search |
f |
Filter by spell level (0-9, ranges like 0-3, 5+) |
| Type spell name | Real-time autocomplete suggestions |
โ โ |
Navigate spell suggestions |
Enter |
Select spell to view details |
c |
Cast selected spell (track duration) |
v |
View active spells |
d |
Delete active spell (in active spell view) |
Esc |
Exit search/active spell mode |
Features:
- โ Complete D&D 5e Spell Database
- โ Real-time Autocomplete: Suggestions appear as you type
- โ Spell Level Filter: Filter by exact level, ranges, or minimum (e.g., 0-2, 5+)
- โ Full Details: Level, school, casting time, range, components, duration, description
- โ Class Information: Shows which classes can cast the spell
- โ Ritual & Concentration: Clearly marked
- โ Spell Tracking: Cast and track spell durations during combat
- โ Active Spell Management: View and manage all active spells
- โ Auto Duration Countdown: Spells automatically expire as combat rounds progress
Spell Tracking: When you cast a spell with a duration:
- Search and select a spell with
Enter - Press
cto cast the spell - Enter the caster's name (e.g., "Gandalf", "Goblin 2")
- The spell is added to active spells with duration tracking
Active Spells:
- Press
vto view all active spells - Shows spell name, caster, and time remaining
- Duration automatically decrements each round (when using
nin Initiative Tracker) - Press
dto manually remove a spell - Concentration spells are marked with (C)
- Active spells are saved with your campaign
Duration Tracking:
- Each combat round = 6 seconds
- Supports: rounds, minutes, hours, days
- Examples: "1 minute" = 10 rounds, "1 hour" = 600 rounds
- Instantaneous spells are not tracked
- Shows time in human-readable format (minutes, hours, etc.)
Keybindings:
| Key | Action |
|---|---|
Enter |
Start monster search |
f |
Filter by CR (exact, range like 0-5, or min like 10+) |
| Type monster name | Real-time autocomplete suggestions |
โ โ |
Navigate monster suggestions |
Enter |
Select monster to view stat block |
a |
Add selected monster to Initiative Tracker (with full actions) |
Esc |
Exit search mode |
Features:
- โ 8750+ D&D 5e Monsters
- โ Complete Stat Blocks: AC, HP, Speed, Ability Scores, Saves, Skills
- โ CR Filter: Filter by exact CR, ranges, or minimum (e.g., 0-5, 10+)
- โ Traits & Actions: All special abilities and attacks
- โ Legendary Actions: Full legendary action details
- โ Challenge Rating: CR and XP values
- โ Action Parser: Structured action data with damage, reach, save DCs
- โ Initiative Integration: Press 'a' to add monster to initiative with all data linked
Monster Actions: When a monster is added to initiative from the Monster panel:
- Press 'a' in Initiative Tracker to see action list
- Select action to automatically roll damage in Dice Roller
- Actions include: attack bonus, reach/range, damage dice, damage type, save DCs
Custom Monsters: You can add your own custom monsters or override existing ones:
-
Create the custom monsters directory:
mkdir -p ~/.config/lazydnd/custom_monsters -
Add JSON files with the same structure as
assets/monsters.json:# Create your custom monster file nano ~/.config/lazydnd/custom_monsters/my_monsters.json
-
LazyDND automatically loads all
.jsonfiles from this directory on startup
Custom Monster File Format:
[
{
"name": "My Custom Monster",
"meta": "Large beast, neutral",
"Armor Class": "15 (Natural Armor)",
"Hit Points": "68 (8d10 + 24)",
"Speed": "40 ft.",
"STR": "18",
"STR_mod": "(+4)",
"DEX": "14",
"DEX_mod": "(+2)",
"CON": "16",
"CON_mod": "(+3)",
"INT": "3",
"INT_mod": "(-4)",
"WIS": "12",
"WIS_mod": "(+1)",
"CHA": "7",
"CHA_mod": "(-2)",
"Challenge": "3 (700 XP)",
"Actions": "<p><em><strong>Bite.</strong></em> <em>Melee Weapon Attack:</em> +6 to hit, reach 5 ft., one target. <em>Hit:</em> 13 (2d8 + 4) piercing damage.</p>",
"ActionNumber": 1,
"ActionList": [
{
"name": "Bite",
"type": "melee",
"description": "Bite. Melee Weapon Attack: +6 to hit, reach 5 ft., one target. Hit: 13 (2d8 + 4) piercing damage.",
"roll": "+6",
"reach": "5ft",
"damage": "2d8 + 4",
"damage_type": "piercing"
}
]
}
]Notes:
- Custom monsters with the same name as default monsters will override them
- Multiple JSON files can be placed in the directory
- Invalid JSON files will be skipped with a warning
- Example custom monsters are available at
~/.config/lazydnd/custom_monsters/example_custom_monsters.jsonafter first run
Keybindings:
| Key | Action |
|---|---|
Enter |
Start editing notes |
Ctrl+F |
Search notes |
| Type text | Edit session notes with Markdown-style formatting |
Esc |
Exit edit/search mode |
Features:
- โ Session Notes: Track plot points, NPC names, quest details
- โ Markdown-Style Formatting: Bold, italics, headers, lists
- โ Fuzzy Search: Quickly find notes with Ctrl+F
- โ Auto-Save: Notes automatically saved with campaign
- โ Multi-Line Support: Full text editor for long notes
- โ Scrollable: Navigate long notes with โโ
Quick Markdown:
**bold**for bold*italic*for italic# Headingfor headings- itemfor lists
Example Use Cases:
- Track NPC names and relationships
- Record quest objectives and progress
- Note down player decisions
- Keep session summaries
- Track loot and rewards
Party Setup Mode:
| Key | Action |
|---|---|
1-9 |
Set party size (1-9 players) |
+ / - |
Adjust party level (1-20) |
n |
Next: Start building encounter |
t |
View saved templates |
g |
Auto-generate encounter |
Building Encounter Mode:
| Key | Action |
|---|---|
m |
Add monster from monster list |
โ โ |
Navigate monsters in encounter |
+ / - |
Adjust selected monster quantity |
x |
Remove selected monster |
c |
Clear entire encounter |
s |
Save encounter as template |
l (or d) |
Load entire encounter to Initiative Tracker |
t |
View saved templates |
p |
Back to party setup |
Templates List Mode:
| Key | Action |
|---|---|
โ โ |
Navigate saved templates |
Enter |
View template details |
x |
Delete selected template |
n |
Create new blank encounter |
Esc |
Back to building mode |
Template Details Mode:
| Key | Action |
|---|---|
l or Enter |
Load template into encounter builder |
x |
Delete this template |
Esc |
Back to templates list |
Features:
- โ Party Setup: Configure party size (1-20) and level (1-20)
- โ Real-Time CR Calculation: Automatic difficulty assessment (Trivial/Easy/Medium/Hard/Deadly)
- โ XP Budget Tracker: See total and adjusted XP based on encounter size
- โ Encounter Multiplier: Automatically applies D&D 5e encounter multipliers
- โ Monster Selection: Add monsters from the full monster database
- โ Quantity Adjustment: +/- to add/remove duplicate monsters
- โ Template System: Save encounters for reuse (e.g., "Goblin Ambush", "Dragon's Lair")
- โ One-Click Deploy: Send entire encounter to Initiative Tracker instantly
- โ Smart Generator: Auto-generate balanced encounters by difficulty and environment
How to Use:
1. Set Up Your Party:
- Press
1-9to set party size directly (e.g.,5for 5 players) - Use
+/-to adjust party level (1-20) - Party setup shows:
Party: 5 ร Level 3
2. Build an Encounter:
- Press
nto enter building mode - Press
mto add monsters from the database - In monster list, navigate with
โ/โand pressEnterto select - Back in encounter, use
โ/โto select monsters - Use
+/-to adjust selected monster quantity - Press
xto remove selected monster - Real-time difficulty updates as you add monsters:
- Trivial (gray): Below easy threshold
- Easy (green): ยผ of daily XP budget
- Medium (yellow): ยฝ of daily XP budget
- Hard (orange): ยพ of daily XP budget
- Deadly (red): Equal to or beyond daily XP budget
3. Deploy to Combat:
- Press
l(ord) to load all monsters to Initiative Tracker - Each monster added with full stats (HP, AC, actions)
- Automatically numbered if multiple (Goblin 1, Goblin 2, etc.)
- Roll initiative and start combat!
4. Save & Load Templates:
- Press
sto save encounter as template - Enter a name (e.g., "Forest Ambush") - if editing existing template, name is pre-filled
- Template saved to
~/.lazydnd/encounters/ - Press
tto view saved templates - Use
โ/โto select,Enterto view details - Press
lorEnterto load template - Press
xto delete a template
5. Auto-Generate Encounters:
- Press
gto open the encounter generator - Select Difficulty: Easy, Medium, Hard, Deadly
- Select Environment: Forest, Dungeon, Mountain, Urban, etc.
- Press
Enterto generate - Smart algorithm creates balanced encounters using:
- CR/XP balancing based on party strength
- Environment-appropriate monsters
- Multiple strategies (solo boss, small group, horde)
CR/XP Calculation: The Encounter Builder follows D&D 5e DMG rules:
- XP Thresholds per player level (Easy/Medium/Hard/Deadly)
- Encounter Multipliers based on monster count:
- 1 monster: ร1.0
- 2 monsters: ร1.5
- 3-6 monsters: ร2.0
- 7-10 monsters: ร2.5
- 11-14 monsters: ร3.0
- 15+ monsters: ร4.0
- Adjusted XP = Total Monster XP ร Multiplier
- Difficulty determined by comparing adjusted XP to party thresholds
Example:
Party: 4 ร Level 3
- Easy threshold: 300 XP
- Medium threshold: 600 XP
- Hard threshold: 900 XP
- Deadly threshold: 1,400 XP
Encounter: 5ร Goblin (CR 1/4, 50 XP each)
- Total Monster XP: 250 XP
- Multiplier: ร2.0 (5 monsters)
- Adjusted XP: 500 XP
- Difficulty: Medium
Pro Tips:
- Start with generator (
g) for quick balanced encounters - Manually adjust by adding/removing monsters
- Save common encounters as templates
- Deploy directly to initiative for instant combat
- Encounter Builder doesn't affect initiative until you deploy
Saving Your Campaign:
- Press
Ctrl+Sto save - Enter campaign name (e.g., "dragon_heist")
- Campaign saved to
~/.lazydnd/dragon_heist.json - Status bar shows:
๐ dragon_heist (๐พ Just now)
Loading a Campaign:
- Press
Ctrl+Lto open load dialog - Use
โโto navigate saved campaigns - Press
Enterto load - All initiative data and monster links restored
Renaming a Campaign:
- Press
Ctrl+N(only available when campaign is loaded) - Enter new name
- Old file deleted, new file created
Auto-Save:
- Automatically saves every 5 minutes when campaign is loaded
- Status bar shows time since last save:
๐พ 3m ago - Manual save with
Ctrl+Supdates to๐พ Just now
What Gets Saved:
- โ All initiative tracker entries (players and monsters)
- โ HP, AC, initiative values, Temp HP, Reaction status
- โ Monster links (actions remain available after load)
- โ Instance numbers for duplicated monsters
- โ Active conditions and spell durations
- โ Campaign notes and dice macros
- โ Dice history (session-specific)
- โ Current panel or scroll position
LazyDnD includes an interactive command-line tool to create custom monsters in the correct JSON format.
Usage:
./scripts/create_monster.pyFeatures:
- ๐ฏ Interactive step-by-step prompts
- ๐งฎ Auto-calculates ability modifiers
- โ๏ธ Support for melee, ranged, and special actions
- โ Input validation with sensible defaults
- ๐ Preview before saving
- ๐ฆ Ready-to-use JSON output
Quick Example:
cd lazydnd
./scripts/create_monster.py
# Follow the prompts to create your monster
# Save the output to a file
# Add to ~/.lazydnd/custom_monsters.jsonDocumentation:
- Scripts README - Tool overview and usage
- Monster Creation Guide - Detailed field reference and examples
Adding Custom Monsters:
- Create your monster with
./scripts/create_monster.py - Save directly to
~/.lazydnd/monsters/when prompted (recommended) - Restart LazyDnD
- Your monster appears in the Monsters panel!
Note: LazyDnD automatically loads all .json files from ~/.lazydnd/monsters/ - one file per monster for easy management!
- Go 1.19 or higher
- Terminal with color support
- Bubble Tea - TUI framework
- Lip Gloss - Styling
We welcome contributions! Whether it's bug fixes, new features, documentation, or suggestions, your help is appreciated.
How to contribute:
- Fork the repository
- Create a new branch:
git checkout -b feature/your-feature - Make your changes and commit:
git commit -am 'Add new feature' - Push to your fork:
git push origin feature/your-feature - Open a Pull Request
Please review the PROJECT_STRUCTURE.md for code organization and best practices.
If you find a bug, have a feature request, or need help:
- Open an Issue
- Include clear steps to reproduce, expected behavior, and screenshots/logs if possible.
Thank you for helping improve LazyDnD!
If you find LazyDnD helpful, consider supporting development! โ Buy me a coffee Your support helps keep the project alive and growing. Thank you!
MIT License




