A simple 2D dungeon generator


5702.0.12 years ago3 years agoMinified + gzip package size for @mikewesthad/dungeon in KB




As a Script

Grab the minified js file & optional source map (or the unminified js file & optional source map).

<script src="dungeon.min.js"></script>

Or use the jsdelivr CDN:

<script src="//cdn.jsdelivr.net/npm/@mikewesthad/dungeon@1.2.1"></script>

This will give you a Dungeon global variable.

As a Module

npm i @mikewesthad/dungeon
import Dungeon from "@mikewesthad/dungeon";


const dungeon = new Dungeon({
  width: 50,
  height: 50,
  doorPadding: 1, // Experimental, minimum number of tiles between a door and a room corner (>= 1)
  randomSeed: 0, // Leave undefined if you don't want to control the seed
  rooms: {
    width: {
      min: 5,
      max: 10,
      onlyOdd: true // Or onlyEven: true
    height: {
      min: 8,
      max: 20,
      onlyOdd: true // Or onlyEven: true
    maxArea: 150,
    maxRooms: 50

// Make sure you resize your console (see guide that gets printed out in the console)
  empty: " ",
  emptyAttributes: "rgb(0, 0, 0)",
  wall: "#",
  wallAttributes: "rgb(255, 0, 0)",
  floor: "0",
  floorAttributes: "rgb(210, 210, 210)",
  door: "x",
  doorAttributes: "rgb(0, 0, 255)",
  containerAttributes: "15px"

// Helper method for debugging by dumping the map into an HTML fragment (<pre><table>)
const html = dungeon.drawToHtml({
  empty: " ",
  emptyAttributes: { class: "dungeon__empty", style: "color: rgb(0, 0, 0)" },
  wall: "#",
  wallAttributes: { class: "dungeon__wall", style: "color: rgb(255, 0, 0)" },
  floor: "0",
  floorAttributes: { class: "dungeon__floor", style: "color: rgb(210, 210, 210)" },
  door: "x",
  doorAttributes: { class: "dungeon__door", style: "color: rgb(0, 0, 255)" },
  containerAttributes: { class: "dungeon", style: "font-size: 15px" }

dungeon.rooms; // Array of Room instances
dungeon.tiles; // 2D array of tile IDs - see Tile.js for types

// Get a 2D array of tiles where each tile type is remapped to a custom value. Useful if you are
// using this in a tilemap, or if you want to map the tiles to something else, e.g. this is used
// internally to convert a dungeon to an HTML string.
var mappedTiles = dungeon.getMappedTiles({
  empty: 0,
  floor: 1,
  door: 2,
  wall: 3


See the web docs for the API here. The most useful page is the Dungeon class


  • 2.0.0
    • Rewrite in Typescript. API changes requiring more of the DungeonConfig to be specified in the constructor.


  • @mktcode - fix filename case.
  • @gobah - PR for getting the library working on node.
  • And, of course, @nickgravelyn who wrote the library that this fork is based on.

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.