Dungeons that always fit.

Tapiti digs connected, validated floors from a seed: rooms of five shapes, corridors with real clearance, same map every time.

Seed ⁨26⁩

median time to dig a validated level 5 floor, measured on this server
⁨41⁩ ms
floors passed every check, over seeds 1 to ⁨60⁩
⁨60⁩ of ⁨60⁩
seeds, each one always the same floor
4.3 billion

Rooms in five shapes, doors that line up

Rectangles, discs, octagons, L-shapes and truncated stars are fitted into the grid. Doors sit on straight stretches of wall, so every corridor leaves a room square to it.

  • rectangle
  • disc
  • octagon
  • L-shape
  • truncated star

A validator that can say no

Five checks run on every floor: connectivity, clearances, doors, corridor geometry, and the distance from entrance to stairs. A floor that fails is thrown away and dug again from a derived seed.

Seed ⁨17⁩, first draw, rejected:

V5 the stairs are 3 hops from the start (least 4)

How a floor is dug

  1. A seed

    One number and a set of parameters feed a small deterministic generator. The same inputs give the same floor, on the desktop or in the browser.

  2. Chambers

    Rooms are fitted block by block, shape by shape, with the weights and caps you set.

  3. Tunnels

    Doors first, then corridors with at most a few bends, branching into T and X junctions, always a clear distance from the rooms they do not join.

  4. Daylight

    The validator opens the door and looks. Only a floor that passes every check is handed back.

Run it your way

Desktop app
cargo run --release
In the browser
Open the lab
Rust crate
tapiti-core = { git = "https://github.com/Lucas-BRT/tapiti" }
Docker
docker compose -f compose.local.yml up --build

Dig your first floor.