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.
WHAT'S IN IT
Eight 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. Drag a box over several and move them as one.
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 AND OPENINGS
Click near a wall and the door finds it, aligns to it and draws its swing. Seven types: normal, plain opening, locked, hack-gated, hatch, stairs and one-way.
FIFTEEN MARKERS
Terminals, keycards, locks, loot, bodies, save points, blocked routes, hazards, cameras, breakers, objectives, spawns, lifts, offline zones and design notes.
PROPS
Crates, barrels, tables and chairs, drawn top-down on the floor. Each takes its own angle and size, and both carry to the next one you place — so a row of chairs lines up without fiddling.
ZONES & LEGEND
Group rooms into colour-coded sectors, and tick a room to fill it solid. 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.
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.
{
"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": []
}
FEEDBACK
Found a bug, or want the editor to do something it stubbornly refuses to? Say so. This is a one-person project, every message is read, and the annoying things get fixed first.
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 →