Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Arroweds Adversary Bank

arrowedisgamingarrowedisgaming543 downloads

Manage and run Daggerheart TTRPG encounters with searchable adversary stat blocks, condition tracking, and instance management.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates13

An Obsidian.md plugin that turns your campaign notes into a live Daggerheart encounter table. Search the SRD or your homebrew library, drop adversaries and environments straight into the page you're already writing in, then run the fight from the same note — HP, stress, conditions, and all.

Arroweds Adversary Bank: a rendered Daggerheart stat block embedded in an Obsidian note

Features

The whole SRD, ready to drop in

Command palette open with the insert-from-library picker, filtered by name

Every adversary and every environment from the Daggerheart SRD, one command away. Hit Ctrl+P, type a name, and the stat block lands in the note you're already in. Drop your own homebrew folder in and it shows up in the same picker — no separate workflow for your custom stuff. Works in Obsidian Canvas too, so you can lay out an encounter visually and run it from the canvas.

Track everything live, per instance

Stat block mid-encounter with HP and stress marked, several conditions toggled on

HP, stress, conditions, feature uses, countdowns — all tracked right on the stat block. Mark a threshold with a click, clear it with Alt-click. Running two Bladed Guards or six skeletons from a single block? Each instance keeps its own state and its own name. Toggle the eight standard Daggerheart conditions on any instance, or define your own — "Burning," "Marked by the Hunter," whatever the table needs.

Stat blocks that work like tools

Feature description with a clickable "Mark a Stress" trigger and a visible summon button

Click an attack bonus to roll it. Click "Mark a Stress" inside a feature description and it actually marks one — and if there are several copies in play, a picker asks which one takes it. A feature that summons reinforcements gets a button that drops the named adversary into the note. The battle points counter in the status bar keeps a running total so you know exactly what the encounter costs. Less flipping between pages, more time running the scene.

Installation

Open Obsidian, go to Settings > Community plugins, click Browse, and search for Arroweds Adversary Bank. Or install it directly from the Obsidian plugin directory.

Usage

Insert from Library

Insert an adversary via a command: Ctrl+P > Insert adversary from library, or use the side ribbon menu (crossed-swords icon).

[!TIP] Bind plugin commands to hotkeys from the Hotkeys settings tab. For example, Alt+A for adversaries and Alt+E for environments.

[!TIP] Click threshold buttons to mark the corresponding amount of HP. Use Alt+Click to clear it instead.

Renaming

  • Auto-suffix: Inserting the same adversary twice auto-names them "Bladed Guard" and "Bladed Guard 2"
  • Inline rename: Double-click the adversary name on a rendered card to edit it. Press Enter to save, Escape to cancel.
  • Instance names: When you have 2+ copies (via the +/- buttons), each instance's stat bar shows a clickable name label. Click to customize it.

Conditions

Below each instance's HP and Stress slots, you'll see condition badges for the 8 standard Daggerheart conditions. Click to toggle.

Custom conditions can be added two ways:

  1. In the YAML: add a conditions field with a list of custom condition names
  2. At runtime: click the + button on the condition bar, type a name, press Enter
name: Chimera
hp: 9
stress: 5
conditions:
  - Poisoned
  - Burning

Summon Buttons

Add a summon field to any feature to get a button that inserts the named adversary:

features:
- name: Raise Dead
  type: Action
  desc: The Necromancer raises skeletal warriors.
  summon:
    - Skeleton Warrior
    - Skeleton Archer

HP/Stress Controls

Each HP and Stress row has inline buttons:

  • - removes one mark
  • + adds one mark
  • x clears all marks

Reference

The daggerheart code block parses the adversary or environment as YAML with the following properties:

Property Definition Example
name Name of the adversary Bear
tier Adversary tier 1
type Type of the adversary Bruiser
desc Adversary description A large bear with thick fur and powerful claws.
difficulty Adversary difficulty 14
weapon Name of the adversary's weapon Claws
range Range of the adversary's weapon Close
damage Amount and type of adversary's weapon damage 1d8+3 phy
hp Total adversary hitpoint slots 6
stress Total adversary stress slots 3
thresholds Adversary thresholds, separated by a /; leave blank for minions with 1 HP 9/17
attack Adversary attack bonus; click to roll for attack +1
xp Adversary experiences Ambusher +2, Keen Senses +3
motives Adversary's motives and tactics Climb, defend territory, pummel, track
conditions Custom condition names for this adversary Poisoned, Burning
features List of feature objects, see table below
id Stat block id for state tracking; auto-generated, can be any random string a2sd4vsf

features properties:

Property Definition Example
name Name of the feature Relentless (2)
type Feature type Passive
desc Feature description Make a standard attack. On a success, the target is *Vulnerable* until they next act.
uses Uses per scene 2
countdown Size of the countdown 6
flavor Hints for GM/PCs Have any of the PCs forded rivers like this before?
summon Adversary name(s) to summon Skeleton Warrior or a YAML list

For environments, weapon, damage, range, hp, stress, thresholds, attack, xp, motives are not set. Instead, additional properties are available:

