Drag and drop

Boards are direct manipulation surfaces: drag tickets within a column, between columns, into and out of the backlog, and drag whole columns to reorder them. Changes land for everyone watching the board in real time.

What you can drag

  • A ticket within its column — reorder it against its neighbors.
  • A ticket to another column — drop it exactly where it should sit in the destination column. This is also how status changes: the column a ticket sits in is its status.
  • A ticket into or out of the backlog — the backlog is a drag target like any column.
  • A column — drag a column header to reorder columns on the board.
  • A multi-selection — select several tickets (press X on each, or ⌘ + A / Ctrl + A for all in a column), then drag any selected ticket to move the whole group. The group lands in order at the exact drop position, written as one atomic change — either every ticket moves or none do.

Drags are optimistic: the board updates the moment you drop, then confirms against the server. If the write fails (for example you lost connection), the board rolls back and shows a toast.

Keyboard alternative

Every drag has a keyboard equivalent. Focus a ticket with J / K or the arrow keys, then press S to move it to a different column or the backlog. For several tickets, select with X first — S then moves the whole selection. See Keyboard shortcuts for the full list.

How ordering works

Can stores each ticket's position as a rank string (a lexorank), not a numeric index. When you drop a ticket between two others, it gets a new rank string that sorts between its neighbors — no other ticket needs to change.

This matters for two reasons:

  • Realtime safety — two people reordering the same column at the same time cannot corrupt each other's ordering; each move touches only the moved ticket.
  • No renumbering — a board with thousands of tickets reorders just as fast as a board with ten, because moving one ticket is always a single-document write.

You never see rank strings in the UI; they exist so that ordering is stable, fast, and conflict-free.