BUILDFLOOR // LEVEL MAP EDITOR
RUNS IN YOUR BROWSER

Map the level before you build it.

Rooms, corridors, doors, zones and markers on an infinite snapping grid. No account, no upload, no install — every level stays on your machine as plain, readable JSON.

Free · no sign-up · works offline · zero dependencies
REACTOR SUBLEVEL — 5 ROOMS · 5 DOORS · 5 MARKERS
ZOOM 100%GRID 20SNAP ON

WHAT'S IN IT

Seven tools, one canvas. Everything is on a grid, everything snaps, everything is undoable.

ROOMS

Drag a rectangle, or click out a free-form polygon corner by corner. Resize from any handle and Alt+click an edge to insert a new vertex.

CORRIDORS

Drag a run at a fixed width — axis-locked by default, Alt for a free angle. They read as corridors on the map, not as rooms.

DOORS THAT SNAP

Click near a wall and the door finds it, aligns to it and draws its swing. Six types: normal, locked, hack-gated, hatch, stairs and one-way.

FOURTEEN MARKERS

Terminals, keycards, locks, loot, bodies, save points, blocked routes, hazards, cameras, breakers, objectives, spawns, offline zones and design notes.

ZONES & LEGEND

Group rooms into colour-coded sectors. The legend builds itself from what's on the canvas, and every entry can be renamed inline.

EXPORT

Save readable JSON you can diff and commit next to the rest of the project, or export a PNG of the whole map straight into the design doc.

HOW IT GOES

From blank grid to a map you can hand to someone else in about ten minutes.

BLOCK IT OUT

Drag rooms, run corridors between them, drop doors on the walls. Hold Shift after a shape to keep drawing the same kind.

ANNOTATE

Name the rooms, sort them into zones, drop markers for terminals, keycards, hazards and objectives. Add free labels anywhere.

SHIP IT

Ctrl+S writes the JSON to disk. EXPORT PNG gives you the picture. Reopen either one later and carry on.

KEYS

Built for a mouse and a keyboard — best on a desktop.

VSelect — move, resize, edit vertices
RRoom — drag a rectangle
PRoom — click a free polygon
CCorridor — drag a run of fixed width
DDoor — snaps to the nearest wall
MMarker — icon plus label
TFree label — standalone text
SpaceHold to pan · wheel to zoom
F0Zoom to fit · reset zoom
GNSToggle grid · names · snapping
CtrlZUndo · add Shift to redo
CtrlDDuplicate the selection
CtrlSSave to file · CtrlO to open one
AltFree angle · insert a vertex on an edge

YOUR DATA, YOUR DISK

There is no server. The editor autosaves to your browser's local storage as you work, and Ctrl+S writes a real file wherever you point it.

The save format is flat, versioned JSON — no binary blob, no proprietary container. Commit it next to your project, diff it in a pull request, or read it from your own toolchain in about twenty lines.

Your maps are never uploaded. No account, no cookies, no ads — the editor is one HTML file that keeps working offline once it has loaded. The only thing measured is an anonymous count of page opens and of three actions: first edit, save, export. Nothing that identifies you, and nothing about what you drew. Turn on Do Not Track and even that stops.
{
  "version": 1,
  "name": "REACTOR SUBLEVEL",
  "gridSize": 20,
  "corridorWidth": 40,
  "zones": [
    { "id": "z1", "name": "SECTOR A", "color": "#35ff9e" }
  ],
  "rooms": [
    {
      "id": "r1", "zone": "z1", "kind": "room",
      "name": "ATRIUM",
      "points": [[0,0],[240,0],[240,160],[0,160]]
    }
  ],
  "doors": [
    { "id": "d1", "x": 240, "y": 80,
      "rot": 90, "type": "locked", "width": 36 }
  ],
  "markers": [
    { "id": "m1", "x": 40, "y": 40,
      "icon": "terminal", "label": "MAINFRAME" }
  ],
  "labels": []
}

The grid is waiting.

It opens with a starter layout on the canvas, so there is nothing to set up. Draw over it or hit NEW.

LAUNCH EDITOR →