Editor & Canvas
A precise, fast 2D editor for placing track pieces with millimetre-accurate geometry.
- Pan, zoom, and fit to viewAvailable now
Pan (middle / right drag, or the Pan tool) and scroll to zoom, with the 2D zoom bounded so it can't scroll off into empty space. A Fit-to-view button on the canvas frames the whole layout — centring and zooming to fit with a margin, or framing the baseboard when nothing's placed.
- Middle-click drag to panAvailable now
Middle-mouse drag pans the view in both 2D and 3D modes, alongside the existing right-click pan. The Pan tool in the left rail switches left-click to pan as well.
- Snap-to-grid with toggleAvailable now
- Infinite background gridAvailable now
The 2D grid extends indefinitely as you pan instead of cutting off at an arbitrary tile boundary. Its cell / section spacing adapts to the zoom so the lines stay a legible size — the familiar 100 mm cell / 500 mm section at normal zoom, stepping down through 50, 20, 10, 5, 2 mm to a 1 mm graph-paper grid up close (and coarser zoomed out). Zoom is bounded to that range so the view can't scroll endlessly past where the grid stops adding detail.
- Minimap overview of placementsAvailable now
Bottom-right SVG minimap that traces every placement's centerline at a glance, with the currently selected piece highlighted in orange. Its scale is anchored to the layout (or baseboard footprint when defined), so panning the camera anywhere — including far off the layout — never rescales the map. The viewport overlay clips to the border, and a chevron points home when the camera has wandered fully outside the framed area.
Read the docs - On-canvas scale barAvailable now
A Google-Maps-style ruler in the bottom-left of the 2D canvas: a bar of a round real-world length (mm / cm / m) sized to the current zoom, so distances on the layout are readable at a glance without measuring. Replaces a non-functional placeholder zoom readout.
- Standard 2D track symbologyAvailable now
In the 2D (orthographic) view each placed piece is drawn with the standard model-railway plan symbology — a black outline tracing the track bed, plus a black cap line at every connector marking where pieces join, plus a marking for special pieces: a synthetic glyph for uncouplers (which import as a plain straight) and whatever marking a piece carries from the import (the buffer-stop drawing, edge marks). The colour-coded fill (piece kind, selection, off-board warning, layer tint) stays underneath. 3D keeps the plain extruded bed.
- Footprint / schematic 2D toggleAvailable now
A Footprint / Schematic switch in the canvas's top-left corner — like AutoCAD's in-viewport visual-style control — flips the 2D view between the footprint — the sleeper outline that matches the physical piece, the default — and a schematic: a thin centerline per piece for reading dense trackwork at a glance. Both are the same editing surface (identical snapping, selection and connection); only the drawing changes. The choice is remembered on the device, and the selector hides in the pure 3D view.
- Customise schematic line weight and track coloursAvailable now
The schematic centreline is thicker by default and its weight is adjustable, and every per-state track colour — straight, curve, turnout/crossing/slip, structure, selected, validation error, warning/off-board, incompatible, and the placement ghosts — is customisable, with a reset to defaults. Settings live on the in-app profile (Schematic appearance), sync to your account, and are mirrored on the device so they follow you and work offline. The colours apply across the 2D views; the weight is schematic-only.
- Realistic 3D rails and sleepersAvailable now
In the 3D (perspective) view each placed piece now carries a genuine superstructure on top of its bed — two raised steel rails at the system's real gauge plus timber sleeper ties spaced at the system's tie pitch — instead of the plain extruded bed. Rails and ties are built as one or two merged meshes per piece, so the detail stays cheap even on a large layout. The 2D footprint and schematic views are unchanged.
- Metric / imperial unit displayAvailable now
A metric ⇄ imperial toggle in the status bar switches every length the planner shows — the cursor readout, inspector dimensions, catalogue tiles, scale bar, validation messages, and the New-layout / snap-step / deck-elevation inputs — between millimetres and inches. Metric stays the single canonical stored & computed unit (all geometry, snapping, and exports remain mm); imperial is a pure display derivation, parsed back to mm on input. The choice is a per-user preference (defaults to metric), synced to the account when signed in and remembered on-device otherwise. Angles (°) and grade (%) are unitless and read the same in both.
Read the docs - Auto-snap to connectors with angle alignmentAvailable now
- Ghost-piece preview with rotation while placingAvailable now
- Overlap detection between piecesAvailable now
- Refuse to place overlapping tracksAvailable now
The candidate ghost turns red and the click is refused when a placement would land on top of an existing piece it isn't joining, with an on-canvas hint naming the reason ("Overlaps an existing piece") so the refusal isn't silent. Pieces about to be snap-joined or close-joined (loop closures) stay allowed. Dragging an already-placed piece is gated the same way — the dragged piece turns red and the drop is refused (it snaps back) when it would overlap a piece it isn't joining. Laying a run stops at the first piece that would cross existing track: that piece previews red and nothing past it is laid.
- Selection, rotation, and deletion of placed piecesAvailable now
- Keyboard shortcuts for common actionsAvailable nowRead the docs
- Undo historyAvailable now
- Redo supportAvailable now
- Multi-select and group operationsAvailable now
Shift+click adds a piece to the selection (or removes it if already in); a plain click replaces the selection. Left-click drag on empty ground draws a marquee rectangle that selects every overlapping piece on release (shift extends instead of replacing). Left-click drag on a selected piece moves the whole selection together as one undo step — single-piece drags also run the connector snap so a release near a free connector lands on the join with the correct rotation. R / Shift+R rotates every selected piece by ±15° in place; Delete / Backspace removes the whole group. Escape backs out one step — closes any open dialog, then exits place mode, then clears the selection.
- Hold Shift to constrain a move to one axisAvailable now
Holding Shift while dragging a placed piece (or a multi-selection) locks the move to a single axis — the one the cursor has travelled farthest along, switching live if you reverse direction — so you can nudge a piece straight along the bench without drifting sideways. A dashed guide line through the grab point marks the locked axis. Works the same in the 2D editor and the 3D verification view. Shift at the start of a press still extends the selection; the lock only engages once a drag is in flight.
- Drag pieces directly from the catalogue panelAvailable now
Press on a catalogue card and drag onto the canvas; release commits the placement in one motion with the same snap / closure / overlap behaviour as click-to-place. The existing two-click flow (click card, click canvas) still works. Releasing on the dock or off-canvas cancels the drag without placing.
- Catalogue compatibility hint against the selected pieceAvailable now
When a piece is selected on the canvas, the catalogue cards visibly mark which pieces can mate with it (green-tinted border + corner dot) and which can't (faded). Driven by strict connector_type matching, so transition pieces stay surfaced from either side.
- Canvas compatibility tint against the queued pieceAvailable now
The reverse signal: when a catalogue piece is queued for placement, every existing placed piece that can't accept it (no shared connector type) renders in muted red. Selection still wins, so an explicitly clicked piece stays orange.
- Start with an empty canvasAvailable now
The new-layout welcome panel now offers a third option alongside "Build from a starter set" and "Try the demo oval": skip the picker and start placing pieces directly. The starter-set dialog stays reachable from the top bar and command palette for users who change their mind.
- Name every layout when you create itAvailable now
Every "New layout" entry point — the home page (signed in or anonymous), the layout switcher, the command palette, and the website's layout list — now routes through the same dialog, which asks for a name (and a baseboard size) before creating. The home buttons used to create an unnamed "Untitled layout" straight away; they now prompt first, so a new plan starts with a name you chose.
- In-canvas mirror flip for symmetric piecesAvailable now
Shift+F mirrors the selected placement (or the ghost while in place mode) across the piece's local X axis, swapping a curve's hand or a left turnout into a right turnout. The inspector's Properties panel exposes the same toggle as a Mirror flip row, and the flipped state persists to the layout's DB row so refreshes preserve handedness. One SKU, two hands — the catalogue no longer needs separate left and right entries for symmetric pieces.
- Right-click contextual menuAvailable now
Right-click on a placed piece opens a menu with Rotate clockwise / counter-clockwise, Mirror flip, and Delete — applied to the whole multi-selection when the right-clicked piece is part of one, otherwise scoped to just that piece (selection auto-replaces to match). Right-click on empty ground opens a layout-level menu (Select all, Clear selection, Toggle grid, Toggle polarity). Arrow-key + Enter navigation; Escape or an outside click dismisses. The previous right-click-to-pan camera binding has been retired — pan now lives exclusively on middle-mouse drag and on the Pan tool's left-click drag.
- Group rotation around a shared centroidAvailable now
Rotating a multi-selection now treats the group as a rigid body. Each piece's world position rotates around the selection's centroid before its heading bumps by the same delta, so the layout's internal structure is preserved. Single-piece rotation is the same shape (centroid of one point = the point) and keeps its previous spin-in-place feel. Joins straddling the rotated set drop in the same undo step; joins internal to the set survive. R / ⇧R and the right-click Rotate menu items both run through this path.
- Choose the rotation pivotAvailable now
The pivot is now the selection's free connector (any connector with no join attached) closest to the cursor. For a right-click rotate, that's where you clicked; for the R / ⇧R shortcut, it's wherever your mouse currently is on the canvas. Single-piece rotation finally lets you choose which end spins — cursor near A spins around A, cursor near B spins around B. Falls back to the centroid only when the cursor is off the canvas or no piece has a free connector (e.g. fully closed loops).
- Jump to a joined neighbour from the inspectorAvailable now
When a placed piece has a join on either endpoint, the inspector's selection card now shows the joined neighbour's name as a clickable link under the endpoint status. One click replaces the selection with the joined piece, so you can walk a chain end-to-end from inside the inspector instead of hunting pieces down on the canvas.
- Inspector grouped into context zonesAvailable now
The right-side inspector is split into three labelled zones instead of one flat accordion list: Selected piece (the selection card and its Properties), Whole layout (Validation, Bill of Materials, Layout Stats, and Polarity & Wiring), and Authoring (Decks and Layers). The panels and their behaviour are unchanged — they just read as grouped blocks so what's selected, what describes the whole plan, and what controls how the layout is organised are visually separate.
- Collapse the inspector panelAvailable now
A chevron in the inspector header minimises the panel to a thin rail, handing its width back to the canvas; the rail's chevron brings it back. The collapsed state is remembered per browser, so a panel you minimised stays minimised across reloads. The panel keeps its resizable width — collapsing and expanding doesn't lose it.
- Cursor-side auto-flip on placementAvailable now
While the placement ghost is snapping to a free connector, the cursor's side of the snap tangent decides which hand the ghost takes — drag above for a left-hand curve, below for a right-hand one. Same rule for turnouts. Straights and other symmetric pieces are left alone. A toggle in the top-right canvas chrome opts out when you want manual Shift+F control; defaults to ON.
- Insert many — drag to lay a run of trackAvailable now
With the Place tool armed and a straight or curve queued, press and drag on the canvas to lay a whole run at once. Each piece previews as a ghost that snaps onto the previous one's open end the way you'd drop track by hand — so every ghost becomes the anchor for the next; dragging out adds pieces, pulling back removes them (straights make a line, curves make an arc), and the chain's open end shows a connector dot. Press near a free endpoint and it continues that track; from empty space the first piece keeps its previewed (flat) orientation and the run extends along it toward the cursor, so a straight stays straight instead of swinging to the drag angle. Release commits the run in a single undo step. A plain click (or a drag shorter than half a piece) still places one. Turnouts, crossings, flex, and ramps keep one-per-click.
- Visible "Checks performed" panel in validationAvailable now
The validation accordion now lists Closure, Minimum radius, Clearance, and Grade as separate rows under the issues, each with a pass / fail / skipped badge. Failing rows show the issue count; skipped rows show the reason ("pick a reference train", "no joins yet", "no graded pieces yet"). Makes it explicit what the validator inspected rather than reading silence as nothing-to-check.
- Baseboard size + visible outline + off-board validationAvailable now
The New layout dialog now takes a baseboard width and depth in cm (range 20–1000, defaults 200 × 100), stored as mm under the hood. The canvas draws the rectangle as a subtle wood-tinted outline in both 2D and 3D so the user can see what they have to fit. A new validation check (Baseboard bounds) flags any piece whose footprint extends past the edge with a yellow-band 'Piece off baseboard' issue, surfaced in the issues list, the Checks-performed panel, and on the canvas itself — off-board pieces are tinted amber so they read at a glance, not just in the panel. Modular benches that intentionally overhang aren't blocked — the validator just warns. Polyline / non-rectangular baseboards are a future track.
Read the docs - Custom baseboard colourAvailable now
The board-colour picker — in both the New layout dialog and the layout-settings popover — gains a custom-colour swatch alongside the wood and neutral presets. It opens the system colour picker (with hex entry) for any colour, previews live on the canvas, and saves with the layout. The custom tile reads as active whenever the board's colour isn't one of the presets.
- Layout switcher in the top-leftAvailable now
Clicking the layout name opens a dropdown of every other layout the user owns (most-recently edited first), plus '+ New layout…' and 'Browse all layouts…' entries. The previous click-to-starter-set behaviour moved to the command palette and the empty-canvas welcome panel — switching between layouts in the editor is now one click instead of a trip back to the list page.
- Per-user preferred scales + \ shortcut to overrideAvailable now
Profile Preferences exposes a multi-select chip group (All / HO / OO / N) that persists to the user record. When set, the editor's catalogue dock shows only the picked scales — pick HO + OO and the N picker hides until you change the preference. Pressing ⇧S in the editor temporarily shows all scales for the current view (session-only, doesn't touch the saved preference); pressing again restores the filtered view.
- Scale-aware reference-train dropdownAvailable now
The validation accordion's reference-train picker filters by the focused piece's scale. Select an HO piece on the canvas (or highlight one in the catalogue) and N-scale and OO-scale trains drop out of the dropdown; if the current selection no longer fits, the dropdown auto-switches to the first remaining match so the validator stays consistent with the user's focus.