Property Definition Example
impulses Environment impulses Bar crossing, carry away the unready, divide the land
adversaries Potential adversaries in an environment Guards, Masked Thief, Merchant
tone Tone and feel of the environment Musty and mournful, serene yet slightly wrong

All properties are optional and simply won't render if skipped.

Every text property supports markdown — name, desc, weapon, range, damage, difficulty, xp, motives, tone, impulses, adversaries, and a feature's name, type, desc, and flavor. Use **bold**, *italic*, ==highlight==, `code`, ~~strikethrough~~, [[wikilinks]], #tags, and inline HTML. Quote any value that starts with a markdown character so YAML doesn't choke on it — name: "**Bear**", not name: **Bear**. (Renaming a card from the UI quotes the value for you.)

Markdown in damage may wrap dice notation — damage: "*2d6 magic*" renders as one emphasised phrase with a working roller inside it.

Bear in mind name already renders bold, so **bold** there changes nothing visible; italic, highlight, and code do show.

[!IMPORTANT] Do not use TAB in stat blocks. The indents for features must be manually indented with spaces.

Alt install method

Manual install
  1. Go to the latest release
  2. Download main.js, manifest.json and styles.css
  3. Inside your Obsidian vault, create folder .obsidian/plugins/arroweds-adversary-bank
  4. Copy the downloaded files to this folder
  5. If Obsidian was open, restart it
  6. Navigate to Settings > Community plugins and enable Arroweds Adversary Bank
Release provenance

Release assets are built by GitHub Actions and published with GitHub artifact attestations. To verify a downloaded asset, install the GitHub CLI and run:

gh attestation verify main.js -R arrowedisgaming/arroweds-adversary-bank
gh attestation verify styles.css -R arrowedisgaming/arroweds-adversary-bank

Local development

pnpm install
pnpm dev     # rebuild on change
pnpm check   # typecheck, lint, production build

To test against a real vault, point the build at that vault's plugin folder — every build then writes main.js, manifest.json, and styles.css straight into it:

echo "/path/to/vault/.obsidian/plugins/arroweds-adversary-bank" > .dev-vault

.dev-vault is gitignored; $OBSIDIAN_PLUGIN_DIR overrides it for a single run. pnpm dev also watches styles.css and manifest.json, which esbuild doesn't rebuild on its own. pnpm sync copies the current build without rebuilding. The path must end in .obsidian/plugins/arroweds-adversary-bank or the sync refuses to run, so a typo can't scatter build output through a vault.

If two folders under .obsidian/plugins/ declare the same id in their manifest.json, Obsidian loads only one of them — and it may not be the one you're syncing to. Check for stale copies of this plugin under an old folder name if edits don't seem to take effect.

Obsidian caches plugin code, so reload it to pick up a rebuild (Ctrl+P > Reload app without saving). Hot Reload does this automatically if you add an empty .hotreload file to the plugin folder.

Attributions

Arroweds Adversary Bank began as a fork of BeastVault by Lyova Potyomkin, licensed under the MIT License. The original BeastVault was inspired by FreshCutGrass and DaggerForge.

Copyright Notice

This plugin includes materials from the Daggerheart System Reference Document 1.0, (c) Critical Role, LLC. All rights reserved.

Public Game Content created and owned by Darrington Press, LLC. Available at https://www.daggerheart.com.

Licensed under the Darrington Press Community Gaming License: https://darringtonpress.com/license/.

Stat blocks may have minor edits to correct obvious errors.

HealthExcellent
ReviewPassed
About
Search, create, and edit Daggerheart adversary and environment stat blocks with editable, rollable renders. Manage encounters with auto-suffixed duplicate names, clickable instance naming, per-instance condition tracking, summon buttons, interactive stress/HP controls, and one-click rolls.
TTRPGStatus bar
Details
Current version
1.10.1
Last updated
2 weeks ago
Created
4 months ago
Updates
13 releases
Downloads
543
Compatible with
Obsidian 1.13.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
arrowedisgamingarrowedisgaming
github.com/arrowedisgaming
GitHubarrowedisgaming
  1. Community
  2. Plugins
  3. TTRPG
  4. Arroweds Adversary Bank

Related plugins

Fantasy Statblocks

Create, manage and view a Fantasy Bestiary with Dungeons and Dragons style statblocks.

Charted Roots

Family tree visualization with GEDCOM/Gramps import and Canvas/PDF/Markdown export. Charts, maps, timelines, citations, fictional calendars. For genealogists, worldbuilders, and TTRPG campaigns.

Day Planner OG

Day planning from a simple task list in a Markdown note (bare bones, preserves the features and behavior of the original plugin).

TTRPG Tools - Maps

A toolbox for interactive fantasy maps.

Colored Text

Color the selected texts.

RPG Manager

Tabletop role playing game campaign manager.

Better Word Count

Count the words of selected text in the editor.

Reading Time

Add the current note's reading time to the status bar.

Plugin Update Tracker

Know when installed plugins have updates and evaluate the risk of upgrading.

WebNovel Assistant

A comprehensive Obsidian plugin for web novel writers. Track word counts, goals, and focus time. Manage foreshadowing, timelines, and timed tasks. Includes a bilingual UI and OBS overlay.