← back to hollowmist.me
🐉

D&D Monster Viewer

A searchable, sortable, multi-filter index of D&D 5e monsters with stat blocks and art. Pick by AC, HP, speed, ability scores, challenge rating, or any combination, designed for quickly finding monsters that fit a planned encounter.

HTML / JS D&D 5e
About

I built this when I needed to find specific monsters fast for prep, something with low CR but high AC, or a particular damage type, or just every flying creature within a movement range. The official 5e tools index monsters but don't really let you stack the kind of arbitrary numeric filters that come up when you're balancing an encounter.

It's a single-page app: monster data and art live alongside the page, filtering and sorting happen client-side, and clicking a monster opens its full stat block plus lore in a panel beside the list, no page reloads or detail page navigation.

What you can do
Search
Live name search at the top of the sidebar, narrows the list as you type.
Sort
By name, size, type, AC, HP, challenge rating, individual ability scores, or any of the four speed types, ascending or descending.
Stack filters
Add multiple filter rows at once: numeric (≤ / = / ≥ for AC, HP, CR, stats, speeds) or text (contains / excludes for source, type, alignment, resistances, immunities, languages, abilities, actions, etc.).
Stat block
Click a monster, full 5e-style stat block appears in the centre column with abilities, actions, reactions, and legendary actions.
Lore + art
A right-hand panel shows the monster's portrait and description text in a two-column layout.
Self-contained
All 142 monster stat blocks ship as static JSON, all art as local PNGs, no API calls, no internet needed once the page loads.
Caveats

Source coverage: entries are taken from the SRD-aligned 5e Monster Manual; most iconic monsters are present (~142 entries) but it's not exhaustive. No homebrew, no expansions beyond the base set, no later supplements.

Heavy first load: ~62 MB of monster art ships with the viewer. After the first visit your browser caches it, but the cold load is slow on weak connections.