1NX

One canvas, not four apps

Flowcharts, wireframes, mind maps, code, documents and images. Draw them, import them and keep editing them on one infinite canvas.

Shapes

Draw the thing first

Sketches, formal flowcharts, interface wireframes and mind maps use the same tools on the same sheet. Draw at whatever level the idea is at. You don't have to decide what kind of file this is first.

Infinite canvas

The canvas never fills up. Draw wherever you're thinking, and zoom to 10% to take in the whole thing at once.

Flowcharts

Pick a shape and start connecting; the arrows route themselves. When the layout drifts, one click rearranges it.

Wireframes

Navigation bars, forms, cards and modals come ready-made. Drag them out and you have a screen you can walk someone through.

Mind maps

Twelve layouts, eight palettes. Drag one node and the whole tree re-flows. Collapsing, notes, boundaries and relationship lines are all there.

Tables and swimlanes

Rows, columns and responsibility lanes keep themselves aligned. Adding one row won't skew the whole diagram.

Hand-drawn style

A sketchy line invites comments. When it's time to hand something over, one switch makes every stroke crisp.

Import and convert

Don't redraw what you've already written

Mermaid from your docs, PlantUML from your repo, a mind map exported from somewhere else: paste it in and it becomes canvas elements.

graph LR
  A[Order] --> B{In stock?}
  B -->|yes| C[Ship]
  B -->|no| D[Restock]

What lands on the right are elements, not a picture. Drag a node away, reword a label, change the palette, and keep drawing.

Documents and code

The original, laid open on the canvas

Drop in a PDF, a contract, a spreadsheet or a piece of code. They aren't attachments waiting to be downloaded. They're content you page through and read right where you are.

Code blocks

Syntax highlighting follows the language. Write web code and the canvas shows you what it renders.

// order.ts export const settle = (order: Order) => { if (!order.paid) return "awaiting payment"; return ship(order); };

Document preview

Page through it, or spread it out to compare. The original file stays inside the element and travels with the canvas when you share it.

Image editing

Images are material, not attachments

A pasted screenshot usually needs one more pass. Crop what's extra, cover what's sensitive, merge a few into one, all on the canvas, without bouncing out to an image editor.

Crop Drag the frame to set the shot; the original is one step away.
Slice Cut a tall image into pieces and walk through them one at a time.
Blur and erase Cover names and amounts, or wipe out a patch of background.
Collage Merge several images into one, with the margins aligned for you.

Large-canvas performance

A full canvas shouldn't stutter

Canvases get heavy with use. That's the real problem behind every whiteboard. We treat it as a test that can fail: every change drags and zooms ten thousand elements in a real browser, and a regression blocks the release.

Numbers from the most recent passing benchmark run, not marketing figures.
Scenario Measured What it means
Dragging with 10,000 elements on screen 9.5 ms Frame time, p95. The 60fps budget is 16.7 ms, so half of it is still free.
Frames dropped while dragging 0.23 % Share of frames over the 60fps budget: about two in a thousand.
Zooming out to 10% 5 ms From wheel input to the screen responding, p95.
Twenty 4K images ↓ 70 % What tiered previews save over full-size decoding, with the cache held under 192 MiB.

Measured on Chromium 150 and an Apple M1 Max through the real Canvas2D path, with 10,000 elements all inside the first screen and frame intervals taken from the performance.now() wall clock. The benchmark scripts and past results are in the open-source repository.

Start the next diagram here