Documents

Drag and drop document editor

The canvas is a page, not a text box. Blocks are dragged, resized and snapped to a grid, and the pagination is worked out from what is on the page rather than from where you pressed enter.

Create a document with OneCraftThe canvas with the block toolkit, and how position and pagination relate
A website proposal open in the document builder with the block toolkit on the left
The document builder. Every block on the page is editable, and the toolkit on the left is what you can add.

A grid, not free pixels

Everything snaps to a 20 pixel grid. That is why a document built by dragging still looks aligned: you cannot leave a block three pixels out, because there is no three pixels. It also means two blocks placed at the same height genuinely line up rather than nearly lining up.

Order and grouping, not pagination

Position encodes three things: the order blocks are read in, which blocks share a row, and any whitespace you deliberately left. It does not encode pages. Where a page ends is worked out from the heights when the document is laid out, which is why adding a paragraph on page one reflows everything after it correctly instead of leaving a hole.

Side by side is a row

Two blocks at the same height with no overlap are a row, and they stay a row through pagination: if the row has to split across a page, the parts stay in step rather than one half jumping ahead. That is what makes two column sections survive editing.

Prettify when it drifts

After a lot of hand editing the vertical spacing wanders. Prettify re-applies the spacing rules for each block type in one action, so a document that has been edited for an hour goes back to a consistent rhythm without you measuring anything.

Rows and containers

The page is a stack of rows, and a row is divided into cells that add up to twelve columns. Side by side content is one row with two six column cells, and each cell holds its own blocks. That is why the AI chat has an operation for editing a cell inside a container: cells are addressable things, not a visual effect. Two panels stay aligned because they are one row, and they can only break between rows, so paired panels suit short parallel content rather than two long arguments.

What the canvas is not

Dragging moves a block within the reading order and onto the grid, not to an arbitrary pixel or an arbitrary page. Order and grouping decide pagination: you say what comes after what and what sits beside what, and the engine decides where the pages break. That is what makes the export match the screen exactly, and it is also why the fix for an awkward page is usually to move a block rather than to nudge it.

How it works, in three steps

  1. Step 1

    Drag blocks into reading order

    Order and rows are what position means. Pages are worked out for you.

  2. Step 2

    Put related blocks on the same row

    Same height, no overlap, and they stay together through pagination.

  3. Step 3

    Run Prettify at the end

    It re-applies the spacing rules and removes the drift from hand editing.

The full walkthrough with screenshots is in the guide Lay out a document exactly how you want it.

Limits worth knowing

See it on a finished piece

Questions people ask

Can I put a block exactly where I want on a page?

You control the order, the rows and the spacing, and that is the whole vocabulary. Which page something lands on comes out of the layout, and a page break block is how you force the issue. There is no dragging to a pixel, which is exactly why the export matches the screen: one engine decides placement, in both places.

Why did my layout shift after I added a paragraph?

Because pagination is re-derived from scratch rather than pinned, so everything after your edit reflows into the space it now has. It looks disconcerting the first time and it is the behaviour you want: the alternative is a document that grows holes in the middle as you edit it, which is how most word processors end up.

How do I make two blocks sit side by side?

Put them in one row as two cells. They then stay together through pagination and stay aligned to the same grid. Keep the two halves short and parallel, since a row can only break between rows, so a pair of long columns will move the whole row to the next page rather than flowing down it.

Can I set exact margins?

Margins come from the theme rather than from a per document setting, which is what keeps every page in a document, and every document on a theme, aligned to the same grid. If a block needs more air around it, the spacing controls on the block are the lever, not the page margin.

How do I make a two column section?

Put both halves in one row as two six column cells. Keep the content short and parallel, because a row can only break between rows and not inside a cell, so two long columns will push the whole row onto the next page rather than flowing down it like newspaper columns.

Make your own document

The button opens the generator with this use case already described. Change the wording to match yours, generate, then edit anything you like.

Create a document with OneCraft

Related pages

More finished work of this kind is on the document examples hub.

Written and checked by the OneCraft team. Last checked .