Date of birth2012 first Dart commit 19 February 2012; this build master @ 6c5c684c (2026)
CreatorBob Nystrom (munificent), 2012 to today
LanguageDart ~37,000 lines in 233 files
PlatformWeb browser Malison canvas terminal
Lineage
No parent: Hauberk is an original game in its own code, not a variant. It continues Bob Nystrom's earlier C# roguelike Amaranth, which he later moved to Dart as Hauberk; its loot and dungeon ideas grew out of years of playing Angband. The Dart repository starts on 19 February 2012 and is still developed. No known descendants.
Bob Nystrom says he has worked on it “pretty much forever”, through four implementation languages. (Rooms and Mazes)
Hauberk was called Amaranth when it was written in C#; Bramble became Piecemeal, Malison kept its name. (Amaranth post)
Its dungeon generator, rooms first, then mazes in the gaps, then dead ends removed, became a widely read article. (Rooms and Mazes)
Drops come from an item hierarchy: a monster that drops “spear” may sometimes walk up the tree and drop any weapon. (Dropping Loot)
The game’s own Getting Started page opens with “TODO: This is all horrendously out of date.” (getting-started)
What's unique
Light matters: dungeon levels are dark; without a torch or candle you see little and explore blind.
Experience is spent, not levelled:E spends experience on stats and on skills (weapon masteries, archery, six elements of arcana), each skill unlocking abilities.
Town and depth select: between dives you shop in town and choose any depth up to one below your deepest.
Races with powers: fae fly and throw fairy dust, gnomes are single-minded; five classes from Adventurer to Sorceror.
Browser native: written for the web from the start, saves in the browser.
Code dive
Language: Dart, about 37,000 lines in 233 files under lib/ at upstream 6c5c684c (42,000 with web, tool and test code); compiled to JavaScript. MIT licence.
Data as code: monsters, items, affixes, shops and spells are Dart builder calls (breed("Nameless Unmaker", 100, …)), not data files.
Engine/content split:lib/src/engine knows nothing about specific monsters; lib/src/content fills it in; the UI is a Malison terminal on a canvas.
Tests: a dart test suite (about 100 tests).
This port: the game’s own Dart code with its panels sent to separate windows, the game's own glyphs (text only), pop-ups as HTML text, IndexedDB saves, an Enter command menu, H explore and q walk to the stairs. Source: memmaker/hauberk, upstream munificent/hauberk.
Stats
Thing
Count
Notable ones
Depths
100
Stage.maxDepth; the Nameless Unmaker waits at depth 100
Monsters
152
10 uniques: Fenrir with Skoll and Hati, Erlkonig the Goblin Prince, The Rat King, Harold the Misfortunate, Tink, the Nameless Unmaker
Item types
165
70 affixes
Races
5
Human, Dwarf, Elf, Gnome, Fae
Classes
5
Adventurer, Barbarian, Warrior, Mage, Sorceror
Skills
15
Archery, Battle Hardening, Bloodlust, six weapon masteries, six arcana
Upstream ships with Debug.enabled = true, and so does this build: Shift+Alt+W opens the wizard menu (map or light the level, spawn monsters, drop items, gain experience, kill all, make stairs, show all monsters), and the depth list allows any depth.
Save scumming:Export / Import in the game page’s File menu (the game saves when you leave a level).