Skip to content

Drawing dependencies on the canvas

When one task can't start until another finishes, that's a dependency. The canvas lets you draw and remove dependencies directly — no need to open the detail panel.

Each task on the canvas has two small ports on its sides:

  • Right sideblocks (this task blocks something else)
  • Left sideblocked by (something else blocks this task)

To add a dependency:

  1. Hover the task you want to be the blocker until its right-side port appears.
  2. Click and drag from the right port across to the left-side port of the task you want to mark as blocked.
  3. Release. The new dashed arrow appears.

The arrow always points from the blocker to the blocked task — same direction the work has to flow.

What if the drop is refused?

If a drag would create a circular dependency (e.g. A blocks B, B blocks C, and you try to make C block A), every task that's part of the would-be loop tints red while you drag. The drop is refused; nothing happens on release.

This includes the task you're dragging from — you can't draw a dependency from a task to itself.

Remove a dependency

  1. Hover the dashed arrow you want to remove.
  2. A small red × appears at the middle of the arrow.
  3. Click it. The arrow disappears, and a "Dependency removed — Ctrl+Z to restore" toast appears in the corner.

Press Ctrl+Z (or Cmd+Z on macOS) to undo if you removed the wrong one.

What about parent / child relationships?

Parent / child edges (the arrows running up and down between tasks) work the same way, just using the top and bottom ports on each task.

To change a task's parent:

  1. Hover the task whose parent you want to change. Its top port appears.
  2. Click and drag from the top port to the bottom port of a new parent.
  3. Release. The old parent → child arrow disappears; a new one appears.

To detach a task (make it a top-level task with no parent):

  1. Hover the task. Its top port appears.
  2. Click and drag from the top port out into empty canvas.
  3. Release. The parent arrow disappears.

Both actions are reversible — Ctrl+Z puts the old parent back.

If a drop would create a circular parent relationship (e.g. dragging a parent onto one of its own children), every task that's part of the would-be loop tints red and the drop is refused — same affordance as the dependency cycle case.

Who can edit dependencies?

Anyone with editor or admin access to the project. If your role is read-only, the side ports and the × glyph won't appear; you'll still see every dependency on the canvas, just not the controls to change them.